Android之控制视图

Wesley13
• 阅读 594

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

并将该对象作为test1.xml文件中的标签的子节点添加到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中的标签了,不能再属于test1.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));
    }    
}
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
浩浩 浩浩
3年前
【Flutter实战】线性布局(Row、Column)
4.2线性布局(Row和Column)所谓线性布局,即指沿水平或垂直方向排布子组件。Flutter中通过Row和Column来实现线性布局,类似于Android中的LinearLayout控件。Row和Column都继承自Flex,我们将在弹性布局一节中详细介绍Flex。主轴和纵轴对于线性布局,有主轴和纵轴之分,如果
Stella981 Stella981
3年前
Spinner使用
1.在xml文件设立布局文件<Spinner    android:layout\_width"wrap\_content"    android:layout\_height"wrap\_content"    android:layout\_below"@id/b1"    andro
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
Android LinearLayout布局控件靠右
这是个悲伤而又略带绝望的故事,发生在我和xml布局之间,他气死了我,我删了它。我说靠右。控件非不。全剧终。<LinearLayoutandroid:layout_width"match_parent"android:layout_height"wrap_content"
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这