转自 : http://blog.csdn.net/Xd_Yu/article/details/51455609
一、说明
添加视图文件的时候有两种方式: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的两种主要方法:使用LayoutInflater和直接通过代码创建。以下是对这两种方法的详细介绍: 1. 使用LayoutInflater: LayoutInflater是Android中的一个关键类,主要用于...
本文将深入探讨两种主要的在布局中动态添加View的方法:使用LayoutInflater和直接通过代码创建。 首先,我们来看第一种方法,使用LayoutInflater。LayoutInflater是Android中的一个关键类,它负责将XML布局文件转换...
在提供的`ShadowDemo`项目中,可能包含了使用`elevation`和`layer-list`的示例代码,你可以通过分析和运行这些代码,更深入地理解和掌握这两种方法。同时,也可以参考项目的源代码,学习如何在实际项目中灵活运用...
-- 在这里添加你的内容视图 --> </LinearLayout> </androidx.cardview.widget.CardView> ``` 在这个例子中,`card_view:cardCornerRadius`定义了卡片的圆角半径,`card_view:cardElevation`设置了卡片的阴影高度...
这两个方法是Android布局管理的核心,它们负责计算视图的尺寸和位置。 2. **测量过程**: 在onMeasure()方法中,我们需要遍历所有子视图,根据每个子视图的宽度和当前行剩余空间来决定是否换行。如果当前子视图...
基于Android在布局中动态添加view的两种方法 Android应用程序中,动态添加View是非常常见的需求。例如,在列表中添加新的项、在某个按钮点击事件中添加新的控件等等。在Android中,动态添加View可以通过两种方式...
在Android中,有两种主要的事件监听方式:匿名内部类和Java 8的Lambda表达式。无论哪种方式,目标都是为View绑定一个事件处理器,处理用户的交互。 1. 匿名内部类:这是传统的方法,如`button.setOnClickListener...
本项目特别提到支持GridLayoutManager和LinearLayoutManager,这意味着封装的Adapter可以处理这两种布局模式下的头尾布局和空布局。 4. **二次封装的Adapter**: - 二次封装的核心在于对原生RecyclerView.Adapter...
在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特且复杂的UI组件。本篇文章将深入探讨如何实现一个自定义的“流式布局”(Flow Layout),这是一种能够自动调整子视图(child views...
在提供的压缩包文件中,`1_120912220059_1.png` 和 `1_120912220059_2.png` 可能是展示这两种解决方案实际效果的截图,而 `源码说明.txt` 可能包含了更详细的实现步骤和注意事项。`Android SurfaceView添加组件view...
下面将详细介绍这两种创建自定义View的方式:在Activity中直接使用View以及在XML文件中布局。 1. 在Activity中直接使用View 这种方式通常适用于较为简单的自定义View或者需要在运行时动态创建的视图。首先,你需要...
在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特且功能丰富的用户界面。"Android自定义View-圆环布局"是一个专为实现特定视觉效果和交互设计的项目,它包含了圆圈旋转、圆环拖动...
本文将详细介绍两种在Android中为TextView添加边框的方法。 方法一:使用XML布局资源 在Android的布局XML文件中,我们可以利用`shape`元素来创建一个自定义的背景,从而实现TextView的边框效果。首先,创建一个名为...
在Android开发中,`android-support-v7-appcompat.jar` 和 `android-support-v4.jar` 是两个非常重要的库文件,它们提供了对旧版本Android系统的重要支持和功能扩展。 首先,`android-support-v7-appcompat.jar` 是...
在Android应用开发中,界面设计是至关重要的一步,而`RelativeLayout`是Android提供的一种常用的布局管理器,它允许我们以相对的方式定位各个UI组件。这篇练习题旨在帮助开发者熟悉并掌握`RelativeLayout`的使用方法...
1. **LinearLayoutManager** 和 **GridLayoutManager**:在Android的RecyclerView中,这两种布局管理器支持动态加载和滚动,可以根据数据集的大小和屏幕空间动态调整视图。 2. **LayoutInflater**:用于将XML布局...
2. **XML布局和Java代码的交互**:源码可能会展示如何在XML布局文件中声明自定义的Segmented Control View,并在Java代码中对其进行控制和监听。 3. **事件处理和回调**:了解分段控制器如何响应用户的点击事件,...
在Android开发中,`android-support-design.jar`和`android-support-v7-recyclerview.jar`是两个非常重要的库文件,它们属于Android Support Library的一部分。这个库是由Google提供的,旨在帮助开发者为旧版本的...
在Android开发中,跑马灯效果通常用于展示滚动文本,比如通知、广告或者标题等,它给用户带来一种动态连续的视觉体验。本资源提供的是Android跑马灯的实用源码,包含了三种不同的实现方式,适合对Android UI特效感...