`

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

 
阅读更多

一、说明 
添加视图文件的时候有两种方式: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的两种方法共5页.p

    本资料将详细讲解在Android布局中动态添加View的两种主要方法:使用LayoutInflater和直接通过代码创建。以下是对这两种方法的详细介绍: 1. 使用LayoutInflater: LayoutInflater是Android中的一个关键类,主要用于...

    Android在布局中动态添加view的两种方法共5页.pdf.zip

    本文将深入探讨两种主要的在布局中动态添加View的方法:使用LayoutInflater和直接通过代码创建。 首先,我们来看第一种方法,使用LayoutInflater。LayoutInflater是Android中的一个关键类,它负责将XML布局文件转换...

    android View添加阴影效果

    在提供的`ShadowDemo`项目中,可能包含了使用`elevation`和`layer-list`的示例代码,你可以通过分析和运行这些代码,更深入地理解和掌握这两种方法。同时,也可以参考项目的源代码,学习如何在实际项目中灵活运用...

    android-Support-v7-CardView

    -- 在这里添加你的内容视图 --&gt; &lt;/LinearLayout&gt; &lt;/androidx.cardview.widget.CardView&gt; ``` 在这个例子中,`card_view:cardCornerRadius`定义了卡片的圆角半径,`card_view:cardElevation`设置了卡片的阴影高度...

    Android-Android流式布局FlowLayout实现关键字标签

    这两个方法是Android布局管理的核心,它们负责计算视图的尺寸和位置。 2. **测量过程**: 在onMeasure()方法中,我们需要遍历所有子视图,根据每个子视图的宽度和当前行剩余空间来决定是否换行。如果当前子视图...

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

    基于Android在布局中动态添加view的两种方法 Android应用程序中,动态添加View是非常常见的需求。例如,在列表中添加新的项、在某个按钮点击事件中添加新的控件等等。在Android中,动态添加View可以通过两种方式...

    动态添加View和事件监听

    在Android中,有两种主要的事件监听方式:匿名内部类和Java 8的Lambda表达式。无论哪种方式,目标都是为View绑定一个事件处理器,处理用户的交互。 1. 匿名内部类:这是传统的方法,如`button.setOnClickListener...

    Android-RecyclerView二次封装Adapter支持添加头布局尾部局空布局

    本项目特别提到支持GridLayoutManager和LinearLayoutManager,这意味着封装的Adapter可以处理这两种布局模式下的头尾布局和空布局。 4. **二次封装的Adapter**: - 二次封装的核心在于对原生RecyclerView.Adapter...

    android 自定义view流式布局

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特且复杂的UI组件。本篇文章将深入探讨如何实现一个自定义的“流式布局”(Flow Layout),这是一种能够自动调整子视图(child views...

    安卓Android源码——SurfaceView添加组件view不被组件覆盖.zip

    在提供的压缩包文件中,`1_120912220059_1.png` 和 `1_120912220059_2.png` 可能是展示这两种解决方案实际效果的截图,而 `源码说明.txt` 可能包含了更详细的实现步骤和注意事项。`Android SurfaceView添加组件view...

    android 自定义View 两种方式

    下面将详细介绍这两种创建自定义View的方式:在Activity中直接使用View以及在XML文件中布局。 1. 在Activity中直接使用View 这种方式通常适用于较为简单的自定义View或者需要在运行时动态创建的视图。首先,你需要...

    Android自定义View-圆环布局

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特且功能丰富的用户界面。"Android自定义View-圆环布局"是一个专为实现特定视觉效果和交互设计的项目,它包含了圆圈旋转、圆环拖动...

    android 添加边框的 textview

    本文将详细介绍两种在Android中为TextView添加边框的方法。 方法一:使用XML布局资源 在Android的布局XML文件中,我们可以利用`shape`元素来创建一个自定义的背景,从而实现TextView的边框效果。首先,创建一个名为...

    android-support-v7-appcompat.jar android-support-v4.jar

    在Android开发中,`android-support-v7-appcompat.jar` 和 `android-support-v4.jar` 是两个非常重要的库文件,它们提供了对旧版本Android系统的重要支持和功能扩展。 首先,`android-support-v7-appcompat.jar` 是...

    Android中使用RelativeLayout布局完成的登录练习题要求说明.pdf

    在Android应用开发中,界面设计是至关重要的一步,而`RelativeLayout`是Android提供的一种常用的布局管理器,它允许我们以相对的方式定位各个UI组件。这篇练习题旨在帮助开发者熟悉并掌握`RelativeLayout`的使用方法...

    android动态布局

    1. **LinearLayoutManager** 和 **GridLayoutManager**:在Android的RecyclerView中,这两种布局管理器支持动态加载和滚动,可以根据数据集的大小和屏幕空间动态调整视图。 2. **LayoutInflater**:用于将XML布局...

    android-segmented-control-view.zip

    2. **XML布局和Java代码的交互**:源码可能会展示如何在XML布局文件中声明自定义的Segmented Control View,并在Java代码中对其进行控制和监听。 3. **事件处理和回调**:了解分段控制器如何响应用户的点击事件,...

    android-support-design.jar和android-support-v7-recyclerview.jar.rar

    在Android开发中,`android-support-design.jar`和`android-support-v7-recyclerview.jar`是两个非常重要的库文件,它们属于Android Support Library的一部分。这个库是由Google提供的,旨在帮助开发者为旧版本的...

    android跑马灯源码

    在Android开发中,跑马灯效果通常用于展示滚动文本,比如通知、广告或者标题等,它给用户带来一种动态连续的视觉体验。本资源提供的是Android跑马灯的实用源码,包含了三种不同的实现方式,适合对Android UI特效感...

Global site tag (gtag.js) - Google Analytics