安卓动态加入xml布局并设置id

来源:互联网 发布:mac desktop 编辑:程序博客网 时间:2024/06/06 05:03

目录

  • 效果演示
  • 代码实现
    • -动态加入布局
    • - 动态设置id

效果演示

点击添加布局,并为布局中的EditView设置文本

这里写图片描述

代码实现

-动态加入布局

1.在activity_main.xml中加入按钮,并设置LinearLayout的id

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"//注意是垂直布局    android:id="@+id/LinearLayout_main"//设置id    >    <Button        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="添加布局"        android:id="@+id/btn"/></LinearLayout>

2.在layout文件下创建item.xml,作为要动态添加的布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="horizontal"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:id="@+id/LinearLayout_item"//设置好id    >    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="姓名:"        android:textSize="18sp"/>    <EditText        android:layout_width="0dp"        android:layout_height="wrap_content"        android:hint="请输入"        android:layout_weight="1"        android:gravity="center"        android:id="@+id/etName_current" //设置好id        /></LinearLayout>

3.在MainActivity中加入代码

package com.example.myapplication;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.LinearLayout;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Button button = (Button) findViewById(R.id.btn);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                LayoutInflater inflater = LayoutInflater.from(MainActivity.this);                // 获取需要被添加控件的布局                LinearLayout linearLayout = (LinearLayout) findViewById(R.id.LinearLayout_main);                // 获取需要添加的布局                LinearLayout layout = (LinearLayout) inflater.inflate(                        R.layout.item, null).findViewById(R.id.LinearLayout_item);                // 将布局加入到当前布局中                linearLayout.addView(layout);                        }        });    }}

这样就可以往主布局中动态加入子项布局了,需要注意的是,主布局的LinearLayout必须设置为垂直布局,让子项布局从上到下添加,否则显示不出来。
这里写图片描述

- 动态设置id

思路是利用setId()方法为当前加入的EditView控件重新设置id,setId( )方法的参数必须来自资源文件,因此必须新建一个资源文件来配置id。

1.在values文件夹中创建ids.xml,添加如下代码,name为引用的名称,type表示该资源类型是一个id,两个<>中间的字符串就是我们要设置的id,数量自己决定

<?xml version="1.0" encoding="utf-8"?><resources>    <item name="etName_1" type="id">etName_1</item>    <item name="etName_2" type="id">etName_2</item>    <item name="etName_3" type="id">etName_3</item>    <item name="etName_4" type="id">etName_4</item></resources>

2.在MainActivity中设置一个整型变量flag,每添加一个布局,flag加1,通过判断加入布局的数量来设置id

private int flag=0;

在按钮的onClick方法下添加代码

flag++;//获取子项布局中的EditText实例EditText etName_current = (EditText) findViewById(R.id.etName_current);switch (flag){     case 1:         //为获取到的实例设置新的id         etName_current.setId(R.id.etName_1);         //为获取到的实例设置文本         etName_current.setText(flag+"");         break;     case 2:         etName_current.setId(R.id.etName_2);         etName_current.setText(flag+"");         break;     case 3:         etName_current.setId(R.id.etName_3);         etName_current.setText(flag+"");         break;     case 4:         etName_current.setId(R.id.etName_4);         etName_current.setText(flag+"");         break;           }

3.完整MainActivity代码如下

package com.example.myapplication;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.LinearLayout;public class MainActivity extends AppCompatActivity {    private int flag=0;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Button button = (Button) findViewById(R.id.btn);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                LayoutInflater inflater = LayoutInflater.from(MainActivity.this);                // 获取需要被添加控件的布局                LinearLayout linearLayout = (LinearLayout) findViewById(R.id.LinearLayout_main);                // 获取需要添加的布局                LinearLayout layout = (LinearLayout) inflater.inflate(                        R.layout.item, null).findViewById(R.id.LinearLayout_item);                // 将布局加入到当前布局中                linearLayout.addView(layout);                flag++;                EditText etName_current = (EditText) findViewById(R.id.etName_current);                switch (flag){                    case 1:                        etName_current.setId(R.id.etName_1);                        etName_current.setText(flag+"");                        break;                    case 2:                        etName_current.setId(R.id.etName_2);                        etName_current.setText(flag+"");                        break;                    case 3:                        etName_current.setId(R.id.etName_3);                        etName_current.setText(flag+"");                        break;                    case 4:                        etName_current.setId(R.id.etName_4);                        etName_current.setText(flag+"");                        break;                }            }        });    }}

当然实现这种方式除了动态加入xml的布局文件还可以用代码直接添加布局控件,但是当你的子项布局比较复杂的时候,代码写起来可能会比较头疼。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 自发热护膝洗了怎么办 用气垫bb卡粉怎么办 贴药膏后皮肤过敏红肿怎么办 贴完膏药皮肤痒怎么办 猕猴桃吃的嘴疼怎么办 摩拜单车怎么办月卡 出国忘了带护照怎么办 雅漾喷雾失压了怎么办 洗衣服时衣服粘上卫生纸怎么办 一晚上卫生巾都是满的怎么办 宝宝头上痱子痒怎么办 短裤里的宽松紧带拧了怎么办 肉色内衣被染黑色了怎么办 安全裤总往上缩怎么办 夏天穿裙子膝盖怕凉怎么办 夏天穿裙子膝盖冷怎么办 天凉嗓子痒咳嗽怎么办 棉服里面跑毛怎么办 棉衣里面的棉一块一块的怎么办 穿姨妈巾悟出痱子怎么办 穿裙子上衣太长了怎么办 微信封号了零钱怎么办 快递加盟商欠我工资怎么办 加盟费交了以后怎么办 加盟总部违约加盟商该怎么办 自行车锁钥匙丢了怎么办 假体隆胸肿胀痛怎么办 恶露60天不干净怎么办 剖腹产俩月恶露不干净怎么办 剖腹产恶露一个多月还没干净怎么办 小月子全身流虚汗怎么办 生完孩子严重便秘怎么办啊 产后第5天恶露少怎么办 有恶露排不出来怎么办 刚生完小孩便秘怎么办 产后15天有鲜血怎么办 恶露未净同房了怎么办 药流2月恶露不尽怎么办 生完孩子小腹痛怎么办 月子里恶露有异味怎么办 恶露干净了有异味怎么办