gpt4 book ai didi

android - 正确使用 ContextCompat.getColor() 以根据主题设置样式

转载 作者:行者123 更新时间:2023-11-29 01:23:30 24 4
gpt4 key购买 nike

在 Android M 中,我看到 getColor(int id) 被替换为 ContextCompat.getColor(Context context, int id)。

我刚开始接触 Android 中的主题样式,所以我不确定如何正确使用此功能。目前,我组织颜色的方式是像这样定义属性:

values/attr.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="button_bg" format="reference|color"/>
</resources>

然后我像这样引用它们:

values/themes.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowAnimationStyle">@null</item>
</style>
<style name="MyTheme.White">
<item name="button_bg">#fff</item>
</style>
<style name="MyTheme.Black">
<item name="button_bg">#000</item>
</style>
</resources>

这行得通。但是,我现在如何在 java 中获取 button_bg?我尝试了 ContextCompat.getColor(context, R.attr.button_bg) 但这给了我一个错误:Resource not found

我是不是处理错了?

最佳答案

已经看到,这个问题比一年前还长,所以希望我仍然可以帮助其他人解决这个问题。

您可以简单地在 XML 中使用属性 id:

<View
android:layout_height="50dp"
android:layout_width="50dp"
android:background="?attr/button_bg">
..../>

在您的 Activity 中,您可以在创建时设置主题:

protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.your_theme);//your theme
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
....
}

其余由android自动生成。

要通过代码根据主题访问颜色,您可以使用以下函数:

@ColorInt
public int getColorByAttributeId(Context context, @AttrRes int attrIdForColor){
TypedValue typedValue = new TypedValue();
Resources.Theme theme = context.getTheme();
theme.resolveAttribute(attrIdForColor, typedValue, true);
return typedValue.data;
}

该方法简直“愚蠢”,这意味着没有检查请求的属性颜色是否是真实的颜色资源。

关于android - 正确使用 ContextCompat.getColor() 以根据主题设置样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35415681/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com