有谁知道,如何以编程方式(在代码中)为我的自定义小部件获取引用的xml布局。我已经创建了一个自定义声明样式,具有我想要的属性,我知道如何获得更好的xml属性值,如字符串或整数。
我想做的是这样的事情:
<MyCustomView
xmlns:my="http://schemas.android.com/apk/res-auto"
id="@+id/view"
my:headerLayout="@layout/my_fancy_layout"
/>
所以我想以编程方式检索my_fancy_layout并在MyCustomView的代码中扩充该布局。
知道怎么做吗?
编辑:我想我可以用
来检索资源ID int resId = attrs.getAttributeResourceValue(androidns, "headerLayout", 0);
但是,如果MyCustomView是一个库项目并且我想使用
,那么最新的命名空间是什么?的xmlns:我= “http://schemas.android.com/apk/res-auto”
答案 0 :(得分:0)
您确实可以在自定义视图的构造函数中夸大您的布局:
public class MyCustomView extends /* LinearLayout, RelativeLayout, etc. */ {
public MyCustomView(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context, attrs);
}
public MyCustomView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initView(context, attrs);
}
protected void initView(Context context, attrs) {
LayoutInflater.from(context).inflate(attrs.getAttributeResourceValue("http://schemas.android.com/apk/res-auto", "headerLayout", 0), this, true);
}
}
答案 1 :(得分:0)
好的,我自己找到了解决方案:
你必须从你的AttributeSet中检索一个TypedArray。
您可以使用以下内容访问所需的资源ID:
TypedArray attrs = ... ;
int headerRes = attrs.getResourceId(R.styleable.MyCustomWidget_headerLayout, -1);
比你通常可以充气:
LayoutInflater.from(context).inflate(headerRes, this);