87

アクティビティにボタンがあり、テーマのアクセント カラーを使用したいと考えています。backgroundTintLollipop 以前のように独自のドローアブルを作成する代わりに、当然、新しい属性を使用したいと思います。

<Button
    android:id="@+id/btnAddCode"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:backgroundTint="@color/accent"
    android:text="@string/addressInfo_edit_addCode" />

残念ながら効果はなく、ボタンはグレーのままです。

にさまざまな値を試しましbackgroundTintModeたが、何も変わりませんでした。

また、アクティビティでプログラムで実行しようとしましたが、何も変わりませんでした。

addCodeView.findViewById(R.id.btnAddCode).setBackgroundTintList(
     getResources().getColorStateList(R.color.accent));

私の色合いが無視されるのはなぜですか?

編集: 明確にするために、私は実際に Lollipop デバイスでテストしています。他のウィジェット (EditText など) は正しく自動的に着色されます。

4

16 に答える 16

22

私は通常、PorterDuff を使用して動的に行います。

mbutton = (Button) findViewById(R.id.mybutton);
mbutton.getBackground().setColorFilter(anycolor, PorterDuff.Mode.MULTIPLY);

ここでさまざまなブレンドモードを確認でき、ここで素敵な例を確認できます

于 2015-08-25T10:42:35.363 に答える
22

Android 5.0.x での着色に関連する問題を解決するには、次のようなものを使用します。

public static void setButtonTint(Button button, ColorStateList tint) {
    if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP && button instanceof AppCompatButton) {
        ((AppCompatButton) button).setSupportBackgroundTintList(tint);
    } else {
        ViewCompat.setBackgroundTintList(button, tint);
    }
}

API 21 のみにサポート メソッドを使用し、他のすべてのケースには ViewCompat メソッドを使用します。

于 2015-05-18T21:44:06.257 に答える
20

app:backgroundTintの代わりに使用するだけでandroid:backgroundTint、ロリポップの下で色合いが有効になります。その理由は、Button または TextView を AppCompatButton または AppCompatTextView に自動変更して有効にするためにAppCompatActivity使用されるためです。AppCompatViewInflaterapp:backgroundTint

ここに画像の説明を入力

私のプロジェクトでは、それを使用しましたが、うまくいきました。

于 2016-07-13T15:08:30.133 に答える
18

API 19 から API 27 でテスト済み

<?xml version="1.0" encoding="utf-8"?>
  <android.support.v7.widget.AppCompatButton 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    style="@style/Widget.AppCompat.Button.Colored"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/retry"
    android:textColor="@android:color/white"
    app:backgroundTint="@android:color/holo_red_dark" />

出力を次のように生成します -

ここに画像の説明を入力

于 2018-04-04T16:52:01.827 に答える
9

android:background仕事をするために設定する必要があると思いますandroid:backgroundTint

より正確に言うとbackgroundTint、デフォルトのボタンの背景をマテリアル テーマ ( RippleDrawable.

于 2015-01-02T00:52:58.970 に答える
3

同様の問題が Google で報告されましたhttps://code.google.com/p/android/issues/detail?id=201873

しかし、Android Support Library のリビジョン23.2.1 (2016 年 3 月)のリリース後、このバグは解決されました。

問題 : FloatingActionButton.setBackgroundTintList(@Nullable ColorStateList tint) が背景色を変更しなくなりました

サポート ライブラリを次のように更新します。Android Support Library to 23.2.1

以下のように、デザインサポートライブラリ (23.2.1)appcompatwidgetsを使用 します。

プレロリポップ デバイスのマテリアル デザイン:

AppCompat (別名 ActionBarCompat) は、Gingerbread で実行されているデバイス向けの Android 4.0 ActionBar API のバックポートとして開始され、バックポートされた実装とフレームワークの実装の上に共通の API レイヤーを提供します。AppCompat v21 は、Android 5.0 で最新の API と機能セットを提供します


Android サポート ライブラリ 22.1 :

AppCompat を使用するときにウィジェットを自動的に着色する機能は、アプリ全体で強力なブランディングと一貫性を維持するのに非常に役立ちます。これは、レイアウトをインフレートするときに自動的に行われます - Button を AppCompatButton に、TextView を AppCompatTextView に置き換えるなどして、それぞれが色合いをサポートできるようにします。このリリースでは、これらのティント対応ウィジェットが公開され、サポートされているウィジェットの 1 つをサブクラス化する必要がある場合でも、ティント サポートを維持できます。

于 2016-03-08T12:53:39.150 に答える
0

recyclerview の最新の lib もこのバグを引き起こす可能性があることに注意してください。

このコマンド

  sendBtnView.setBackgroundTintList(colorState)

過去に完全に機能しましたが、私のために働くのをやめてください。調査の結果、原因は gradle の依存関係に追加されたライブラリであることが判明しました。

  compile 'com.android.support:recyclerview-v7:+'

そこで、Amit Vaghela の投稿で推奨されていた 23.02.1 に変更しようとしました。に変更しました

  compile  'com.android.support:recyclerview-v7:23.02.1'

しかし、gradle エラーは、recyclerview lib にこのバージョン (23.02.1) がないことを示しています (gradle は Jcenter raw.github または repo でそれを見つけることができませんでした)。

それから、setBackgroundTintListコマンドが過去にバージョン22.02.0でうまく機能していたことを知っていたので、gradle依存関係にある他のすべてのライブラリで。だから私はそれを次のように変更します:

compile   'com.android.support:recyclerview-v7:22.02.0'

そして今、それは再び機能します。

于 2016-03-30T11:08:29.937 に答える
0

属性backgroundTintは API レベル 21 以降でのみ使用されるため

于 2015-01-02T00:17:34.763 に答える