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 reference):
<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-файлах я управляю статусом (нажата, выбрана, по умолчанию)
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>кнопка, Добавить
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.
для 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" />
Comments