从ObtainStyledAttributes()返回的TypedArray似乎没有我创建的自定义属性的相应自定义值,尽管我可以将它们的ID映射到Resource.designer中的值.
Attr.xml:
<resources><declare-styleable name="headerVIEw"> <attr name="bgcolor" format="color" /> <attr name="testing" format="string" /></declare-styleable>
Main.xaml:
<relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"xmlns:custom="http://schemas.androID.com/apk/res"> <linearLayout androID:orIEntation="vertical" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent"> <vIEws.headerVIEw androID:ID="@+ID/hdrWatchList" androID:layout_wIDth="fill_parent" androID:layout_height="20.0dp" custom:bgcolor="@color/blue" custom:testing="testing text buddy" />
查看课程:
public headerVIEw (Context context,IAttributeSet attrs) : base (context,attrs) { int[] styleAttrs = Resource.Styleable.headerVIEw; TypedArray a = context.ObtainStyledAttributes(attrs,styleAttrs); string sID = a.GetString(Resource.Styleable.headerVIEw_testing); int ID = a.Getcolor(Resource.Styleable.headerVIEw_bgcolor,555); Log.Info( "testing","resource sID : " + sID); // RETURNS '' Log.Info( "testing","resource ID : " + ID); // RETURNS DEF 555解决方法 我认为问题在于您如何指定xmlns:自定义命名空间.您需要在已有的字符串末尾添加应用程序命名空间,以便:
xmlns:custom="http://schemas.androID.com/apk/res/my.awesome.namespace"
您还需要为AndroID项目定义AndroIDManifest.xml,您已在其中定义了相同的命名空间.
线条:
int[] styleAttrs = Resource.Styleable.headerVIEw;TypedArray a = context.ObtainStyledAttributes(attrs,styleAttrs);
看起来有点奇怪,我会写:
var a = context.ObtainStyledAttributes(attrs,Resource.Styleable.headerVIEw);
特别是如果你以后不使用styleAttrs.
编辑:自AndroID SDK rev 17以来,可以使用:
xmlns:custom="http://schemas.androID.com/apk/res-auto"
而不是必须编写整个命名空间.
总结以上是内存溢出为你收集整理的android – monodroid / xamarin自定义属性使用ObtainStyledAttributes为空全部内容,希望文章能够帮你解决android – monodroid / xamarin自定义属性使用ObtainStyledAttributes为空所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)