Android在布局中动态添加view的两种方法

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

一、说明
添加视图文件的时候有两种方式: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 并通过xml 配置 设置id main_activity.xml <Button android:id="@+id/btn_add_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="20dp" android:text="点击添加view" android:textSize="20sp"/&g 阅读详情

相关推荐

Android使用addView动态添加组件

在项目开发中,我们经常需要进行动态添加组件,其中可添加的部分有两项:布局和组件  其中,添加布局主要有RelativeLayout型(相对布局)的和LinearLayout(线性布局)            添加的组件主要有文本显示框,编辑框,按钮等组件。 下面,就让我们来进行实现:     首先我们创建一个新的项目,删除MainActivity.class中没有的代码,仅留下p

suwu150 4万+

Android动态添加和删除控件/布局

该博客介绍了Android开发中动态增加和删除控件/布局的简单方法

飞机火车巴雷特的博客 9842

Android ViewGroup 中 addView 方法使用详解

       在日常开发中 我们会涉及到很多架构 例如 MVC  MVP MVVM 等等,如果我们的项目本身就是用 MVP 或 MVVM 架构, 那么 Activity 和 Fragment 中的代码冗余可能会相对小一些 但是如果项目的设计架构本身就是 MVC 这样我们还可以用其他的一些方法来分解我们 Activity 和 Fragment 中的代码冗余,对,就像标题中说的,利用 ViewGrou...

QDJdeveloper 4287

(转)android 在LinearLayout中动态添加View

android 在LinearLayout中动态添加View_YD-10-NG的博客-CSDN博客_linearlayout动态添加view android 在LinearLayout中动态添加View 前言 了解 使用 参考 完事 前言 在项目中有一个列表,列表里的item里面还有一个未知个数的横向列表 在这里插入图片描述 用列表来做,RecyclerView、ListView、GridView都需要另外再写一个Adapter,显得麻烦。这时候直接用一个横向...

zyb418的专栏 2680

基于Android布局动态添加view两种方法

基于Android布局动态添加view两种方法

Howard_Liu1314的专栏 5404

android 动态添加一个布局文件,基于Android布局动态添加view两种方法(总结)...

一、说明添加视图文件的时候有两种方式:1、通过在xml文件定义layout;2、java代码编写二、前言说明1.构造xml文件2.LayoutInflater提到addview,首先要了解一下LayoutInflater类。这个类最主要的功能就是实现将xml表述的layout转化为View的功能。为了便于理解,我们可以将它与findViewById()作一比较,二者都是实例化某一对象,不同的是fi...

weixin_35242442的博客 469

Android初学习 - 在布局动态添加view两种方法

一、说明 添加视图文件的时候有两种方式:1、通过在xml文件定义layout;2、java代码编写 二、前言说明 1.构造xml文件 2.LayoutInflater 提到addview,首先要了解一下LayoutInflater类。这个类最主要的功能就是实现将xml表述的layout转化为View的功能。为了便于理解,我们可以将它与findViewB

myKernel 3168

android 动态布局挤在一起,基于Android布局动态添加view两种方法(总结)

一、说明添加视图文件的时候有两种方式:1、通过在xml文件定义layout;2、java代码编写二、前言说明1.构造xml文件2.LayoutInflater提到addview,首先要了解一下LayoutInflater类。这个类最主要的功能就是实现将xml表述的layout转化为View的功能。为了便于理解,我们可以将它与findViewById()作一比较,二者都是实例化某一对象,不同的是fi...

weixin_34369597的博客 317

android自定义视图添加布局文件,基于Android布局动态添加view两种方法(总结)...

一、说明添加视图文件的时候有两种方式:1、通过在xml文件定义layout;2、java代码编写二、前言说明1.构造xml文件2.LayoutInflater提到addview,首先要了解一下LayoutInflater类。这个类最主要的功能就是实现将xml表述的layout转化为View的功能。为了便于理解,我们可以将它与findViewById()作一比较,二者都是实例化某一对象,不同的是fi...

weixin_42516642的博客 875

android -> 在布局动态添加view两种方法

    转自 : http://blog.csdn.net/Xd_Yu/article/details/51455609   一、说明 添加视图文件的时候有两种方式:1、通过在xml文件定义layout;2、Java代码编写 二、前言说明 1.构造xml文件 2.LayoutInflater 提到addview,首先要了解一下LayoutInflater类。这个类...

mft8899的博客 280

安卓动态添加View

在安卓应用中,有很多时候需要动态添加View。比如从后台获取商品列表,根据商品数量在页面渲染对应数量的条目,这时候就需要动态添加View

java_t_t的博客 2007

android 自定义view 高度,自定义View之宽高的设置,全网最详解

今天给大家带来的是自定义View,然后如何设置他的宽高,经常用自定义view的程序猿肯定都知道我们在给自定义view设置wrap_content或者match_parent,view都会占满全屏,就想如下以下是方法,不提供自定义view布局了,很简单,就是绘一个蓝色的圆第一种方式(布局修改)第一种方法也是最简单的方法,我们直接给自定义view限制一个宽高xmlns:app="http://sch...

weixin_29513805的博客 4465

android中listview动态显示,Android ListView动态显示和隐藏Header&Footer的方法

ListView的模板写法ListView模板写法的完整代码:•android代码优化----ListView中自定义adapter的封装(ListView的模板写法)以后每写一个ListView,就这么做:直接导入ViewHolder.java和ListViewAdapter,然后写一个自定义adapter继承自ListViewAdapter就行了。ListView动态显示和隐藏Header&...

weixin_30511777的博客 330

android demo(一):跟随手指的小球

实例如下: 实现方法 自定义view: 2中方法 第一种 在java代码中将view动态加入layout中(适用于动态改变的布局) protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.lay

lbpeisen的博客 681

android自定义控件添加图片,Android自定义ImageView实现在图片上添加图层效果

首先我们先看下效果图实现思路这是两张前后对比图,右边第二张图里面的已抢光标签图片当已经没有商品的时候就会显示了,在每个图片的中心位置,第一想法是在ImageView的外层再套一层RelativeLayout实现方法android:layout_width="match_parent"android:layout_height="wrap_content">android:id="@+id/i...

weixin_36299482的博客 969

Android控件的使用

通过前面的学习可以看到自定义一个View的时候,继承View的时候,必须实现一个构造函数,但是有三个构造函数,每一个构造函数都是在特定的场景下所必须实现的,否则会报inflate的错误那么应该如何选择 public RegionTest(Context context) {    super(context); } public RegionTest(C...

DLUT_WJX的博客 250
上一篇: ListView和GridView,ViewPager滑动到顶部和底部时出现的阴影消除方法
下一篇: RecyclerView 添加头部和尾部布局
Xd_Yu
博客等级 码龄12年 5粉丝 153原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值