大佬教程收集整理的这篇文章主要介绍了android – Library的样式属性没有值,即使它们是显式设置的,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了一个带有自定义视图的库,可以在创建时扩展布局.布局中的视图使用style =“?attr / labelStyle”或任何其他属性设置样式.
<attr name="myViewStyle" format="reference"/> <declare-styleable name="MyView"> <attr name="labelStyle" format="reference|color"/> </declare-styleable>
<style name="MyViewStyle"> <item name="labelStyle">@style/LabelStyle</item> </style> <style name="LabelStyle"> <item name="android:textColor">?android:attr/textColorPriMary</item> <item name="...">...</item> </style>
最后在库的themes.xml中:
<style name="MyViewStyleLight" parent="Theme.AppCompat.Light"> <item name="myViewStyle">@style/MyViewStyle</item> </style>
现在这是库的默认样式,但它在主项目styles.xml中被覆盖
<style name="AppTheme" parent="Theme.AppCompat.Light"> <item name="myViewStyle">@style/MyViewStyleCustom</item> </style> <style name="MyViewStyleCustom" parent="MyViewStyleLight"> <item name="android:textColor">@color/gray</item> <item name="...">...</item> </style>
public MyView(Context context) { this(context,null,R.attr.myViewStyle,0); } public MyView(Context context,@Nullable AttributeSet attrs) { this(context,attrs,@Nullable AttributeSet attrs,int defStyleAttr) { this(context,defStyleAttr,AttributeSet attrs,int defStyleAttr,int defStyleRes) { super(createThemeWrapper(context,R.style.MyViewStyleLight),defStyleRes); initLayout(); } private static Context createThemeWrapper(Context context,int styleAttr,int defaultStylE) { final TypedArray ta = context.obtainStyledAttributes(new int[]{styleAttr}); int style = ta.getresourcEID(0,defaultStylE); ta.recycle(); return new ContextThemeWrapper(context,stylE); } private void initLayout() { LayoutInflater inflater = LayoutInflater.from(getContext()); inflater.inflate(R.layout.my_view,this); ... }
我解释下面的ContextThemeWrapper.现在,应用程序在布局膨胀的行上崩溃.这是崩溃日志的重要部分:
android.view.InflateException: Binary XML file line #0: Binary XML file line #0: Error inflaTing class com.example.MyView at android.view.LayoutInflater.inflate(LayoutInflater.java:539) at android.view.LayoutInflater.inflate(LayoutInflater.java:423) [...] Caused by: java.lang.UnsupportedoperationException: Failed to resolve attribute at index 13: TypedValue{t=0x2/d=0x7f030057 a=-1} at android.content.res.TypedArray.getDrawable(TypedArray.java:867) [...]
布局inflater无法找到属性的值.当我试图通过代码获取属性时,它什么都不返回.该属性实际存在,只有它没有设置值,即使我已经明确设置了一个.
我应该如何设计我的图书馆风格?我几乎可以肯定我做的每一件事都和SublimePicker library一样,但它不会起作用.使用COntextThemeWrapper的部分有一点不同,但它可能不是问题.我觉得我忘记了一个小东西,使得属性没有价值,有些东西没有连接,我不知道.
我知道这是一个很长的问题,但它不能更简洁,我尽可能地简化了所有内容.我更改了上一版本问题中的大部分信息,使其完全不同.这两个答案现在根本不相关,而不是它们曾经是.赏金自动得到奖励.
如果这可以帮助别人我可以添加下载到我的实际项目,但正如我所说,这个简化的示例与我的项目具有完全相同的形式.
在app app和lib中,style.xml有所不同.另外,我删除了theme.xml以及MyView.java构造函数中默认样式的更改
我改变了以下事情
>在主项目styles.xml中重写
<style name="AppTheme" parent="Theme.AppCompat.Light"> <item name="myViewStyle">@style/MyViewStyleCustom</item> </style> <style name="MyViewStyleCustom" parent="MyViewStyle"> <item name="labelStyle">@style/LabelStyle123</item> </style> <style name="LabelStyle123"> <item name="android:textColor">#f00</item> </style>
> lib styles.xml
<resources> <style name="MyViewStyle"> <item name="labelStyle">@style/LabelStyle</item> <item name="TextStyle">@style/textStyle</item> </style> <style name="LabelStyle"> <item name="android:textColor">#00f</item> </style> <style name="textStyle"> <item name="android:textColor">#009</item> </style> </resources>
> MyView.java – 如果没有任何属性来自应用程序,则更改构造函数并设置默认MyViewStyle.
public MyView(Context context) { this(context,R.style.MyViewStylE); } public MyView(Context context,defStyleRes),int defaultStylE) { final TypedArray ta = context.obtainStyledAttributes(new int[]{styleAttr}); int style1 = ta.getresourcEID(0,style1); }
以上是大佬教程为你收集整理的android – Library的样式属性没有值,即使它们是显式设置的全部内容,希望文章能够帮你解决android – Library的样式属性没有值,即使它们是显式设置的所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。