我正在尝试创建一个自定义视图(扩展RelativeLayout),它包含了很多其他视图。 我想在xml布局文件中创建子视图。现在我想知道如何扩展该布局并在我的自定义视图中使用它。像这样的东西会很棒(在我的自定义视图中):
RelativeLayout rootLayout = (RelativeLayout) inflater.inflate(my xml file)
this.setContenView(rootLayout);
不幸的是,这只能在活动中实现。观点有类似之处吗?
编辑: 我不想使用View.addView(rootLayout)导致添加另一个视图层次结构,这是不需要的。
答案 0 :(得分:4)
您可以尝试使用<merge>
标记作为布局中的根元素,并在自定义RelativeLayout中将其充气,其中this
为父级,attachToRoot
设置为true。您不必再拨打addView
。
以下是LinearLayout(页面底部)的类似示例,应与RelativeLayout too配合使用。
答案 1 :(得分:1)
使用以下
View v =getLayoutInflater().inflate(R.layout.mylayout,null);
// inflate mylayout.xml with other views
CustomRelativeLayout cs = new CustomRelativeLayout(this);
// CustomRelativeLayout is a class that extends RelativeLayout
cs.addView(v); // add the view to relative layout
setContentView(cs); // set the custom relative layout to activity
示例:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="111dp"
android:text="TextView" />
</RelativeLayout>
SView
public class SView extends RelativeLayout {
Paint p,paint;
public SView(Context context) {
super(context);
TextView tv = new TextView(context);
tv.setText("hello");
this.addView(tv);
}
}
在MainActivtiy
View v =getLayoutInflater().inflate(R.layout.mylayout,null);
SView cs = new SView(this);
cs.addView(v);
setContentView(cs);
对齐
编辑:
如果您希望在CustomRelative布局中充气
在构造函数
中LayoutInflater inflater = LayoutInflater.from(context);
View v =inflater.inflate(R.layout.mylayout,null);
TextView tv = new TextView(context);
tv.setText("hello");
this.addView(tv);
this.addView(v);
答案 2 :(得分:0)
在您的视图中,您可以从上下文中获取布局inflater,为儿童充气并将其添加到this
(RelativeLayout
的子类)
final LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View child = inflater.inflate(R.layout.custom_layout, this, false);
// Then add child to this (subclass of RelativeLayout)
this.addView(child);
编辑:
上面的代码显示了如何在自定义视图中为儿童充气。 This link显示了如何将自定义视图本身插入XML布局。