Android: изменить текст кнопки и цвет фона
Как изменить цвет текста и фона при нажатии на кнопку с помощью xml?
Чтобы изменить цвет текста, я могу сделать:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="mycolor"/>
<item android:color="mycolor2/>
</selector>
Чтобы изменить фон, который я могу сделать (используя его в селекторе/элементе с возможностью рисования):
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FF0079FF" />
</shape>
Но как я могу сделать то и другое? Скажем, я хочу:
- По умолчанию: черный текст/белый фон
- Нажмите: белый текст/синий фон
EDIT: answer
Я полностью забыл, что цвет фона и текста управляется отдельно, так вот как я это сделал:
<Button
android:textColor="@color/filtersbuttoncolors"
android:background="@drawable/mybackgroundcolors" />
В mybackgroundcolors.xml я управляю фоном и в filtersbuttoncolors.xml Я управляю цветом текста. В обоих файлах xml я управляю статусом (нажатым, выбранным, по умолчанию)
Ответы
Ответ 1
Ниже приведен пример drawable, который будет белым по умолчанию, черный при нажатии:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape>
<solid
android:color="#1E669B"/>
<stroke
android:width="2dp"
android:color="#1B5E91"/>
<corners
android:radius="6dp"/>
<padding
android:bottom="10dp"
android:left="10dp"
android:right="10dp"
android:top="10dp"/>
</shape>
</item>
<item>
<shape>
<gradient
android:angle="270"
android:endColor="#1E669B"
android:startColor="#1E669B"/>
<stroke
android:width="4dp"
android:color="#1B5E91"/>
<corners
android:radius="7dp"/>
<padding
android:bottom="10dp"
android:left="10dp"
android:right="10dp"
android:top="10dp"/>
</shape>
</item>
</selector>
Ответ 2
Я думаю, что делать это намного проще:
button.setBackgroundColor(Color.BLACK);
И вам нужно import android.graphics.Color;
not: import android.R.color;
Или вы можете просто написать 4-байтовый шестнадцатеричный код (не 3-байтовый) 0xFF000000
, где первый байт устанавливает альфу.
Ответ 3
Начиная с уровня API 21, вы можете использовать:
android:backgroundTint="@android:color/white"
вам нужно добавить это в свой xml
Ответ 4
добавить строку ниже в 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"/>
Ответ 5
При создании приложения в папке res/values будет создан файл с именем styles.xml. Если вы измените стили, вы можете изменить фон, цвет текста и т.д. Для всех ваших макетов. Таким образом, вам не нужно входить в каждый отдельный макет и менять его вручную.
styles.xml:
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="Theme.AppBaseTheme" parent="@android:style/Theme.Light">
<item name="android:editTextColor">#295055</item>
<item name="android:textColorPrimary">#295055</item>
<item name="android:textColorSecondary">#295055</item>
<item name="android:textColorTertiary">#295055</item>
<item name="android:textColorPrimaryInverse">#295055</item>
<item name="android:textColorSecondaryInverse">#295055</item>
<item name="android:textColorTertiaryInverse">#295055</item>
<item name="android:windowBackground">@drawable/custom_background</item>
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>
parent="@android:style/Theme.Light"
- родной цвет Google. Вот ссылка на то, что являются родными стилями:
https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml
name="Theme.AppBaseTheme"
означает, что вы создаете стиль, наследующий все стили от parent="@android:style/Theme.Light"
.
Эта часть, которую вы можете игнорировать, если вы хотите снова наследовать из AppBaseTheme. = <style name="AppTheme" parent="AppBaseTheme">
@drawable/custom_background - это пользовательское изображение, которое я помещаю в папку drawables. Это изображение размером 300 × 300 пикселей.
# 295055 - темно-синий цвет.
Мой код меняет цвет фона и текста. Для текста кнопки, пожалуйста, просмотрите родные стили Googles (ссылка, которую я дал выше).
Затем в Android Manifest не забудьте указать код:
<application
android:theme="@style/Theme.AppBaseTheme">