Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android在布局中動態添加view的兩種方法

Android在布局中動態添加view的兩種方法

編輯:關於Android編程

一、說明

添加視圖文件的時候有兩種方式:1、通過在xml文件定義layout;2、java代碼編寫

二、前言說明

1.構造xml文件

2.LayoutInflater

提到addview,首先要了解一下LayoutInflater類。這個類最主要的功能就是實現將xml表述的layout轉化為View的功能。為了便於理解,我們可以將它與findViewById()作一比較,二者都是實例化某一對象,不同的是findViewById()是找xml布局文件下的具體widget控件實例化,而LayoutInflater找res/layout/下的xml布局文件來實例化的。

(1)創建

LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);或

LayoutInflater inflater = LayoutInflater.from(Activity.this);或

LayoutInflater inflater = getLayoutInflater();

這三種方法本質是相同的。

(2)inflate()

用LayoutInflater.inflate() 將LayOut文件轉化成VIew。

View view = inflater.inflate(R.layout.block_gym_album_list_item, null);

3.添加視圖文件


三、步驟
1、通過在xml文件定義layout(block_gym_album_list_item.xml)



    


2、main.xml




    


3、DynamicViewActivity.xml

package com.gxtag.gym.ui;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;

import com.gxtag.gym.R;
import com.icq.app.widget.StatedButton;

public class DynamicViewActivity extends Activity implements OnClickListener{

	private Context mContext;
	private TextView mTv_title;
	private String title = "動態添加布局";
	private StatedButton mSbtn_back;
	private LinearLayout mLl_parent;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_dynamic);
		mContext=this;
		initView();
		mLl_parent.addView(addView1());
		mLl_parent.addView(addView2());

	}
	
	private void initView() {
		// TODO 初始化視圖
		mLl_parent=(LinearLayout) findViewById(R.id.ll_parent);
		mTv_title = (TextView) findViewById(R.id.tv_title);
		mTv_title.setText(String.format(String.format(
				getResources().getString(R.string.title), title)));
		mSbtn_back = (StatedButton) findViewById(R.id.sbtn_navback);
		mSbtn_back.setOnClickListener(this);
		
		
	}
    
	private View addView1() {
		// TODO 動態添加布局(xml方式)
		LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( 
	                LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); 
//		LayoutInflater inflater1=(LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//		LayoutInflater inflater2 = getLayoutInflater();
		LayoutInflater inflater3 = LayoutInflater.from(mContext);
		View view = inflater3.inflate(R.layout.block_gym_album_list_item, null);
		view.setLayoutParams(lp);
		return view;
		
	}
	
	private View addView2() {
		// TODO 動態添加布局(java方式)
		LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( 
	                LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); 
		LinearLayout view = new LinearLayout(this); 
        view.setLayoutParams(lp);//設置布局參數 
        view.setOrientation(LinearLayout.HORIZONTAL);// 設置子View的Linearlayout// 為垂直方向布局 
        //定義子View中兩個元素的布局 
        ViewGroup.LayoutParams vlp = new ViewGroup.LayoutParams( 
                ViewGroup.LayoutParams.WRAP_CONTENT, 
                ViewGroup.LayoutParams.WRAP_CONTENT); 
        ViewGroup.LayoutParams vlp2 = new ViewGroup.LayoutParams( 
                ViewGroup.LayoutParams.WRAP_CONTENT, 
                ViewGroup.LayoutParams.WRAP_CONTENT); 
         
        TextView tv1 = new TextView(this); 
        TextView tv2 = new TextView(this); 
        tv1.setLayoutParams(vlp);//設置TextView的布局 
        tv2.setLayoutParams(vlp2); 
        tv1.setText("姓名:"); 
        tv2.setText("李四"); 
        tv2.setPadding(calculateDpToPx(50), 0, 0, 0);//設置邊距 
        view.addView(tv1);//將TextView 添加到子View 中 
        view.addView(tv2);//將TextView 添加到子View 中 
        return view; 
	}

	private int calculateDpToPx(int padding_in_dp){ 
        final float scale = getResources().getDisplayMetrics().density; 
        return  (int) (padding_in_dp * scale + 0.5f); 
    } 
	

	@Override
	public void onClick(View v) {
		// TODO 控件單擊事件
		switch (v.getId()) {
		case R.id.sbtn_navback:
			this.finish();
			break;
		default:
			break;
		}
	}

}

4、有需要再聯系我:qq-508181017












  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved