所以,我想将色调应用于AppCompat Checkbox。
Lollipop上的一切正常:
android:buttonTint="@color/purple_FF4081"
或者这样:
android:theme="@style/Theme.MyTheme.PurpleAccent"
但设置任何这些参数并不会改变前Lollipop上的任何内容。仅当我为应用主题设置colorAccent
时才有效。但我不希望所有小部件都改变它们的外观,只需要一个复选框。
如果没有设置彩色绘图,有没有办法做到这一点?
答案 0 :(得分:62)
现在,在引入AppCompatActivity和新的支持库之后,这一切都发生了变化,for reference (outlined beautifully here)可以使用theme
atttribute并设置colorControlNormal
来修改复选框。和colorControlActivated
:
styles.xml
<style name="MyCheckBox" parent="Theme.AppCompat.Light">
<item name="colorControlNormal">@color/indigo</item>
<item name="colorControlActivated">@color/pink</item>
</style>
layout xml:
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="Check Box"
android:theme="@style/MyCheckBox"/>
答案 1 :(得分:24)
您可以直接在xml中着色。使用boxTint作为框:(从API级别23开始)
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:buttonTint="@color/CHECK_COLOR" />
您也可以使用appCompatCheckbox v7为旧版API执行此操作:
<android.support.v7.widget.AppCompatCheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:buttonTint="@color/COLOR_HERE" />
答案 2 :(得分:10)
我需要以编程方式进行,经过一段时间的挖掘后我终于找到了这个解决方案(在Kitkat&amp; Marshmallow上测试过),我会发布它,以防它帮助某人:
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));
}
答案 3 :(得分:2)
我已经尝试了所有答案,但只有这个适用于我,将atttribute 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>
答案 4 :(得分:1)
编辑6/28/16:以下答案不再正确。请参阅Google允许使用appcompat库对pre-v21设备进行着色的新方式接受的答案。
原始答案:
简短的回答是:不。需要创建自定义绘图,以便在v21之前的设备上使用。这是因为特殊的色调感知窗口小部件目前是隐藏的,因为它们目前是未完成的实现细节(Google表示将来可能会更改,according to their developer blog在常见问题部分中)
有两种情况可以覆盖可能有效的colorAccent: