假设有两个XML布局文件:test1.xml和test2.xml,这两个布局文件的根节点都是
并将该对象作为test1.xml文件中的
// 获得test1.xml中的LinearLayout对象
LinearLayout testLinearLayout1 = (LinearLayout)getLayoutInflater().inflate(R.layout.test1, null);
// 将test1.xml中的LinearLayout对象设为当前容器视图
setContentView(testLinearLayout1);
// 获得test2.xml中的LinearLayout对象,并将该对象添加到test1.xml的LinearLayout对象中
LinearLayout testLinearLayout2 = (LinearLayout)getLayoutInflater().inflate(R.layout.test2, testLinearLayout1);
向布局视图添加视图对象时需要注意如下两点:
如果使用setContentView方法将容器视图设为当前视图后还想向容器视图中添加新的视图或进行其他的操作,setContentView方法的参数值应直接使用容器视图对象,因为这样可以向容器视图对象中添加新的视图。
一个视图只能有一个父视图,也就是说 ,一个视图只能被包含在一个容器视图中。因此,在向容器视图添加其他视图时不能将XML布局文件中非根节点的视图对象添加到其他的容器视图中。例如,在前面的例子中不能将使用testLinearLayout2.findViewById(R.id.testView2)获得的TextView对象添加到testLinearLayout1对象中,这是因为这个TextView对象已经属于test2.xml中的
下面是实例:
main.xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/textview1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/textview1"/>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button1"/>
</LinearLayout>
test.xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textview1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/textview2"
/>
</LinearLayout>
Main.java文件
package com.mmc.viewobject;
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
public class Main extends Activity implements OnClickListener
{
private TextView textView1;
private Button button1;
@Override
public void onClick(View v){
int value = textView1.getGravity() & 0x07;
if (value == Gravity.LEFT)
textView1.setGravity(Gravity.CENTER_HORIZONTAL);
else if (value == Gravity.CENTER_HORIZONTAL)
textView1.setGravity(Gravity.RIGHT);
else if (value == Gravity.RIGHT)
textView1.setGravity(Gravity.LEFT);
}
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
//获得main.xml中的LinearLayout对象
LinearLayout mainLinearLayout = (LinearLayout)getLayoutInflater().inflate(R.layout.main, null);
//设置当前的窗口视图
setContentView(mainLinearLayout);
textView1 = (TextView)findViewById(R.id.textview1);
button1 = (Button)findViewById(R.id.button1);
textView1.setText("第一个TextView");
//设置按钮的单击事件类的对象实例
button1.setOnClickListener(this);
//获得test.xml中的LinearLayout对象
LinearLayout testLinearLayout = (LinearLayout)getLayoutInflater().inflate(R.layout.test, mainLinearLayout);
//如果使用如下代码,需要将inflate方法的第2个参数值设为null
//mainLinearLayout.addView(testLinearLayout);
// 创建新的视图对象
EditText editText = new EditText(this);
editText.setSingleLine(false);
editText.setGravity(Gravity.LEFT);
mainLinearLayout.addView(editText, new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT));
}
}