安卓动态加入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
- 安卓动态加入xml布局并设置id
- ViewPager中动态添加XML布局文件,并获取XML文件中控件ID的操作(inflate)
- 设置动态id,并进行函数操作
- android 动态创建控件并设置布局
- android 动态创建控件并设置布局
- android 动态创建控件并设置布局
- 动态生成控件并设置布局参数
- 安卓设置布局边框
- Android 动态创建布局,设置新增控件ID
- 安卓xml颜色设置
- 安卓学习之XML布局
- 安卓 XML布局 +属性动画
- 关于安卓获取组件或布局的实际宽高和动态设置组件或布局的宽高
- 安卓在布局中设置透明
- 安卓XML布局,相对布局的常用属性~
- 安卓XML布局,线性布局常用属性总结~
- 动态布局,并使用代码为TextView设置drawableLeft
- android 通过组件属性动态创建控件并设置布局
- 【HDU 5100 Chessboard 】
- 自动化测试流程分析(转载自网络:HYHOLINE的《自动化测试项目开发流程说明》一文)
- UI设计师不可不知的安卓屏幕知识
- 深度学习与计算机视觉系列(2)_图像分类与KNN
- 剑指offer:连续子数组的最大和
- 安卓动态加入xml布局并设置id
- solr查询如何支持多个fq 多条件查询
- linux系统调用、库函数和内核函数关系与区别
- #pragma pack(n)和__attribute__((aligned(m)))的区别
- 邮箱钓鱼那些事:Chrome地址反转漏洞应用案例
- 让我们来聊一聊插件化吧---高深莫测
- 关于Android项目中打包资源文件到apk的总结
- Windows Server 2012 R2安装密钥
- log4j配置祥解