动态加入子控件

我想实现:点击button,动态生成 之前在xml里已经定义好的layout。

自己定义的已经定义好的xml文件: rizhi_pinglun.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pinglun_layout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_margin="10dp"
    android:layout_marginLeft="30dp"
    android:background="@drawable/rizhi_background_white" >
    <TextView
        android:id="@+id/user1"
        android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:text="user1"
    	android:textColor="#3333cc"
        />
	<TextView
        android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:text="评论 :"
    	android:layout_marginLeft="3dp"
        />
	<TextView
        android:id="@+id/huifu_content"
        android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:layout_marginLeft="10dp"
    	android:text="今天天气好好呀~"
    	android:textColor="#080808"
        />
</LinearLayout>

原来xml文件,就是 要把上面的xml插入这个布局中:rizhi_test.xml:

<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?

>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rizhitest"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:orientation="vertical"
      android:background="#CAE1FF"
    >
    <TextView
        android:id="@+id/title"
    	android:layout_width="match_parent"
    	android:layout_height="wrap_content"
        android:background="@drawable/rizhi_title"
        android:text="xxx的日志"
        android:gravity="center"
        android:textColor="#454545"
        android:textSize="25sp"
        />
    <TextView
        android:id="@+id/rizhi_title"
    	android:layout_width="match_parent"
    	android:layout_height="wrap_content"
        android:background="#FFC0CB"
        android:text="尘埃落定,栖于之间"
        android:gravity="center"
        android:textColor="#454545"
        android:textSize="25sp"
        android:layout_margin="5dp"
        />
    <RelativeLayout
        android:id="@+id/touxiang_layout"
        android:layout_width="match_parent"
     	android:layout_height="wrap_content"
        android:background="@drawable/rizhi_background_white"
        android:layout_margin="5dp"
        android:orientation="horizontal"
        >
        <ImageView
            android:id="@+id/touxiang"
	    	android:layout_width="50dp"
	    	android:layout_height="50dp"
            android:background="@drawable/touxiang"
            />
        <RelativeLayout
	    	android:layout_width="wrap_content"
	    	android:layout_height="wrap_content"
	    	android:layout_marginLeft="70dp"
	    	android:background="#FFC0CB"
	    	android:layout_marginTop="5dp"
            >
             <TextView
		        android:id="@+id/username"
		    	android:layout_width="wrap_content"
		    	android:layout_height="wrap_content"
		        android:text="阳光下的向日葵"
		        android:textColor="#454545"
		        android:textSize="15sp"
		        />
              <TextView
		        android:id="@+id/rizhi_time"
		    	android:layout_width="wrap_content"
		    	android:layout_height="wrap_content"
		        android:text="2014年8月29日  12:45"
		        android:textColor="#454545"
		        android:textSize="15sp"
		        android:layout_below="@id/username"
		        android:layout_marginTop="3dp"
		        />
        </RelativeLayout>
   </RelativeLayout>
   <Button
       android:id="@+id/button"
	   android:layout_width="wrap_content"
	   android:layout_height="wrap_content"
	   android:text="按钮"
       />
</LinearLayout>
</pre><p></p><pre>

java文件:

<span style="white-space:pre">	</span>private Context context;
	private Button button;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.rizhi_test);
		context = this;
		button = (Button) findViewById(R.id.button);
		button.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {

				addMyView();
			}
		});

	}
private View addMyView(){
		<span style="white-space:pre">		</span>//(1)
				LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
				//或LayoutInflater inflater = LayoutInflater.from(Activity.this);
				//或LayoutInflater inflater = getLayoutInflater();
				//(2)
				View view = inflater.inflate(R.layout.rizhi_pinglun, null);//你要加入的布局
				//(3)
				LayoutParams liaParams = new LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
						LinearLayout.LayoutParams.WRAP_CONTENT);
				liaParams.setMargins(20, 10,20, 10);//设置了左右上下边距,可是无论用
				rizhitest.addView(view,liaParams);
				//LinearLayout.LayoutParams.WRAP_CONTENT));
	}

这儿,由于 原布局文件是LinearLayout。所以 动态生成的Layout都位于原来布局全部控件的下方。仅仅要点击button,就会生成新的layout,不会重叠。效果如图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDEyNzI1MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

有个问题,假设原来的布局是RelativeLayout,能够解决边距问题。可是出现了一个问题,新生成的控件会覆盖掉原来生成的控件。给人的感觉是,仅仅生成一个控件。我也不知道为什么,欢迎大家提供好的建议。

RelativLayout xml文件: rizhi_test.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rizhitest"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:orientation="vertical"
      android:background="#CAE1FF"
    >
    <TextView
        android:id="@+id/title"
    	android:layout_width="match_parent"
    	android:layout_height="wrap_content"
        android:background="@drawable/rizhi_title"
        android:text="xxx的日志"
        android:gravity="center"
        android:textColor="#454545"
        android:textSize="25sp"
        />
    <TextView
        android:id="@+id/rizhi_title"
    	android:layout_width="match_parent"
    	android:layout_height="wrap_content"
        android:background="#FFC0CB"
        android:text="尘埃落定,栖于之间"
        android:gravity="center"
        android:textColor="#454545"
        android:textSize="25sp"
        android:layout_below="@id/title"
        android:layout_margin="5dp"
        />
    <RelativeLayout
        android:id="@+id/touxiang_layout"
        android:layout_width="match_parent"
     	android:layout_height="wrap_content"
        android:background="@drawable/rizhi_background_white"
        android:layout_margin="5dp"
        android:orientation="horizontal"
        android:layout_below="@id/rizhi_title"
        >
        <ImageView
            android:id="@+id/touxiang"
	    	android:layout_width="50dp"
	    	android:layout_height="50dp"
            android:background="@drawable/touxiang"
            />
        <RelativeLayout
	    	android:layout_width="wrap_content"
	    	android:layout_height="wrap_content"
	    	android:layout_marginLeft="70dp"
	    	android:background="#FFC0CB"
	    	android:layout_marginTop="5dp"
            >
             <TextView
		        android:id="@+id/username"
		    	android:layout_width="wrap_content"
		    	android:layout_height="wrap_content"
		        android:text="阳光下的向日葵"
		        android:textColor="#454545"
		        android:textSize="15sp"
		        />
              <TextView
		        android:id="@+id/rizhi_time"
		    	android:layout_width="wrap_content"
		    	android:layout_height="wrap_content"
		        android:text="2014年8月29日  12:45"
		        android:textColor="#454545"
		        android:textSize="15sp"
		        android:layout_below="@id/username"
		        android:layout_marginTop="3dp"
		        />
        </RelativeLayout>
   </RelativeLayout>
   <Button
       android:id="@+id/button"
	   android:layout_width="wrap_content"
	   android:layout_height="wrap_content"
	   android:text="按钮"
	   android:layout_below="@id/touxiang_layout"
       />
</RelativeLayout>
	private Context context;
	private Button button;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.rizhi_test);
		context = this;
		button = (Button) findViewById(R.id.button);
		final View nView = addMyView(button);
		button.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {

				addMyView(nView);
			}
		});

	}
private View addMyView(View xdView){
		//(1)
				LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
				//或LayoutInflater inflater = LayoutInflater.from(Activity.this);
				//或LayoutInflater inflater = getLayoutInflater();
				//(2)
				View view = inflater.inflate(R.layout.rizhi_pinglun, null);
				//(3)
				RelativeLayout rizhitest = (RelativeLayout) findViewById(R.id.rizhitest);
				RelativeLayout.LayoutParams relParams = new LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
						LinearLayout.LayoutParams.WRAP_CONTENT);
				relParams.setMargins(20, 10,20, 10);
				relParams.addRule(RelativeLayout.BELOW,xdView.getId());
				rizhitest.addView(view,relParams);
		return 	view;
	}

測试效果如图:

时间: 2024-10-29 19:11:51

动态加入子控件的相关文章

Android--根据子控件的大小自动换行的ViewGroup

1.自定义ViewGroup 1 /** 2 * Created by Administrator on 2016/2/26. 3 * 4 * --------自动换行的ViewGroup----------- 5 */ 6 public class LineWrapLayout extends ViewGroup { 7 private static final boolean DEBUG = true; 8 private static final String TAG = "AutoLin

AutoFillAdjustChildAdapterOption--RecycleViewUtil之动态计算均分控件显示childView

概述 很明显这个篇文章名起得不好- 这篇文章是跟另一篇AdjustCountOption文章相关的,两者有关联,但并不需要一定配合起来.只是建议两篇文章都了解一下会更能理解这个工具类的作用与价值. 实现的功能有点难以用简短的词进行描述.我们直接看图吧 特别的需求 有时我们可能会遇到下面这种需求: 从图中可以很明显分析到这个需求的一些要点: 最后一个头像是更多,并且后面不再有其它头像 所有的头像(包括更多)需要显示在一行内,并且在屏幕内 由于设备的多样,无法保证实际在不同的设备上需要的头像的多少(

Android嵌套滑动控件的冲突解决和ViewPager适配当前子控件高度不留空白的办法

最近项目有一个需求,需要多层可滑动控件的嵌套展示,demo效果如下,demo的下载地址在最后 咋一看好像挺简单啊,不就是一个ScrollView + ViewPager + ListView吗,我开始也这样觉得,也用的这种方式实现,结果始终和效果不对劲.这里总结几点问题: 两个或两个以上的滑动控件嵌套时,如果layout_height采用的是wrap_content会造成内部滑动控件的高度不能正确的计算,会导致内部滑动控件的高度始终为0,除非你用定值设置,比如300dp. 两个相同滑动方向的滑动

“System.Web.UI.WebControls.Literal”不允许使用子控件

今天在写下面的代码时遭遇错误——“System.Web.UI.WebControls.Literal”不允许使用子控件('System.Web.UI.WebControls.Literal' does not allow child controls): var postBodyDiv = new HtmlGenericControl() { ID = "cnblogs_post_body", ClientIDMode = ClientIDMode.Static, TagName =

Android动态布局,并动态为TextView控件设置drawableLeft、drawableRight等属性添加图标

注:(图中每一个条目和图标都是由代码动态生成) 代码动态布局,并需要为每一个条目设置图标,此时用到了 android:drawableLeft="@drawable/icon"  父xml文件: [html] view plaincopyprint? <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.andr

子控件根据父控件行宽自动换行---LineWrapLayout实现

一些带搜索功能的app,在搜索栏下面一般会提供一些关键字供用户选择. 也可以根据用户输入的文字,在下一次使用的时候该文字出现在常用关键字里面,只要轻轻一点就可以搜索了,无需再次输入. 关键字可以动态添加,这就要考虑换行的问题了 废话不多说,先上效果图: 先定义2个自定义属性 <declare-styleable name="linewarplayout"> <attr name="magin" format="integer"

IOS 读取xib里的子控件

interface ViewController () /**获取.plist数据*/ @property (nonatomic,strong) NSArray *aps; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //九宫格的总列数 int totalColumns=5; //1.1个格子的尺寸 CGFloat appW=50; CGFloat appH=60; //2.计算间隙

WinForm用户控件、动态创建添加控件、timer控件--2016年12月12日

好文要顶 关注我 收藏该文 徐淳 关注 - 1 粉丝 - 3 0 0 用户控件: 通过布局将多个控件整合为一个控件,根据自己的需要进行修改,可对用户控件内的所有控件及控件属性进行修改使用 动态创建添加控件: 1 //定义控件类型 2 Button btn = new Button(); 3 //控件名称……等属性,也可以直接绑定各种事件 4 btn.Name = "mybutton" + i.ToString(); 5 //添加到窗体 this 可以替换为 容器控件 6 this.Co

父控件、子控件

1 每一个控件其实都是一个容器可以将其他控件放到该控件的内部比较常见的还是将UIView作为容器 2 可以将A控件放入B控件A控件是B控件的子控件B控件是A控件的父控件 3 每一个控制器都有一个UIView控制器本身是不可见能够看到的是控制器的View每一个控制器中都一个UIVIew的属性控制器中管理的所有子控件都是该控件的子控件