web-dev-qa-db-ja.com

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>

しかし、どうすれば両方を行うことができますか?私が持ちたいとしましょう:

  • デフォルト:黒のテキスト/白の背景
  • 押される:白いテキスト/青い背景

編集:回答

背景とテキストの色が別々に管理されていることを完全に忘れていたので、次のようにしました。

<Button
    Android:textColor="@color/filtersbuttoncolors"
    Android:background="@drawable/mybackgroundcolors" />

Mybackgroundcolors.xmlでは背景を管理し、filtersbuttoncolors.xmlではテキストの色を管理します。両方のxmlファイルで、ステータスを管理します(押された、選択された、デフォルト)

59
Maelig

デフォルトでは白、押されると黒になるドロアブルの例を次に示します。

<?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>
41
Mitesh Shah

APIレベル21以降では、次を使用できます。

Android:backgroundTint="@Android:color/white"

これをXMLに追加するだけです

23
Jonsmoke

この方法を行う方がはるかに簡単だと思います:

button.setBackgroundColor(Color.BLACK);

そして、あなたはimport Android.graphics.Color;する必要があります:import Android.R.color;

または、最初のバイトがアルファを設定している4バイトの16進コード(3バイトではなく)0xFF000000を記述することもできます。

23
user1718854

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"/>
12
Sỹ Phạm

@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" />
9
Abdul Wadood

アプリを作成すると、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">
3
Gene