web-dev-qa-db-ja.com

Android Lollipop以前のデバイスのsetBackgroundTintList

FloatingActionButtonを使用しています。ユーザーは、onClickイベント内でFABの背景色を切り替えることができる必要があります。

ただし、setBackgroundTintListへの推奨される呼び出しは、21以上のAPIからのみ互換性があるようです。

Lollipop以前のデバイスで-正しく-どうすればいいですか?使用できる代替手段はありますか?

前もって感謝します。

17
Matteo

setSupportBackgroundTintList も使用できます

背景のドロアブルに色合いを適用します。現在の色合いモード(デフォルトではSRC_IN)を変更しません。

その後のView.setBackground(Drawable)の呼び出しは、自動的に描画可能オブジェクトを変更し、指定された色合いと色合いモードを適用します。

ViewCompat.setBackgroundTintList() も見てください

背景のドロアブルに色合いを適用します。

これは、API v21以降で実行すると常に有効になります。 API v21より前のプラットフォームで実行する場合、ビューがTintableBackgroundViewインターフェースを実装する場合にのみ有効になります。

私は解決策を見つけました ここでSO 私が以前に使用したことがあり、これはこれです:

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);
  }
}

それは私のために働く私もそれがあなたのために働くことを望みます。

32
Skizo-ozᴉʞS

シンプル:

fab.setBackgroundTintList(ColorStateList.valueOf(0xFF4CAF50));

fabはもちろんFloatingActionButtonであり、0xFF4CAF50単なる色の例

8
Rüdiger

Kamil Sewerynがコメントで言ったように、fab.setBackgroundTintList()Android.support.design.widget.FloatingActionButtonのインスタンスで機能することを確認できます。

Samsung Galaxy s5(Android 6)とSamsung Galaxy s3(Android 4.3)でテストしました。どちらも正しく動作します。

0
Zakharov Roman

XMLから、あなたは使うことができます

card_view:backgroundTint="@color/your_color"

どこ card_viewxmlns:card_view="http://schemas.Android.com/apk/res-auto"

0
Kishan Solanki