Android之控制视图

假设有两个XML布局文件:test1.xml和test2.xml,这两个布局文件的根节点都是<LinearLayout>,下面的代码获得了test2.xml文件中的LinearLayout对象,

并将该对象作为test1.xml文件中的<LinearLayout>标签的子节点添加到test1.xml的LinearLayout对象中。

//	获得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中的<LinearLayout>标签了,不能再属于test1.xml中的<LinearLayout>标签了。


下面是实例:

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));
	}	
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值