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>
чтобы изменить фон, который я могу сделать (используя его в селекторе / элементе с drawable ссылкой):
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FF0079FF" />
</shape>
но как я могу сделать и то, и другое ? Допустим, я хочу иметь:
- по умолчанию : черный текст / белый фон
- нажата: белый текст / синий фон
EDIT: ответ
Я совсем забыл, что цвет фона и текста управляются отдельно, так что вот как я это сделал:
<Button
android:textColor="@color/filtersbuttoncolors"
android:background="@drawable/mybackgroundcolors" />
в mybackgroundcolors.xml я управляю фоном и в filtersbuttoncolors.xml я управляю цветом текста. В обоих xml-файлах я управляю статусом (нажата, выбрана, по умолчанию)
6 ответов
вот пример 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>
Я думаю, что делать это намного проще:
button.setBackgroundColor(Color.BLACK);
а нужно import android.graphics.Color;
нет: import android.R.color;
или вы можете просто написать 4-байтовый шестнадцатеричный код (не 3-байтовый) 0xFF000000
где первый байт устанавливает Альфа.
С уровня API 21 Вы можете использовать:
android:backgroundTint="@android:color/white"
вам нужно только добавить это в свой xml
добавить ниже строку в стилях.в XML
<style name="AppTheme.Gray" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorButtonNormal">@color/colorGray</item>
</style>
кнопка in, добавить 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"/>
при создании приложения, файл под названием стили.xml будет создан в папке res/values. Если вы измените стили, вы можете изменить фон, цвет текста и т. д. для всех ваших макетов. Таким образом, вам не нужно входить в каждый отдельный макет и изменять его вручную.
стили.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-это пользовательское изображение, которое я помещаю в папку drawable. Это изображение 300x300 png.
#295055 темно-синий цвет.
мой код изменяет цвет фона и текста. Для текста кнопки, пожалуйста, просмотрите родной stlyes Google (ссылка, которую я дал u выше).
затем в Манифесте Android, не забудьте включить код:
<application
android:theme="@style/Theme.AppBaseTheme">
просто дополняя ответ @Jonsmoke's.
для API уровня 21 и выше вы можете использовать:
android:backgroundTint="@android:color/white"
в XML для макета кнопки.
для уровня API ниже 21 используйте AppCompatButton используя app пространство имен вместо android на 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" />