Android кнопка вибору


115

Це селектор кнопок такий, що при нормальному відображенні він стає червоним, при натисканні - сірим.

Мені хотілося б запитати, як можна далі змінити код таким чином, щоб, коли ПІДГОТОВЛЕНО, розмір і колір тексту також могли змінюватися? Велике дякую!

<item android:state_pressed="true" >         
    <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
        <stroke android:width="2dp" android:color="@color/black" />
        <solid android:color="@color/grey"/>
        <padding android:left="5dp" android:top="2dp" 
            android:right="5dp" android:bottom="2dp" /> 
        <corners android:radius="5dp" /> 
    </shape>    
</item>

<item>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
        <stroke android:width="2dp" android:color="@color/black" />
        <solid android:color="#FF6699"/>
        <padding android:left="5dp" android:top="2dp" 
            android:right="5dp" android:bottom="2dp" /> 
        <corners android:radius="5dp" /> 
    </shape>
</item>

Відповіді:


217

Вам просто потрібно встановити selectorз buttonв файлі макета.

<Button
     android:id="@+id/button1"
     android:background="@drawable/selector_xml_name"
     android:layout_width="200dp"
     android:layout_height="126dp"
     android:text="Hello" />

і зробили.

Редагувати

Далі - button_effect.xmlфайл у drawableкаталозі

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/numpad_button_bg_selected" android:state_selected="true"></item>
    <item android:drawable="@drawable/numpad_button_bg_pressed" android:state_pressed="true"></item>
    <item android:drawable="@drawable/numpad_button_bg_normal"></item>

</selector>

У цьому ви бачите, що є три малюнки, вам просто потрібно розмістити цей button_effectстиль під своїм button, як я писав вище. Вам просто потрібно замінити selector_xml_nameна button_effect.


Ви можете, будь ласка, детальніше розглянути, як встановити натиснуті та не натиснуті стан? (з усіма компонентами вище, такими як круглий колір, штрих тощо). Велике дякую!
pearmak

Найкращий спосіб реалізувати селектор - це використовувати xml, посилаючись на цей blazin.in/2016/03/how-to-use-selectors-for-botton.html, який я реалізую відповідно до цього та його роботи
Bhushan Shirsath

Привіт, я знаю, що ти вже писав цей пост, але, можливо, ти будеш знати, чого я пропускаю. Я використовував ваш код, і моя кнопка завжди зелена, тоді для натиснутої = істинної та вибраної = правдивої, вона змінюється в темно-сірий колір, але перед тим, як відкрити іншу діяльність, кнопка має стиль Android за замовчуванням. Будь-яка ідея, в якому стані мені не вистачає?
volfk

27

Ви не можете домогтися зміни розміру тексту, якщо список станів може бути доступним . Щоб змінити колір і розмір тексту, зробіть це:

Колір тексту

Для зміни кольору тексту можна створити ресурс списку стану кольорів . Це буде окремий ресурс, розташований у res/color/каталозі. У макеті xml ви повинні встановити його як значення для android:textColorатрибута. Вибір кольору буде містити щось подібне:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/text_pressed" />
    <item android:color="@color/text_normal" />
</selector>

Розмір тексту

Ви не можете змінити розмір тексту просто ресурсами. Немає "селекторного розміру". Ви повинні це зробити в коді. І прямого рішення немає.

Можливо, найпростішим рішенням може бути використання View.onTouchListener()та відповідне поводження з подіями вгору та вниз. Використовуйте щось подібне:

view.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                // change text size to the "pressed value"
                return true;
            case MotionEvent.ACTION_UP:
                // change text size to the "normal value"
                return true;
            default:
                return false;
            }
        }
});

Іншим рішенням може бути розширення подання та перегляд setPressed(Boolean)методу. Метод називається внутрішньо, коли відбувається зміна натиснутого стану. Потім відповідно змініть розмір тексту у виклику методу (не забудьте зателефонувати супер).


14

Створіть custom_selector.xml у папці, що малюється

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@drawable/unselected" android:state_pressed="true" />
   <item android:drawable="@drawable/selected" />
</selector>

Створіть обрану форму.xml у папці, що витягується

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="90dp">
   <solid android:color="@color/selected"/>
   <padding />
   <stroke android:color="#000" android:width="1dp"/>
   <corners android:bottomRightRadius="15dp" android:bottomLeftRadius="15dp" android:topLeftRadius="15dp" android:topRightRadius="15dp"/>
</shape>

Створіть невиділену форму.xml у папці, що малюється

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="90dp">
   <solid android:color="@color/unselected"/>
   <padding />
   <stroke android:color="#000" android:width="1dp"/>
   <corners android:bottomRightRadius="15dp" android:bottomLeftRadius="15dp" android:topLeftRadius="15dp" android:topRightRadius="15dp"/>
</shape>

Додайте наступні кольори для вибраного / невибраного стану в папку значень color.xml

<color name="selected">#a8cf45</color>
<color name="unselected">#ff8cae3b</color>

ви можете перевірити повне рішення тут


2

Найкращим способом реалізації селектора є використання xml, а не використання програмного способу, оскільки його легше реалізувати з xml.

    <?xml version="1.0" encoding="utf-8"?>    
<selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@drawable/button_bg_selected" android:state_selected="true"></item>
        <item android:drawable="@drawable/button_bg_pressed" android:state_pressed="true"></item>
        <item android:drawable="@drawable/button_bg_normal"></item>

    </selector>

Для отримання додаткової інформації, яку я реалізував за цим посиланням http://www.blazin.in/2016/03/how-to-use-selectors-for-botton.html


2

У макеті .xml-файлу

<Button
 android:id="@+id/button1"
 android:background="@drawable/btn_selector"
 android:layout_width="100dp"
 android:layout_height="50dp"
 android:text="press" />

btn_selector.xml

<?xml version="1.0" encoding="utf-8"?>

 <item android:drawable="@drawable/btn_bg_selected" android:state_selected="true"></item>
<item android:drawable="@drawable/btn_bg_pressed" android:state_pressed="true"></item>
<item android:drawable="@drawable/btn_bg_normal"></item>


1

Ви можете використовувати цей код:

<Button
android:id="@+id/img_sublist_carat"
android:layout_width="70dp"
android:layout_height="68dp"
android:layout_centerVertical="true"
android:layout_marginLeft="625dp"
android:contentDescription=""
android:background="@drawable/img_sublist_carat_selector"
android:visibility="visible" />

(Файл вибору) img_sublist_carat_selector.xml:

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_focused="true" 
       android:state_pressed="true"        
       android:drawable="@drawable/img_sublist_carat_highlight" />
 <item android:state_pressed="true" 
       android:drawable="@drawable/img_sublist_carat_highlight" />
 <item android:drawable="@drawable/img_sublist_carat_normal" />
</selector>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.