- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
背景
从API 23开始,不建议使用获取颜色 getColor (仅为其提供资源ID)的小方法:
相反,我们被告知也要使用包含Theme
参数的方法:
This method was deprecated in API level 23. Use getColor(int, Theme) instead.
theme
:
ContextCompat.getColor(context, R.color.color_name);
@ColorInt
public static final int getColor(@NonNull Context context, @ColorRes int id) {
if (Build.VERSION.SDK_INT >= 23) {
return context.getColor(id);
} else {
return context.getResources().getColor(id);
}
}
最佳答案
tl;博士
Context.getResources().getColor(int)
或getColorStateList(int)
。已将其标记为已弃用,但从功能上来说还可以。 ContextCompat.getColorStateList(Context, int)
,即。 AppCompatResources.getColorStateList(Context, int)
。 ColorStateList
可以包含主题属性引用,自API 21开始,
Drawable
允许这样做。
getColorStateList
方法获得的颜色状态列表中,而不是
getColor
,因此从现在开始我将使用它。提到的大多数内容都适用于这两种变体。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:color="?attr/colorControlHighlight" android:alpha="?android:disabledAlpha"/>
<item android:color="?attr/colorControlHighlight"/>
</selector>
What's the purpose of the 'theme' parameter?
context.getColorStateList(R.color.my_csl);
context.getResources().getColorStateList(R.color.my_csl, context.getTheme());
ContextCompat.getColorStateList(context, R.color.my_csl);
ResourcesCompat.getColorStateList(context.getResources(), R.color.my_csl, context.getTheme());
How is it used?
final int myColor = ContextCompat.getColorStateList(context, R.color.my_csl);
final int myColor = AppCompatResources.getColorStateList(context, R.color.my_csl);
ContextCompat.getColorStateList
support-compat
支持库AppCompatResources.getColorStateList
appcompat-v7
支持库ResourcesCompat.getColorStateList(int, Theme)
是
Resources.getColorStateList(int, Theme)
的API(非功能性)反向端口,由API 23+上的
Context.getColorStateList(int)
内部使用。在日常使用中,您将不需要此方法。
Why was the function deprecated anyway? It still seems safe to use for me...
<resources>
<color name="my_cint">#f00</color>
</resources>
context.getResources().getColor(R.color.my_cint);
What's the use of the support library function?
ContextCompat.getColorStateList(context, R.color.my_csl);
public static final ColorStateList getColorStateList(Context context, @ColorRes int id) {
if (Build.VERSION.SDK_INT >= 23) {
return context.getColorStateList(id);
} else {
return context.getResources().getColorStateList(id);
}
}
ResourcesCompat.getColorStateList(int, Theme)
的外观和工作方式类似,它会忽略API 23下的主题属性(使用它们时出现崩溃)。
AppCompatResources.getColorStateList(Context, int)
不会崩溃,并且可以在所有版本的Android上正确解析主题属性。
What about
ResourcesCompat#getColorStateList
?
Context
。
Resources
足以解决颜色。但为了使
Resources
能够解析主题属性,您需要提供一个
Theme
。可以从
Theme
获得
Context
的事实与
Resources
无关。
Resources
不会透露或关心它本身是否来自某些
Context.getResources()
。
Can you [...] update about
getColor
too?
getColor
将解决
<color>
资源作为颜色整数<selector>
颜色状态列表资源作为其默认颜色getColorStateList
将解决
<color>
资源作为ColorStateList
的一种颜色<selector>
CSL资源为带有指定颜色的ColorStateList
AppCompatResources.getColor(Context, int)
,因为将颜色资源定义为主题属性引用没有什么意义。如果需要,此
AppCompatResources.getColorStateList(Context, int).getDefaultColor()
是等效的功能。
ContextCompat.getColor(Context, int)
和
ResourcesCompat.getColor(Resources, int, Theme)
,是因为它们镜像了框架API。如上所述,它们的实际用途值得商bat。
关于android - `theme`中的 `context.getColor`有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47962074/
我知道这里已经提出了几个类似的问题,但是没有一个解决方案对我有用。 我刚刚将我的应用程序从 Ecilpse(juno) 转移到 Android Studio 1.5.1;以及从 API 19 到 AP
我正在使用 ContextCompat.getColor 获取颜色资源,并向后兼容已弃用的方法,例如 Context 的 getColor。 例如: ContextCompat.getColor(co
我正在使用第三方库来使用“幻灯片”( fragment )创建介绍。但是,我收到了 ResourcesNotFoundException,您可以在下面看到。 我不知道异常中提到的这个getColor方
我需要向后端服务器发送一个颜色代码(转发给 iOS 客户端)但是 ContextCompact.getColor(context, colorResourceId); 返回一个其他客户端无法识别的负值
在我正在开发的 QT 应用程序中,我们让用户使用 QColorDialog::getColor() 选择一种颜色。基于外部事件,我需要取消这个打开的对话框。有办法吗?我没有在 QColorDialog
我正在尝试这段代码: im = Image.open("myimage") colors = im.getcolors() print colors 它返回“无”。所以我尝试了这个: im = Ima
代码: backgroundColor = typedArray.getColor(R.styleable.TapBarMenu_tbm_backgroundColor, ContextCompat.
当我为 SlidingTabLayout 对象设置颜色时出现错误。这是我的 mainActivity,首先我发现 getResource.getColor 已被弃用。所以我使用了 contextCom
我正在尝试用 ContextCompat.GetColor 替换 Resources.GetColor,但最后一个不返回颜色,我不知道我应该使用什么来代替 Resources.GetColor(从 A
我正在为我的 Android 应用开发夜间模式。我正在使用 ContextCompat.getColor 以编程方式为某些 UI 元素获取颜色,但是这种方法无法获取正确的颜色。当应用程序处于夜间模式时
这个问题在这里已经有了答案: getColor(int id) deprecated on Android 6.0 Marshmallow (API 23) (13 个回答) 关闭6年前. 使用:bu
本文整理了Java中am.widget.zxingscanview.ZxingForegroundView.getColor()方法的一些代码示例,展示了ZxingForegroundView.get
我正在尝试使用 RecycleView Adapter 中资源的颜色 override fun onBindViewHolder(holder: NavlogViewHolder, position:
TL,博士; ContextCompat.getColor()不使用夜间颜色(values-night/colors.xml),但在启用夜间模式时应该使用。 这是问题: 大家好, 所以我正在为我的 A
我有一个小程序在加载时在这一行生成空指针异常(但只是有时): (txtpnNoSeHa 是扩展 JPanel 的类中的 JEditorPane。此面板在 applet 构造函数中实例化) txtpnN
我有一个获取用户输入的函数,它应该从选项列表中验证用户输入。函数的最后一部分,如果结果中有真 bool 值,我循环结果并返回 true,似乎无法正常工作。它一直返回错误。 function g
我正在尝试使用 getColor(String name) 函数更改颜色,但它似乎不起作用。可能是我犯了某种错误。这是代码: public class ComboBoxPractice extends
我一直在尝试使用自定义颜色设置按钮和其他项目。我是 java 的新手,我一直在努力学习如何正确使用上下文。我做了一些研究,但仍然无法找到解决方案。 android 监视器错误是一个空指针异常,这是它有
我正在尝试更改 java 代码中的文本颜色(我不想在 xml 中更改它)并且我知道我需要调用 getResource()。但我收到“无法解析方法 getResource()”的错误。我尝试声明 Con
在 Android M 中,我看到 getColor(int id) 被替换为 ContextCompat.getColor(Context context, int id)。 我刚开始接触 Andr
我是一名优秀的程序员,十分优秀!