基于Android在布局中动态添加view的两种方法(总结)

作者:Xd_Yu 时间:2023-08-29 20:31:36 

一、说明

添加视图文件的时候有两种方式: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;
 }
}

}

来源:http://blog.csdn.net/Xd_Yu/article/details/51455609

标签:android,动态添加,view
0
投稿

猜你喜欢

  • Android播放音乐案例分享

    2023-08-27 14:41:31
  • Android 连接蓝牙扫码器无输入框的实现

    2023-05-06 02:37:34
  • Java并发包线程池ThreadPoolExecutor的实现

    2022-11-10 09:52:41
  • Java经典面试题最全汇总208道(四)

    2023-11-08 23:59:26
  • Spring MVC通过添加自定义注解格式化数据的方法

    2023-11-06 09:05:32
  • Java中BigInteger与BigDecimal类用法总结

    2021-09-14 07:15:26
  • 深入理解c# checked unchecked 关键字

    2021-11-29 01:25:09
  • java 集合----Map、Collection

    2022-11-09 03:39:01
  • C#实现学生成绩管理系统

    2021-06-05 22:51:31
  • 如何动态修改JavaBean中注解的参数值

    2022-09-03 04:08:34
  • Java基础之List内元素的排序性能对比

    2023-04-05 15:13:58
  • C#多态的三种实现方式(小结)

    2022-12-29 18:10:57
  • idea 多模块项目依赖父工程class找不到问题的方法

    2022-06-08 10:47:41
  • Java中的强引用,软引用,弱引用,虚引用的作用介绍

    2023-08-27 11:03:28
  • Java生成PDF文件的实例代码

    2022-05-24 07:22:37
  • 详解SpringMVC @RequestBody接收Json对象字符串

    2022-03-20 05:00:10
  • java中复杂查询sql语句该怎么写

    2021-06-20 01:25:24
  • java 输入一个数字组成的数组(输出该数组的最大值和最小值)

    2023-11-24 21:41:58
  • MyBatis Xml映射文件之字符串替换方式

    2022-03-23 00:06:39
  • java数据类型和运算符的深入讲解

    2021-09-14 07:06:08
  • asp之家 软件编程 m.aspxhome.com