ボタンを押したときに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>
しかし、どうすれば両方を行うことができますか?私が持ちたいとしましょう:
背景とテキストの色が別々に管理されていることを完全に忘れていたので、次のようにしました。
<Button
Android:textColor="@color/filtersbuttoncolors"
Android:background="@drawable/mybackgroundcolors" />
Mybackgroundcolors.xmlでは背景を管理し、filtersbuttoncolors.xmlではテキストの色を管理します。両方のxmlファイルで、ステータスを管理します(押された、選択された、デフォルト)
デフォルトでは白、押されると黒になるドロアブルの例を次に示します。
<?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>
APIレベル21以降では、次を使用できます。
Android:backgroundTint="@Android:color/white"
これをXMLに追加するだけです
この方法を行う方がはるかに簡単だと思います:
button.setBackgroundColor(Color.BLACK);
そして、あなたはimport Android.graphics.Color;
する必要があります:import Android.R.color;
または、最初のバイトがアルファを設定している4バイトの16進コード(3バイトではなく)0xFF000000
を記述することもできます。
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。
21以下のAPIレベルでは、Android forbackgroundTintの代わりにapp名前空間を使用してAppCompatButtonを使用します。
例えば:
<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" />
アプリを作成すると、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は、Drawableのフォルダーに配置したカスタム画像です。 300x300のpng画像です。
#295055は濃い青色です。
私のコードは背景とテキストの色を変更します。ボタンのテキストについては、Googleのネイティブなスタイル(上記のリンク)をご覧ください。
次に、Androidマニフェストに、忘れずにコードを含めます。
<application
Android:theme="@style/Theme.AppBaseTheme">