不推荐使用getResources().getColor()

Dav*_*vid 349 android deprecated android-resources android-color

使用: buildToolsVersion "22.0.1", targetSdkVersion 22在我的gradle文件中.

我发现有用的getResources().getColor(R.color.color_name)是不推荐使用的.

我应该用什么呢?

Bar*_*ine 821

看起来最好的方法是使用:

ContextCompat.getColor(context, R.color.color_name)
Run Code Online (Sandbox Code Playgroud)

这将适当地选择Marshmallow两参数方法或pre-Marshmallow方法.


yfs*_*fsx 45

好吧,它在Android M中被弃用,所以你必须为android M和更低版本做例外.只需在getColor功能上添加当前主题.你可以获得当前的主题getTheme().

这将做片段的伎俩,你可以替换getActivity()使用getBaseContext(),yourContext等它把你当前上下文

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    yourTitle.setTextColor(getActivity().getResources().getColor(android.R.color.white, getActivity().getTheme()));
}else {
    yourTitle.setTextColor(getActivity().getResources().getColor(android.R.color.white));
}
Run Code Online (Sandbox Code Playgroud)

*ps:颜色在M中已弃用,但在L中不推荐使用drawable

  • 而不是`getActivity().getTheme()`,我会使用`getContext().getTheme()` (2认同)

Mah*_*ade 30

您需要使用ContextCompat.getColor(),它是Support V4库的一部分(因此它适用于所有以前的API).

ContextCompat.getColor(context, R.color.my_color)
Run Code Online (Sandbox Code Playgroud)

如文档中所述,"从M开始,返回的颜色将针对指定的Context主题设置样式".所以不用担心.

您可以通过将以下内容添加到app build.gradle中的dependencies数组来添加Support V4库:

compile 'com.android.support:support-v4:23.0.1'
Run Code Online (Sandbox Code Playgroud)


Com*_*are 20

我发现不推荐使用有用的getResources().getColor(R.color.color_name).

根据文档,它在API Level 21中不被弃用.

在M开发者预览版弃用.但是,替换方法(getColor()采用颜色资源ID和Resources.Theme对象的双参数)仅在M Developer Preview中可用.

因此,现在,继续使用单参数getColor()方法.今年晚些时候,考虑getColor()在Android M设备上使用双参数方法,回到getColor()旧设备上不推荐的单参数方法.