Селектор кнопок Android

Это селектор кнопок, так что при нормальном отображении появляется красный цвет, при нажатии он выглядит серым.

Я хотел бы спросить, каким образом код может быть непосредственно изменен таким образом, что при PRESSED размер текста и цвет также могут измениться? Большое спасибо!

<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> 

Solutions Collecting From Web of "Селектор кнопок Android"

Вам просто нужно установить 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 файл button_effect.xml в каталоге с возможностью button_effect.xml

 <?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> 

В этом случае вы можете видеть, что есть 3 drawables, вам просто нужно поместить этот стиль button_effect на вашу button , как я написал выше. Вам просто нужно заменить selector_xml_name на button_effect .

Вы не можете добиться изменения размера текста с помощью списка состояний . Чтобы изменить цвет текста и размер текста, выполните следующие действия:

Цвет текста

Чтобы изменить цвет текста, вы можете создать ресурс списка состояний цвета . Это будет отдельный ресурс, расположенный в каталоге 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) решение может заключаться в расширении представления и переопределении setPressed(Boolean) . Метод внутренне вызывается, когда происходит изменение нажатого состояния. Затем измените размер текста соответственно в вызове метода (не забудьте вызвать супер).

Создайте 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> 

Создать форму selected.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> 

Создать форму unselected.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> 

Вы можете проверить полное решение отсюда

Лучший способ реализовать селектор – использовать 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

Вы можете использовать этот код:

 <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>