Android Fragment 中的自定义属性
我想使用 XML(不使用捆绑附加参数)在 Android 片段中定义自定义属性,例如自定义控件中的 declare-styleable
。但是没有带有AttrSet参数的构造函数,那么可以吗?我可以重写 public void onInflate(android.app.Activity Activity, android.util.AttributeSet attrs, android.os.Bundle savingInstanceState) 以获得属性支持吗?
I'd like to define custom attributes in Android fragment using XML (without using bundle additional parameters) like declare-styleable
in custom controls. But there are no constructors with AttrSet parameters, so is it possible? Can i just override public void onInflate(android.app.Activity activity, android.util.AttributeSet attrs, android.os.Bundle savedInstanceState)
in order to get attributes support?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Support4Demos 的链接已更改或可以更改,因此发布完整的解决方案。就这样吧。
在 res/values 文件夹中创建 attrs.xml 文件。或者如果文件已存在,则添加以下内容。
重写片段的onInflate委托并读取其中的属性
<前> <代码> / **
* 在膨胀期间将属性从视图层次结构解析为
* 我们处理的参数。
*/
@覆盖
公共无效onInflate(活动活动,属性集属性,捆绑包保存实例状态){
super.onInflate(活动,attrs,savedInstanceState);
Log.v(TAG,"onInflate 被调用");
TypedArray a = Activity.obtainStyledAttributes(attrs,R.styleable.MyFragment);
CharSequence myString = a.getText(R.styleable.MyFragment_my_string);
if(myString != null) {
Log.v(TAG, "我的字符串已收到:" + myString.toString());
}
int myInteger = a.getInt(R.styleable.AdFragment_my_integer, -1);
if(myInteger != -1) {
Log.v(TAG,"我收到的整数:" + myInteger);
}
a.回收();
}
将这些属性传递到布局文件中,如下所示。只是一个例子
仅此而已。它是一个可行的解决方案。
执行此操作时,如果您在 xml 中看到任何命名空间错误。
一次又一次尝试项目清理。
这很可悲,但 Eclipse 和 adt 有时会表现不佳。
The Link for Support4Demos is changed or can be changed so posting the complete solution. Here it goes.
Create attrs.xml file in res/values folder. Or add the below content if file already exists.
Override the onInflate delegate of fragment and read attributes in it
Pass these attributes in your layout file as following. Just an example
Thats all. Its a working solution.
While doing this if you see any namespace error in xml.
try project cleaning again and again.
This is pathetic but Eclipse and adt misbehaves sometimes.