在操作栏中为后退箭头定义自定义颜色后,将返回警告。如何摆脱这种警告呢?
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.support:appcompat-v7中被标记为私有
答案 0 :(得分:13)
而不是做穆罕默德的
android {
lintOptions {
disable 'PrivateResource'
}
}
我建议执行以下操作,这是对语句的本地修复。优点是不必全局停用棉绒检查(以后很容易忘记再次激活)。
对于XML:
tools:ignore="PrivateResource"
代码:
@SuppressLint("PrivateResource")
实际上,您的代码看起来应该是这样的:
XML:
<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);
答案 1 :(得分:13)
请参阅Choose resources to make public。
简而言之,drawable / abc_ic_ab_back_mtrl_am_alpha是appcompat-v7的私有资源,旨在由该库使用 only 。你不应该使用它。
如果您真的想使用它,请将其复制到您的项目中
答案 2 :(得分:2)
它似乎是android中的一个错误 这篇文章在Android开源项目 - 问题跟踪器
中形成了一个项目成员回复类似的Issue
他们说:这里的根本原因是当一个库依赖于另一个库时 它从它依赖的任何库中导入所有资源 自己声明的R.txt(在AAR文件中)。
但是,它并没有包含那些的public.txt声明 依赖关系,所以现在它最终暴露这些符号,但是 不公开 - 例如私人的。
我正在考虑两种补救方案:
(1)在库的资源可见性查找中,删除任何 从依赖项导入的符号(无论是否依赖 提供可见性信息),或
(2)反转可见性查找逻辑:如果我们发现符号是公共的 在任何库中,都要考虑它是公开的而不是当前的逻辑 如果符号在任何地方被声明为私有,那就是。
我想我会选择2;当前的逻辑没有意义 考虑到符号最终在下游内联的情况 库。
现在唯一的解决方法是关闭私有资源lint 检查:
modelBuilder.Entity<TypeA>().HasMany<TypeB>(i => i.Bees).WithMany(); modelBuilder.Entity<TypeB>().HasMany<TypeA>(i => i.Aaas).WithMany();
他们说它已修复,但我今天遇到了这个问题而且我使用的是android studio 1.5.1和gradle 1.5
答案 3 :(得分:0)
虽然我更喜欢使Lint抑制作用尽可能靠近源,如this answer中所做的那样,但如果不起作用,也可以在lint.xml
文件中列出抑制作用位于您的app
文件夹中。看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<issue id="<issue-id>">
<ignore path="<path-to-source>.<file-extension>"/>
</issue>
其中issue-id是您要禁止的类型,例如UseSparseArrays。 Android Studio还将为您自动填写此字段。