Java 更改向上箭头颜色后标记为私人警告

Java 更改向上箭头颜色后标记为私人警告,java,android,android-studio,android-actionbar,android-support-library,Java,Android,Android Studio,Android Actionbar,Android Support Library,在操作栏中为后退箭头定义自定义颜色后,将返回警告。怎样才能消除这个警告呢 final Drawable upArrow = ContextCompat.getDrawable(this, R.drawable.abc_ic_ab_back_mtrl_am_alpha); upArrow.setColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP); actionBar.setHomeAsUpIndicat

在操作栏中为后退箭头定义自定义颜色后,将返回警告。怎样才能消除这个警告呢

        final Drawable upArrow = ContextCompat.getDrawable(this, R.drawable.abc_ic_ab_back_mtrl_am_alpha);
        upArrow.setColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
        actionBar.setHomeAsUpIndicator(upArrow);
资源@drawable/abc_ic_ab_back_mtrl_am_alpha在com.android中标记为private。支持:appcompat-v7


这似乎是安卓系统的一个缺陷 这篇文章是Android开源项目中的一个项目成员

对类似问题的答复

根本原因是,当一个库依赖于另一个库时, 它将它所依赖的任何库中的所有资源导入到它的 own声明的R.txt(在AAR文件中)

但是,它不包括这些文件中的public.txt声明 依赖项,所以现在它最终公开了这些声明的符号,但是 不是公开的——例如,私人的

我正在考虑两种修复方案:

(1) 在库的资源可见性查找中,删除任何 从依赖项导入的符号(无论是否为该依赖项 提供可见性信息),或

(2) 反转可见性查找逻辑:如果我们发现一个符号为public 在任何图书馆,把它看作是公共的,而不是当前的逻辑。 表示如果符号在任何地方声明为私有,则该符号为私有

我想我会选择2;当前逻辑在以下情况下没有意义: 考虑到符号最终在下游内联的情况 图书馆

正如他们所说:

目前唯一的解决方法是关闭私有资源lint 检查:


他们说这个问题已经解决了,但我今天已经讨论了这个问题,我用的是android studio 1.5.1和gradle 1.5,而不是Mohammad的

android {
    lintOptions {
        disable 'PrivateResource'
    } 
}
我建议执行以下操作,这是对语句的本地修复。优点是不必全局停用lint检查(稍后很容易忘记再次激活)

对于XML:

tools:ignore="PrivateResource"
代码:

@SuppressLint("PrivateResource")
实际上,您的代码应该如下所示:

XML:

看看原因

简而言之,drawable/abc_ic_ab_back_mtrl_am_alpha是appcompat-v7的私有资源,仅供该库使用。你不应该使用它


如果您真的想使用它,请将其复制到您的项目中,而我更喜欢将Lint抑制尽可能靠近源代码,因为它是在中完成的,如果不起作用,还可以在
app
文件夹中的
Lint.xml
文件中列出抑制。它看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<lint>
<issue id="<issue-id>">
    <ignore path="<path-to-source>.<file-extension>"/>
</issue>


其中,问题id是要抑制的类型,例如UseSparsearray。Android Studio还将为您自动完成此字段。

我看到了一些帖子,内容涉及在最新Android Studio更新后访问系统绘图功能的问题。这并不能直接回答您的问题,但我建议使用插件,将材质设计图标轻松导入到您的项目中。我需要覆盖它,为什么要复制资源?这是更好的方法
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:icon="@drawable/abc_ic_search_api_mtrl_alpha"
    tools:ignore="PrivateResource" />
@SuppressLint("PrivateResource")
final Drawable upArrow = ContextCompat.getDrawable(context, R.drawable.abc_ic_ab_back_mtrl_am_alpha);
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<issue id="<issue-id>">
    <ignore path="<path-to-source>.<file-extension>"/>
</issue>