资源。getColor(int id)方法已弃用。

@ColorInt
@Deprecated
public int getColor(@ColorRes int id) throws NotFoundException {
    return getColor(id, null);
}

我该怎么办?


当前回答

tl; diana:

ContextCompat.getColor(context, R.color.my_color)

解释:

您将需要使用ContextCompat.getColor(),它是Support V4库的一部分(它将适用于前面的所有api)。

ContextCompat.getColor(context, R.color.my_color)

如果你还没有使用支持库,你将需要添加以下一行到你的应用程序构建中的依赖数组。gradle(注意:如果你已经使用了appcompat (V7)库,它是可选的):

compile 'com.android.support:support-v4:23.0.0' # or any version above

如果你关心主题,文档指定:

从M开始,返回的颜色将为指定的样式 上下文的主题

其他回答

在活动中使用ContextCompat

ContextCompat.getColor(context, R.color.color_name)

在改编电影

private Context context;


context.getResources().getColor()

我不想仅为getColor包含支持库,因此我使用类似于

public static int getColorWrapper(Context context, int id) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        return context.getColor(id);
    } else {
        //noinspection deprecation
        return context.getResources().getColor(id);
    }
}

我想代码应该可以正常工作,并且已弃用的getColor不能从API < 23中消失。

这是我在Kotlin中使用的:

/**
 * Returns a color associated with a particular resource ID.
 *
 * Wrapper around the deprecated [Resources.getColor][android.content.res.Resources.getColor].
 */
@Suppress("DEPRECATION")
@ColorInt
fun getColorHelper(context: Context, @ColorRes id: Int) =
    if (Build.VERSION.SDK_INT >= 23) context.getColor(id) else context.resources.getColor(id);

从Android支持库23开始, ContextCompat中添加了一个新的getColor()方法。

它在官方JavaDoc中的描述:

返回与特定资源ID相关联的颜色 从M开始,返回的颜色将为指定上下文的主题设置样式。


所以,只需调用:

ContextCompat.getColor(context, R.color.your_color);

你可以在GitHub上查看ContextCompat.getColor()源代码。

tl; diana:

ContextCompat.getColor(context, R.color.my_color)

解释:

您将需要使用ContextCompat.getColor(),它是Support V4库的一部分(它将适用于前面的所有api)。

ContextCompat.getColor(context, R.color.my_color)

如果你还没有使用支持库,你将需要添加以下一行到你的应用程序构建中的依赖数组。gradle(注意:如果你已经使用了appcompat (V7)库,它是可选的):

compile 'com.android.support:support-v4:23.0.0' # or any version above

如果你关心主题,文档指定:

从M开始,返回的颜色将为指定的样式 上下文的主题

在Kotlin中的RecyclerView中

inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    fun bind(t: YourObject, listener: OnItemClickListener.YourObjectListener) = with(itemView) {
        textViewcolor.setTextColor(ContextCompat.getColor(itemView.context, R.color.colorPrimary))
        textViewcolor.text = t.name
    }
}