有没有办法动态获取样式属性?
例如,要查找资源ID,我可以使用:
context.getResources().getIdentifier("idtofind", "id", context.getPackageName());
是否有与此类似的内容来获取样式属性?
一点背景......我有一个有自定义滑动抽屉的图书馆。它在项目的/values/attrs.xml中具有自定义样式属性。
我让它进入GLE中的UI,但它没有显示,因为它无法找到句柄和内容的ID。这条线是:
TypedArray a = context.obtainStyledAttributes( attrs, R.styleable.DrawerSlider, defStyle, 0 );
我不知道如何实现上述功能,因为styleable是一个int数组,所以getIdentifier()将不起作用。
编辑:
好的,我现在已经能够在代码中正常工作,但仍然遇到GLE问题。我现在会尝试澄清一点。就像我说的,这是一个免费提供的图书馆。
经过测试,我发现使用getIdentifier不起作用(它总是返回0,除非它正在运行应用程序)。现在,我手动解析AttributeSet以获取我需要的所有属性的id(句柄,内容,方向等)。当GLE处理它时,它返回+ id / handle,而不是表示它的资源int。
似乎对GLE唯一有用的就是直接将其提供给R.id static int。看到更新版本的ADT(我在r17)你无法引用库的资源,我没有看到动态提供我需要的资源ID的方法。
现在,似乎让这个工作的唯一方法是将抽屉本身的源文件放在用户的项目中,如果可能的话我真的想避免。这意味着要么在创建新项目时将其放在项目的源目录中,要么添加右键单击子菜单命令来放置它。两者看起来都是不好的解决方法。
答案 0 :(得分:3)
关于可设置样式的数组并没有什么特别之处。所有obtainStyledAttributes()
都允许您在一次调用中获取一批属性,而不必为每个属性执行单独的调用,这会更慢。因此,可设置样式的数组只是属性的资源标识符数组。 有关如何构造的特殊要求 - 资源标识符需要按排序顺序排列,因为这是快速检索它们的优化的一部分。因此,如果您想构建自己的数组,则需要确保放在那里的标识符已正确排序。如果您不知道标识符编号,您可以使用您显示的代码来获取每个标识符的值...但请注意,每次调用obtainStyledAttributes()
时执行所有设置可能会超出性能从功能中获得的收获。
答案 1 :(得分:2)
你可以尝试
TypedValue outValue = new TypedValue();
context.getTheme().resolveAttribute( R.attr.someAttribute, outValue, true );
return outValue.resourceId;