赞
踩
一、说明
添加视图文件的时候有两种方式: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)
- <linearlayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical"
- android:padding="5dp"
-
- <imageview
- android:id="@+id/iv_head_album"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/defaulthead"
- </imageview
- </linearlayout
复制
activity_dynamic
- <linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/ll_parent"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
-
- <include
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- layout="@layout/block_head_back"
- </include
- </linearlayout
复制
3、MainActivity
- 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 MainActivityextends 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;
- }
- }
- }
以上这篇基于Android在布局中动态添加view的两种方法(总结)就是小编分享给大家的全部内容了,希望能给大家一个参考。
Demo:
public class MainActivity extends AppCompatActivity { private LinearLayout layout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); layout = findViewById(R.id.test); layout.addView(getView()); } private View getView() { // TODO 动态添加布局(xml方式) FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams( dip2px(this, 100), dip2px(this, 500)); LayoutInflater inflater3 = LayoutInflater.from(this); View view = inflater3.inflate(R.layout.layout, null); view.setLayoutParams(lp); return view; } public static int dip2px(Context context, float dipValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dipValue * scale + 0.5f); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。