前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Android在布局中动态添加view的两种方法(总结)

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

作者头像
砸漏
发布2020-10-22 09:57:40
6.1K0
发布2020-10-22 09:57:40
举报
文章被收录于专栏:恩蓝脚本

一、说明

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

代码语言:javascript
复制
<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

代码语言:javascript
复制
<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

代码语言:javascript
复制
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的两种方法(总结)就是小编分享给大家的全部内容了,希望能给大家一个参考。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档