74

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ファイルで、ステータスを管理します(押された、選択された、デフォルト)

4

7 に答える 7

49

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

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

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

于 2016-07-15T16:24:53.070 に答える
46

以下は、デフォルトでは白で、押すと黒になるドローアブルの例です。

<?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>
于 2013-10-16T10:15:35.720 に答える
27

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

button.setBackgroundColor(Color.BLACK);

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

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

于 2014-06-23T04:25:28.933 に答える
4

アプリを作成すると、res/values フォルダーに styles.xml というファイルが作成されます。スタイルを変更すると、すべてのレイアウトの背景、テキストの色などを変更できます。そうすれば、個々のレイアウトに移動して手動で変更する必要がなくなります。

スタイル.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">
于 2014-02-24T09:46:32.857 に答える