そこで、色合いをAppCompatチェックボックスに適用したいと思います。
Lollipopではすべて正常に動作します。
Android:buttonTint="@color/purple_FF4081"
またはこの方法:
Android:theme="@style/Theme.MyTheme.PurpleAccent"
ただし、このパラメーターのいずれを設定しても、Lollipop以前のバージョンでは何も変わりません。アプリのテーマにcolorAccent
を設定した場合にのみ機能します。ただし、すべてのウィジェットの外観を変更するのではなく、チェックボックスを1つだけ変更します。色付きのドロアブルを設定せずにこれを行う方法はありますか?
AppCompatActivityと新しいサポートライブラリの導入後にこれがすべて変更されたことを簡単に説明します。 参考のために(ここで美しく説明されています) チェックボックスに色を付けることができますtheme
属性を使用して、colorControlNormal
およびcolorControlActivated
を設定します。
styles.xml
<style name="MyCheckBox" parent="Theme.AppCompat.Light">
<item name="colorControlNormal">@color/Indigo</item>
<item name="colorControlActivated">@color/pink</item>
</style>
レイアウトxml:
<CheckBox
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:checked="true"
Android:text="Check Box"
Android:theme="@style/MyCheckBox"/>
Xmlで直接色を付けることができます。ボックスにbuttonTintを使用します:(APIレベル23以降)
<CheckBox
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:buttonTint="@color/CHECK_COLOR" />
古いAPIのappCompatCheckbox v7を使用してこれを行うこともできます。
<Android.support.v7.widget.AppCompatCheckBox
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
app:buttonTint="@color/COLOR_HERE" />
私はプログラムでそれを行う必要がありました。少しの間掘り下げた後、最終的にこのソリューションを見つけました(キットカットとマシュマロでテストしました)、誰かに役立つ場合にだけ投稿します:
public static void setAppCompatCheckBoxColors(final AppCompatCheckBox _checkbox, final int _uncheckedColor, final int _checkedColor) {
int[][] states = new int[][]{new int[]{-Android.R.attr.state_checked}, new int[]{Android.R.attr.state_checked}};
int[] colors = new int[]{_uncheckedColor, _checkedColor};
_checkbox.setSupportButtonTintList(new ColorStateList(states, colors));
}
私はすべての答えを試してみましたが、これだけがうまくいきます。属性colorControlNormal
とcolorControlActivated
をアクティビティ全体(またはアプリケーション)のベーススタイルに追加して、コントローラからテーマを削除します
ここに例があります
<style name="AppTheme" parent="AppTheme.Base"/>
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
<!-- colorPrimary is used for the default action bar background -->
<item name="colorPrimary">@color/colorPrimary</item>
<!-- colorPrimaryDark is used for the status bar -->
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<!-- colorAccent is used as the default value for colorControlActivated,
which is used to tint widgets -->
<item name="colorAccent">@color/colorAccent</item>
<!-- to hide white screen in start of window -->
<item name="Android:windowIsTranslucent">true</item>
<item name="colorControlNormal">@color/orange_two</item>
<item name="colorControlActivated">@color/pumpkin_orange</item>
</style>
あなたのメインフェスト
<application
Android:allowBackup="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:supportsRtl="true"
Android:theme="@style/AppTheme"> // here is the style used
<activity Android:name=".MainActivity">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
EDIT 6/28/16:以下の答えはもはや正しくありません。 appcompatライブラリを使用してv21以前のデバイスでGoogleが色付けを許可した新しい方法について、受け入れられている回答を参照してください。
元の答え:
短い答えは:いいえ。 v21より前のデバイスで使用するには、カスタムDrawableを作成する必要があります。これは、現時点では未完成の実装の詳細であるため、特別な色合い認識ウィジェットが現在非表示になっているためです(Googleは、これは将来変更される可能性があると述べています、 開発者ブログ FAQセクション)
動作する可能性のあるcolorAccentをオーバーライドできるシナリオは2つあります。