在今天AppCompat更新出来之前,我可以改变Android L中按钮的颜色,但在旧版本上不行。在包含新的AppCompat更新后,我无法更改两个版本的颜色,当我尝试时,按钮就消失了。有人知道怎么改变按钮的颜色吗?
下面的图片展示了我想要达到的目标:
白色按钮是默认的,红色按钮是我想要的。
这是我之前在styles.xml中改变按钮颜色所做的:
<item name="android:colorButtonNormal">insert color here</item>
要动态地进行:
button.getBackground().setColorFilter(getResources().getColor(insert color here), PorterDuff.Mode.MULTIPLY);
我也改变了@android:style/ theme . material . light的主题父元素。到Theme.AppCompat.Light.DarkActionBar
这个SO的回答帮助我得到了一个答案https://stackoverflow.com/a/30277424/3075340
我使用这个实用工具方法来设置按钮的背景色调。它适用于棒棒糖之前的设备:
// Set button background tint programmatically so it is compatible with pre-lollipop devices.
public static void setButtonBackgroundTintAppCompat(Button button, ColorStateList colorStateList){
Drawable d = button.getBackground();
if (button instanceof AppCompatButton) {
// appcompat button replaces tint of its drawable background
((AppCompatButton)button).setSupportBackgroundTintList(colorStateList);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// Lollipop button replaces tint of its drawable background
// however it is not equal to d.setTintList(c)
button.setBackgroundTintList(colorStateList);
} else {
// this should only happen if
// * manually creating a Button instead of AppCompatButton
// * LayoutInflater did not translate a Button to AppCompatButton
d = DrawableCompat.wrap(d);
DrawableCompat.setTintList(d, colorStateList);
button.setBackgroundDrawable(d);
}
}
如何在代码中使用:
Utility.setButtonBackgroundTintAppCompat(myButton,
ContextCompat.getColorStateList(mContext, R.color.your_custom_color));
这样,如果你只是想改变背景色调,只是想保持漂亮的按钮效果,你就不必指定ColorStateList。
实际上,我不想改变我的自定义按钮样式,但不幸的是,它们不再工作了。
我的应用程序有一个minSdkVersion 9和一切工作之前。
我不知道为什么,但自从我删除了android:在buttonStyle之前,它似乎又工作了
现在=工作中:
<item name=“buttonStyle”>@style/ButtonmyTime</item>
之前=只是灰色材质按钮:
< name = android: buttonStyle >项目@style ButtonmyTime < - >项目
我没有特殊的文件夹为新的android版本,因为我的按钮是相当平坦的,他们应该看起来在所有android版本相同。
也许有人能告诉我为什么我要删除“机器人”:
ImageButton仍在使用“android:”
<item name="android:imageButtonStyle">@style/ImageButtonmyTimeGreen</item>
更新
使用如下所示的设计支持库(23.2.0)和应用程序兼容性小部件
在Android支持库22.1中:
这是在膨胀布局-替换按钮时自动完成的
与appcompatextview, TextView与AppCompatTextView等确保
每个都可以支持着色。在这个版本中,那些色调意识
widget现在是公开可用的,允许您继续着色
支持,即使您需要子类化一个受支持的小部件。
色彩感知小部件的完整列表:
AppCompatAutoCompleteTextView
AppCompatButton
AppCompatCheckBox
AppCompatCheckedTextView
AppCompatEditText
AppCompatMultiAutoCompleteTextView
AppCompatRadioButton
AppCompatRatingBar
AppCompatSpinner
AppCompatTextView
前棒棒糖装置的材料设计:
AppCompat(又名ActionBarCompat)最初是作为
Android 4.0 ActionBar API用于运行在姜饼上的设备,
在反向移植实现的基础上提供一个公共API层
以及框架实现。AppCompat v21提供了一个API和
最新的Android 5.0功能集