Селектор кнопок 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>
Ответы
Ответ 1
Вам просто нужно установить 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>
В этом вы видите, что есть 3 чертежа, вам просто нужно поместить этот стиль button_effect
в свой button
, как я написал выше. Вам просто нужно заменить selector_xml_name
на button_effect
.
Ответ 2
Вы не можете добиться изменения размера текста с помощью списка состояний > . Чтобы изменить цвет текста и размер текста, выполните следующие действия:
Цвет текста
Чтобы изменить цвет текста, вы можете создать цветной список состояний цвета. Это будет отдельный ресурс, расположенный в директории 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)
. Метод внутренне вызывается, когда происходит изменение нажатого состояния. Затем измените размер текста соответственно в вызове метода (не забудьте вызвать супер).
Ответ 3
Создайте 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>
вы можете проверить полное решение от здесь
Ответ 4
Лучший способ реализовать селектор - использовать 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
Ответ 5
Вы можете использовать этот код:
<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>