LayoutInflater 的使用 ----动态改变布局;

Android整理笔记——1.5 动态填充布局 显示数据 ListView 1.5动态填充布局 显示数据 ListView 自定义 AdapterView的视图 在AdapterView(ListView、GridView)没有数据时显示自定义视图 目录 1.5.1初步认识ListView 1.5.2用ArrayAdapter实现视图填充 1.5.3在ListView为空时显示TextView的内容 1.5.4在ListView为空时显示... 阅读详情

LayoutInflater的作用类似于findViewById(),不同点是LayoutInflater是用来找layout下xml布局文件,并且实例化。

通过LayoutInflater获取布局文件根元素,并将新的UI元素添加进去,再设置Adapter和setContentView(),就可以动态的改变布局;


看一例子:

要实现的效果:屏幕中六行六列图片,只显示下三角的图片,点击任一个图片,变为上三角;

1.Activity;


package zzu.wyb.gridview;

import android.app.Activity;
import android.os.Bundle;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class GridViewActivity extends Activity {
	private GridView gv_sample; // GridView;
	private int[] imgids = { R.drawable.sample_0, R.drawable.sample_1,
			R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4,
			R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7,
			R.drawable.sample_0, R.drawable.sample_1, R.drawable.sample_2,
			R.drawable.sample_3, R.drawable.sample_4, R.drawable.sample_5,
			R.drawable.sample_6, R.drawable.sample_7, R.drawable.sample_0,
			R.drawable.sample_1, R.drawable.sample_2, R.drawable.sample_3,
			R.drawable.sample_4, R.drawable.sample_5, R.drawable.sample_6,
			R.drawable.sample_7, R.drawable.sample_0, R.drawable.sample_1,
			R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4,
			R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7,
			R.drawable.sample_0, R.drawable.sample_1, R.drawable.sample_2,
			R.drawable.sample_3 };

	private boolean layoutIndicator = false; // 控制图片显示位置的指示器;
	private LayoutInflater inflater;	//渲染器;
	private LinearLayout rootLayout;//根布局;

	

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		/*		GridView gridv = new GridView(this);
		this.setContentView(gridv);
		gridv.setNumColumns(6);
		gridv.setAdapter( new GridViewAdapter(this, imgids, true));
		gridv.setOnItemClickListener(gridViewListener);
		
*/
		setContentView(R.layout.main_gridview);
		gv_sample = (GridView) findViewById(R.id.gv_sample);
		gv_sample.setNumColumns(6);
		setGridViewAdapter();
		gv_sample.setOnItemClickListener(gridViewListener);

	}

	/**
	 * 设置监听器,设置适配器!
	 */
	private void setGridViewAdapter() {

		GridViewAdapter adapter = new GridViewAdapter(this, imgids, layoutIndicator);// 新监听器

		gv_sample.setAdapter(adapter);

	}

	GridView.OnItemClickListener gridViewListener = new GridView.OnItemClickListener() {

		@Override
		public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
				long arg3) {

			// 改变指示器;
			layoutIndicator = !layoutIndicator;
			System.out.println("test,itemSelectedListener.");
		
			// 改变布局;
			changeView(imgids, layoutIndicator);
		}

	};

	/**
	 * 控制图片显示;
	 * 
	 * @param
	 */
	private void changeView(int[] imgs, boolean viewIndicator) {
		if (true) {
			// 获取根布局;
			inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
			rootLayout = (LinearLayout) inflater.inflate(
					R.layout.main_gridview, null);
			
			// 移除布局文件下的所有子元素;
			rootLayout.removeView(gv_sample);
			// this.gv_sample.setVisibility(GridView.GONE);
		
			//新一个GridView,上下文环境为当前;
			gv_sample = new GridView(this);
			gv_sample.setNumColumns(6);//设置显示为六行;
			if (rootLayout != null) {
				System.out.println("convertView is not  null!!!");
				gv_sample.setAdapter(new GridViewAdapter(this, imgs, viewIndicator));
				rootLayout.addView(gv_sample);//将新的GridView添加到布局文件中;
				this.setContentView(rootLayout);//显示更改过的布局;
				gv_sample.setOnItemClickListener(gridViewListener);
				
			} else {
				System.out.println("convertView is null!!!");
			}

		}
		

	}

	

	

}


2.Adapter

package zzu.wyb.gridview;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

/**
 * 配置Adapter
 * 
 * @author BurgenWang
 * 
 */
public class GridViewAdapter extends BaseAdapter {
	private Context context;
	private int[] imgs;
	private boolean viewIndicator;

	/**
	 * 
	 * @param context GridView所要显示的上下文环境;
	 * @param imgids 数据源,图片id数组;
	 * @param viewIndicator 指示器,boolean
	 */ 
	public GridViewAdapter(Context context, int[] imgids,boolean viewIndicator) {
		this.context = context;
		this.imgs = imgids;
		this.viewIndicator = viewIndicator;
	}

	
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return imgs.length;
	}

	@Override
	/**
	 * 通过元素在GridView中的位置获得该元素的id;
	 */
	public Object getItem(int position) {
		
		return imgs[position];
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return imgs[position];
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ImageView img = null;
		
		if(convertView == null ){
			
			img = new ImageView(this.context);
			convertView = img;
			}else{	//convertView保存上次的View;
				img = (ImageView) convertView;
			}
		
		img.setScaleType(img.getScaleType().CENTER_CROP);//设置图片显示;从图片中心向外缩放;
		img.setLayoutParams(new GridView.LayoutParams(70,70));//每个图片所占空间大小
		img.setPadding(8, 8, 8, 8);	//图片间左上右下间距;
		img.setImageResource(this.imgs[position]);//图片资源
		int x = position%6;//图片在GridView中所在行
		int y = position/6;//列;
		if(this.viewIndicator){//若为true,则显示右上半部分;
			if(x>y  ){
				img.setVisibility(ImageView.INVISIBLE);
			}
		}else{//否则显示左下半部分;
			if(x<y ){
				img.setVisibility(ImageView.INVISIBLE);
			}
		}
		
		
		return img;
	}
	
	

}

3.layout布局文件;

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    
    <GridView
        android:id="@+id/gv_sample"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:numColumns="6"
       
        android:gravity="center">
    </GridView>

</LinearLayout>



SolidWorks启动报错“无法获得下列许可”原因分析与完整排查解决指南 在CAD/CAE工程设计领域,许可证管理是软件正常启动的核心机制。SolidWorks作为主流三维设计工具,其基于FlexNet技术的许可服务一旦握手失败,常会弹出“无法获得下列许可SOLIDWORKS Standard”等提示,并伴随-8、-15、-96等错误代码。这种现象并非软件损坏,而是许可服务未运行、序列号不匹配、防火墙拦截、系统时间异常或注册表残留等工程环境问题所致。理解许可服务的工作原理,掌握从服务状态检查、许可证文件核对到进程与端口验证的系统排查思路,是每位设计工程师和IT运维人员应具备的基础 阅读详情

相关推荐

DeepSeek赋能CAD:从API调用到智能设计工作流的实战指南

本文详细介绍了如何利用DeepSeek AI技术赋能CAD设计工作流,从API调用到智能设计优化的实战指南。通过Python环境配置、API接入详解以及四大智能设计场景的实战案例,帮助CAD设计师实现参数化设计优化、自动规范检查等高效工作方式,大幅提升设计效率和质量。

weixin_29092579的博客 621

LayoutInflater Activity重新布局利器

当你觉得activity太多时怎么办,能不能把多个activity 界面布局融合到一个activity上然后点击刷新呢? LayoutInflater 就是这样的对象, 可以不断载入不同的 Layout XML,然后找到自己的控件,添加点击事件,最后加到这个view里。 具体如下:   1.创建一个Layout XML 作为容器 里面就一个LinearLayout 作为承载其他...

aqj1234的博客 159

从Oracle迁移数据到Hadoop

目标:把Oracle 下的数据文件迁移到 Hadoop , 数据表都是上亿条,每个数据表的空间都超过100G。 关键是建立数据文件是UTF8格式,这样数据中的汉字在Hadoop 里显示才正常。 平台:CentOS 6.10 工具:Python 2.7 cx_Oracle 库 Oracle10.2.0.4.0 Hadoop 2.7.2-transwarp-5.2.1 1. 查看表...

预则立 4233

安卓动态加载布局

吐槽 这周就写了一点点项目,因为马上要考试了啊啊啊啊,啥都不会,心塞塞哇哇哇。但是把项目中动态加载布局这块学习了一下,把项目这块写了,然后还学了下如何动态添加item这块。 什么叫动态布局 这就是动态加载布局,根据我选择的卡片类型,创建不同的布局,加载到下面 动态布局就是动态加载的布局啊emmmmmmm 有动态布局肯定有相应的静态布局 那两者有什么区别啊 静态布局是之前就写好的,...

sakurakider的博客 3830

STM32F429移植LVGL9.3.0:从源码配置到双缓冲优化实战

本文详细介绍了如何在STM32F429平台上移植LVGL 9.3.0图形库,涵盖从源码准备、工程配置、显示驱动适配到双缓冲优化等关键步骤。重点解析了利用STM32F429的硬件特性实现高效内存管理和流畅显示性能的实战技巧,为嵌入式GUI开发提供完整解决方案。

q6r7s8t9的博客 1128

电力电子技术进阶:从基础到实战的完整学习路径

本文系统阐述了电力电子技术从基础到实战的完整学习路径。首先解析了电力电子作为“电能魔术师”的核心作用,随后深入剖析了数学工具、电路电磁场与半导体器件三大基础支柱。文章重点讲解了DC-DC、DC-AC、AC-DC等核心变换拓扑,并探讨了从经典PID到现代模型预测控制(MPC)的控制策略。最后,分享了硬件设计、软件调试、电磁兼容(EMC)等实战经验与前沿趋势,为学习者提供了清晰的进阶指南。

weixin_29204205的博客 446

android布局改变,Android笔记之动态改变layout中的布局

1、动态显示和隐藏控件:layout布局:android:layout_width="match_parent"android:layout_height="match_parent"android:layout_alignParentBottom="true"android:layout_alignParentLeft="true" >android:id="@+id/button1"an...

weixin_34342091的博客 1249

STM32F103C8T6的PC13-15引脚配置避坑指南:为什么你的IO口不工作?

本文详细解析了STM32F103C8T6的PC13-15引脚作为普通IO口不工作的原因及解决方案。这三个引脚默认关联侵入检测和低速外部时钟等特殊功能,需先禁用TAMPER和LSE,并开启AFIO时钟,才能正确配置为普通GPIO。文章提供了标准外设库和HAL库的配置步骤、常见问题排查方法及硬件设计注意事项。

weixin_29169899的博客 522

Android 实现布局动态加载

Android 动态加载布局 通过使用LayoutInflater 每次点击按钮时候去读取布局文件,然后找到布局文件里面的各个VIEW 操作完VIEW 后加载进我们setContentView 方面里面的要放的布局文件里面,每次动态加载文件必需 调用 removeAllViews方法,清除之前的加载进来的 View 。是不是很简单?当然动态加载VIEW 还有许多种方法,多尝试不同写法。可能会

kunlong0909的专栏 6万+

探索如何利用CST和ADS进行DDR的SIPI联合仿真

本文系统介绍了CST和ADS两款工具进行DDR信号完整性/电源完整性(SI/PI)联合仿真的方法。CST采用工作室协同方式,通过PCB布局导入、材料设置、模型分配等步骤,重点分析了电源阻抗优化和信号波形质量。ADS则利用SIPro、PIPro等专用工具,突出系统级验证和自动化优化功能。两者各有优势:CST擅长3D结构精确建模,ADS更适于快速系统验证。文章建议可根据项目需求混合使用两种工具,并提供了模型简化、频带选择等实用技巧。通过对比分析,为工程师选择仿真工具提供了决策参考。

一只豌豆象的博客 1150

华为OD机试 - 素数之积 - 数学问题(Java 2025 A卷 100分)

每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 2133

ViewPager动态加载布局

第一个xml代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height

jamesssemaj的专栏 1516

HyperLynx(二十二)DDR(五)DDRx总线时序模型设计

DDR3 的数据选通信号与时钟信号的频率是一样的,在数据选通信号写操作时,控制器典型的输出方式是数据选通信号边沿与时钟近似对齐。该界面中显示了所有需要编辑的参数,包括地址/命令信号的时序、控制信号的时序、读和写操作的数据选通和数据信号时序、写操作的数据选通和数据掩码信号时序,以及建立和保持时间的降额参数。由于DDRx总线对时序的要求非常严格,随着速率的提升,时序的要求会更高。反之也是一样的,如果数据选通信号的上升沿在时钟信号上升沿的后面到达 DRAM,那么数据选通信号的下降沿就会在时钟信号的前面到达。

小幽余生不加糖 1935

android完美解决动态创建spinner点击,错误

因为spinner是动态创建,所以,加载xml需要用以下方式View viewToLoad = LayoutInflater.from(this.getParent()).inflate(R.layout.tel_submit, null);this.setContentView(viewToLoad); //setContentView(R.layout.tel_submit);//这样加载...

weixin_30682415的博客 141

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

setContentView( )方法

setContentView(R.layout.main)在Android里面,这句话是什么意思? R.layout.main是个布局文件即控件都是如何摆放如何显示的,setContentView就是设置一个Activity的显示界面,这句话就是设置这个这句话所再的Activity采用R.layout下的main布局文件进行布局 使 用setContentView可以在Activity中动态

超宇的博客 828

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

动态设置布局LayoutInflater

动态设置布局LayoutInflater

随意而然的专栏 1416

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

android动态改变布局,Android 动态添加布局的两种方式

前言大多数时候我们布局都是用xml来布局的,但有些时候也是会用到动态布局的,尤其是在一些大项目中,动态布局更是体现的淋漓尽致。所以今天我们就来学习一些动态加添布局的两种方式,分别是动态添加xml布局另外写一个xml布局,然后通过java的方式让他加载他主布局上动态添加java布局通过java写出一个布局,然后再通过java的方式让他加载他主布局上一、动态添加xml布局步骤第一步构造容器Linear...

weixin_39725118的博客 2222

【边做项目边学Android】知识点:动态设置布局LayoutInflater

一.作用:     LayoutInflater作用是将layout的xml布局文件实例化为View类对象,LayoutInflater 的作用类似于 findViewById(),不同点是LayoutInflater是用来找layout文件夹下的xml布局文件,并且实例化!而 findViewById()是找具体某一个xml下的具体 widget控件(如:Button,TextView等)。

生命在于折腾 1940

动态改变recyclerview的item的布局

大家都知道listview可以使用动态改变item布局。 @Override public int getItemViewType(int position){     return type; } @Override public int getViewTypeCount() {     return number; } 当然recyclerview同样

Lucky_bo的专栏 9922

Android动态添加布局LayoutInflater简单用法

下面是关于 LayoutInflater 简单用法: 直接看例子,我想在 activity_main 文件中动态的添加一个布局;下面是 activity_main 文件中的代码: &lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="matc...

wuqingsen1的博客 5411

Android动态加载布局之LayoutInflater【转】

万分感谢大佬:https://www.jianshu.com/p/6a235ba5ee17 深入了解View<一>之Android LayoutInfalter原理分析 简述 LayoutInfalter主要是用来加载布局。对LayoutInfalter不怎么熟悉的,通常都是在Activity中调用setContentView()方法来完成的。其实setContentView()方法的...

Jason的学习笔记 514

android动态设置布局LayoutInflater的使用详解

一.作用: LayoutInflater作用是将layout的xml布局文件实例化为View类对象,LayoutInflater的作用类似于 findViewById(),不同点是LayoutInflater是用来找layout文件夹下的xml布局文件,并且实例化!而 findViewById()是找具体某一个xml下的具体 widget控件(如:Button,Text...

dengchu5001的博客 268

Android 动态改变 Recyclerview 的item的布局

大家都知道listview可以使用动态改变item布局。 @Override public int getItemViewType(int position) { return type; } @Override public int getViewTypeCount() { return number; } 当然recyclerview同样可以动态改变item布局 1、继承 RecyclerView.Adapter<RecyclerView.ViewHolder> publ

weixin_42814000的博客 1939

使用LayoutInflater动态加载布局和操作控件

我们知道在Android中通过布局文件来描述软件的界面,而通常在Activity中都是使用setContentView()来将布局显示出来。但是如果我们在非Activity的情况下,而且需要对布局中的控件进行设置等操作,该如何处理呢?这就需要使用到动态加载布局LayoutInflater,下面ATAAW.COM来做介绍。 以一个简单布局example.xml为例,里面只有一个按钮和一个文本显示框

huazaichang的专栏 379

Android:LayoutInflater(布局服务)的 简单介绍 & 使用方法解析

LayoutInflater布局服务LayoutInflater1、什么是LayoutInflater?2、如何调用inflate()函数3、inflate()方法参数解析3.1、attachToRoot何时为true,何时为false?3.2、LayoutInflater.from这个方法什么意思?4、Java代码加载布局使用流程5、Java代码动态加载xml布局参考 LayoutInflater 1、什么是LayoutInflater? Layout是什么? 答:一个用于加载布局的系统服务,就是实例化

JMW1407的博客 2018

java layoutinflater_使用LayoutInflater动态加载布局和操作控件

我们知道在Android中通过布局文件来描述软件的界面,而通常在Activity中都是使用setContentView()来将布局显示出来。但是如果我们在非Activity的情况下,而且需要对布局中的控件进行设置等操作,该如何处理呢?这就需要使用到动态加载布局LayoutInflater,下面ATAAW.COM来做介绍。以一个简单布局example.xml为例,里面只有一个按钮和一个文本显示框控件...

weixin_30843553的博客 209
上一篇: adb shell下查看sqlite数据库
下一篇: 文件锁(Filelock) 与锁定映射文件部分内容
慕广陵
博客等级 码龄17年 3粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值