安卓动态加入xml布局并设置id
2016-08-25 10:32
375 查看
目录
效果演示
代码实现
-动态加入布局
- 动态设置id
2.在layout文件下创建item.xml,作为要动态添加的布局
3.在MainActivity中加入代码
这样就可以往主布局中动态加入子项布局了,需要注意的是,主布局的LinearLayout必须设置为垂直布局,让子项布局从上到下添加,否则显示不出来。
1.在values文件夹中创建ids.xml,添加如下代码,name为引用的名称,type表示该资源类型是一个id,两个<
4000
>中间的字符串就是我们要设置的id,数量自己决定
2.在MainActivity中设置一个整型变量flag,每添加一个布局,flag加1,通过判断加入布局的数量来设置id
在按钮的onClick方法下添加代码
3.完整MainActivity代码如下
当然实现这种方式除了动态加入xml的布局文件还可以用代码直接添加布局控件,但是当你的子项布局比较复杂的时候,代码写起来可能会比较头疼。
效果演示
代码实现
-动态加入布局
- 动态设置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,两个<
4000
>中间的字符串就是我们要设置的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的布局文件还可以用代码直接添加布局控件,但是当你的子项布局比较复杂的时候,代码写起来可能会比较头疼。
相关文章推荐
- android动态加入xml布局并设置id
- 动态添加综合布局---动态添加控件及将某XML动态加入到Activity显示(续)
- ViewPager中动态添加XML布局文件,并获取XML文件中控件ID的操作(inflate)
- android学习之布局(如何动态加入其它xml文件中的控件)
- 动态布局_01----动态添加控件 及 将某XML动态加入到Activity显示
- Androiid 如何动态加载assets目录下的xml布局文件(包括Drawable xml)
- 关于安卓获取组件或布局的实际宽高和动态设置组件或布局的宽高
- Android约束布局ConstraintLayout动态设置Id失效问题解决办法
- Android动态布局,并动态为TextView控件设置drawableLeft、drawableRight等属性加入图标
- 动态添加综合布局---动态添加控件及将某XML动态加入到Activity显示(续)
- 动态添加综合布局---动态添加控件及将某XML动态加入到Activity显示(续)
- 动态添加综合布局---动态添加控件及将某XML动态加入到Activity显示(续)
- 动态添加综合布局---动态添加控件及将某XML动态加入到Activity显示(续)
- 用XML动态设置每个窗体上Label的Caption
- android代码中动态设置布局中控件的属性
- 安卓 相机或相册图片上传至手机界面并显示 最后上传至服务器(界面xml布局代码前一个文章有)
- 根据集合动态生成多个多选框并这设置其id的值
- 通过XML创建界面---对象的动态创建以及属性的设置
- xml布局和动态布局结合使用
- 如何修改布局组件宽度设置固定值,在代码中动态修改