2015-11-10 5 views
16

私はFloatingActionButtonで作業しています。 ユーザーはonClickイベント内でFAB背景色を切り替えることができます。ロリポップ前のデバイスのAndroid setBackgroundTintList

ただし、setBackgroundTintListへのお勧めの電話は21+ APIとのみ互換性があるようです。

プレロリポップデバイスではどうすればいいですか?私が使うことのできる代替手段はありますか?

ありがとうございます。

+1

お試しください[回答](http://stackoverflow.com/a/30313299/4385913) –

+0

@Skizoありがとうございました!そのViewCompat呼び出し(setSupportBackgroundTintListのどちらも)を認識していませんでした。私はそれが受け入れられるとマークすることができるようにあなた自身の答えを書いてください! – Matteo

+0

Done Matteo:D ... –

答えて

25

あなたはsetSupportBackgroundTintList

も使用することができますが、背景描画可能に色合いを適用します。現在の色合いモード(SRC_INはデフォルト)を変更しません。

その後、View.setBackground(Drawable)を呼び出すと、ドロアブルが自動的に変更され、指定された色合いと色合いモードが適用されます。

はまたViewCompat.setBackgroundTintList()

の表情を取る背景描画可能に色合いを適用します。

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

私が前に使用してきたソリューションhere on 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); 
    } 
} 

それは私が、それはあまりにもあなたのために働く願って私のために動作します。

+0

パーフェクト!ちょうど私が探していたもの!ありがとうございました – Matteo

+0

ありがとうございましたupvoteとそれがあなたが必要なものだった場合、正解とマーク:Pうれしいことを聞いてください。 –

+1

しかしFloatingActionButton AppCompatButton.setBackgroundTintListを使用しているとき、私は(糸くず警告が表示されますTintableBackgroundViewが実装されていないので、ViewCompat.setBackgroundTintListは() lage

6

シンプル:

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

fabは、あなたのコースのFloatingActionButton0xFF4CAF50ちょうど例の色である

+0

あなたは私が何を意味するのか分からなかったと思います。もっと明確にするために@Skizo答えをチェックしてください。途中でありがとう! :) – Matteo

+0

はこのように後方互換です –

+1

@Matteo FAB実装はサポートlibから来ており、後方互換性をサポートしています。 'setBackgroundTintList()'の下には、pre-lolipopに異なるimplを使用しています。 KitKatデバイスで実績があります。 –

0

Kamil Sewerynがコメントで述べたように、fab.setBackgroundTintList()android.support.design.widget.FloatingActionButtonのインスタンスで動作することを確認できます。

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

関連する問題