android获取layout实例,【Android进阶学习】LayoutInflater的应用

本文介绍了LayoutInflater在Android开发中的作用,它与findViewById的区别,并详细展示了通过三种方式获取LayoutInflater实例的方法。通过实例演示了如何使用LayoutInflater加载XML布局,并在活动中显示和操作View组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LayoutInflater在Android中是“扩展”的意思,作用类似findViewById( ),它在Android开发中的作用是很大的。LayoutInflater经常在BaseAdapter的getView方法中用到,用来获取整个View并返回。

LayoutInflater与findViewById( )的不同点:

LayoutInflater是将XML中的Layout转换为View放入.java代码中

findViewById()是找具体xml下的具体组件(如:Button,TextView,ImageView等)。

获得LayoutInflater的三种方法:

第一种:

LayoutInflater inflater = LayoutInflater.from(this);

View layout = inflater.inflate(R.layout.main,null);

第二种:

LayoutInflater inflater = getLayoutInflater();

View layout = inflater.inflate(R.layout.main,null);

第三种:

LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);

View layout = inflater.inflate(R.layout.main,null);

getSystemService()是Android很重要的一个API,它是Activity的一个方法,根据传入 的NAME来取得对应的Object,然后转换成相应的服务对象。以下介绍系统相应的服务。其中LAYOUT_INFLATER_SERVICE返回的对象是 LayoutInflater,作用是取得XML定义的View。

第一个实例:

main.xml

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:id="@+id/text"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

android:id="@+id/btn1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

android:id="@+id/btn2"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

MainActivity.java

packagecom.lingdududu.test;

importandroid.app.Activity;

importandroid.graphics.Color;

importandroid.os.Bundle;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.widget.Button;

importandroid.widget.EditText;

publicclassMainActivityextendsActivity {

privateEditText etx;

privateButton confirmBtn;

privateButton cancleBtn;

/** Called when the activity is first created. */

@Override

publicvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

LayoutInflater inflater = getLayoutInflater();

View layout = inflater.inflate(R.layout.main,null);

etx = (EditText)layout.findViewById(R.id.text);

etx.setBackgroundColor(Color.WHITE);

etx.setHint("请输入你的学号");

confirmBtn = (Button)layout.findViewById(R.id.btn1);

confirmBtn.setText("确定");

cancleBtn = (Button)layout.findViewById(R.id.btn2);

cancleBtn.setText("取消");

setContentView(layout);

}

}

效果图:

088b83493aaeef7947fda500b917060a.png

第二个实例:

下面的一个简单的LayoutInflater应用实例,主布局main.xml里有一个TextView和一个Button,当点击Button,出现 Dialog,而这个Dialog的布局方式是我们在layout目录下定义的dialog.xml文件(里面左右分布,左边 ImageView,右边TextView)。

main.xml

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello"

/>

android:id="@+id/btn"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="打开对话框"

/>

dialog.xml

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="horizontal"

android:layout_width="match_parent"

android:layout_height="match_parent"

>

android:id="@+id/img"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

/>

android:id="@+id/dialog_txt"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="测试LayoutInflater"

/>

MainActivity.java

packagecom.lingdududu.test;

importandroid.app.Activity;

importandroid.app.AlertDialog;

importandroid.os.Bundle;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.widget.Button;

importandroid.widget.ImageView;

importandroid.widget.TextView;

publicclassMainActivityextendsActivity {

privateButton showBtn;

/** Called when the activity is first created. */

@Override

publicvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

showBtn = (Button)findViewById(R.id.btn);

showBtn.setOnClickListener(newshowDialogListener());

}

classshowDialogListenerimplementsOnClickListener{

@Override

publicvoidonClick(View v) {

// TODO Auto-generated method stub

showDialog();

}

}

publicvoidshowDialog() {

AlertDialog.Builder builder;

AlertDialog dialog ;

LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);

//LayoutInflater inflater = getLayoutInflater();

//LayoutInflater inflater = LayoutInflater.from(this);

View layout = inflater.inflate(R.layout.dialog,null);

TextView tx = (TextView)layout.findViewById(R.id.dialog_txt);

tx.setText("测试LayoutInflater");

ImageView img = (ImageView)layout.findViewById(R.id.img);

img.setImageResource(R.drawable.icon);

builder =newAlertDialog.Builder(this);

builder.setView(layout);

dialog = builder.create();

dialog.show();

}

}

效果图:

d52f95422ed3dfb5f5b5300aa4d59306.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值