动态添加子控件

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


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



    
	
	


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



    
    
    
        
        
             
              
        
   
   

java文件: 
  

	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(){
				//(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都位于原来布局所有控件的下方,只要点击按钮,就会生成新的layout,不会重叠。效果如图:

动态添加子控件_第1张图片动态添加子控件_第2张图片


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

RelativLayout xml文件: rizhi_test.xml:



    
    
    
        
        
             
              
        
   
   


	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;		
	}
测试效果如图:


动态添加子控件_第3张图片动态添加子控件_第4张图片动态添加子控件_第5张图片

你可能感兴趣的:(安卓专项)