Как я могу изменить и цвета текста и цвета фона, когда моя кнопка нажимается с xml?
Для изменения цвета текста, я могу сделать:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="mycolor"/>
<item android:color="mycolor2/>
</selector>
Для изменения фона, я могу сделать (использование его в селекторе/объекте с drawable ссылкой):
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FF0079FF" />
</shape>
Но как я могу сделать обоих? Скажем, я хочу иметь:
Я полностью забыл, что цветом фона и цветом текста управляют отдельно, таким образом, это - то, как я сделал это:
<Button
android:textColor="@color/filtersbuttoncolors"
android:background="@drawable/mybackgroundcolors" />
В mybackgroundcolors.xml я управляю фоном, и в filtersbuttoncolors.xml я управляю цветом текста. В обоих XML-файлах я управляю состоянием (нажатый, выбранный, значение по умолчанию)
добавьте ниже строки в styles.xml
<style name="AppTheme.Gray" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorButtonNormal">@color/colorGray</item>
</style>
в кнопке, добавьте android:theme="@style/AppTheme.Gray"
, пример:
<Button
android:theme="@style/AppTheme.Gray"
android:textColor="@color/colorWhite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@android:string/cancel"/>
Просто дополнение ответа @Jonsmoke.
Для уровня API 21 и выше Вас может использовать:
android:backgroundTint="@android:color/white"
в XML для макета кнопок.
Для уровня API ниже 21 используют AppCompatButton с помощью пространство имен приложения вместо [1 110] андроид для backgroundTint.
, Например:
<android.support.v7.widget.AppCompatButton
android:id="@+id/my_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="My Button"
app:backgroundTint="@android:color/white" />
Начиная с уровня API 21 можно использовать:
android:backgroundTint="@android:color/white"
только необходимо добавить это в xml