详解Dialog(一)——基础元素构建

详解Dialog(一)——基础元素构建,第1张

概述本篇内容比较简单,是最基础篇,包括对话框标题、消息、按钮、内容视图的动态构建和静态构建方法。一、标题、消息、按钮首先我们要认识一个函数:AlertDialog.Builder builder = new AlertDialog.Builder(context); 这个AlertDialog.Builder(context)就是用来构建Dialog各种相关参数的,跟Stri...

本篇内容比较简单,是最基础篇,包括对话框标题、消息、按钮、内容视图的动态构建和静态构建方法。

 

一、标题、消息、按钮

首先我们要认识一个函数:

AlertDialog.Builder builder = new AlertDialog.Builder(context);	

这个AlertDialog.Builder(context)就是用来构建Dialog各种相关参数的,跟StringBuilder的含义差不多,在全部想要的参数都添加上完了以后,调用:

 

Builder.create()来创建对话框,使用Builder.show()来显示对话框。

Builder.create();Builder.show();

对话框的构建与显示大致就是这个样子,下面让我们来看看AlertDialog.Builder(context);的各种参数;

1、ICON、标题与消息

先看看对话框中ICON、标题与消息各自的位置:

添加他们的代码分别是:

builder.setIcon(R.drawable.ic_launcher);//添加ICONbuilder.setTitle("退出");                //添加标题builder.setMessage("你确定要离开吗?");     //添加MSG

所以要构建上图的对对话框的完整代码是这样的:

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setIcon(R.drawable.ic_launcher);//添加ICONbuilder.setTitle("退出");                //添加标题builder.setMessage("你确定要离开吗?");     //添加MSGbuilder.create();builder.show();

出来的效果图是这样的:

2、按钮

Google为我们提供了三个按钮选择,左按钮,右按钮和中间按钮,分别对应:

Builder.setPositivebutton(string,DialogInterface.OnClickListener);//确定按钮Builder.setNegativebutton(string,DialogInterface.OnClickListener);//取消按钮Builder.setNeutralbutton(string,DialogInterface.OnClickListener);//中间按钮

这里需要注意的是,中间按钮(setNeutralbutton)无论把它放在代码的什么位置,他始终是在中间的,跟代码的具体位置无关,其实这个几按钮函数的代码的按钮位置跟他们的代码位置是都没有关系的,并不会因为在代码中先写了确定按钮,在显示时确定按钮就在左边,不是这样的,它是跟系统样式相关联的,系统样式中定义的确定按钮在哪边显示它就会在哪边显示!
 

看一下他们具体使用:

builder.setPositivebutton("确定",new DialogInterface.OnClickListener() {			public voID onClick(DialogInterface dialog,int whichbutton) {				// 点击响应				Toast.makeText(MainActivity.this,"ok click",Toast.LENGTH_LONG).show();			}		});builder.setNegativebutton("取消","cancel click",Toast.LENGTH_LONG).show();			}		});builder.setNeutralbutton("中间BTN","center click",Toast.LENGTH_LONG).show();			}		});

我们在每次点击时都d一个Tost出来,完整的代码应当是这样的:

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setIcon(R.drawable.ic_launcher);//添加ICONbuilder.setTitle("退出");                //添加标题builder.setMessage("你确定要离开吗?");     //添加MSG builder.setPositivebutton("确定",Toast.LENGTH_LONG).show();			}		});builder.create();builder.show();

效果是这样的:

在这里可以看出,在代码中我们先写的确定按钮,而最左边确是取消按钮,所以按钮的显示位置只与系统样式有关,而与代码中哪个提前写没有任何关系。

细心的同学可能会看到在DialogInterface.OnClickListener()的(DialogInterface dialog,int whichbutton) {}中有两个参数,第一个是当前的Dialog,第二个是表示当前点击的哪个按钮的which,在这里我们用不到witchbutton这个参数,因为我们直接在每个按钮的响应部位添加了响应代码,如果我们在整个类中添加实现了DialogInterface.OnClickListener()接口,那我们在做出点击响应时就应该判断当前是哪个按钮点击了,这三个按钮的ID分别对应:

button_POSITIVE  //确定按钮
button_NEGATIVE  //取消按钮
button_NEUTRAL    //中间按钮

上面说的那些东东的意思是这样的:
 

public class MainActivity extends Activity implements DialogInterface.OnClickListener { 	@OverrIDe	protected voID onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentVIEw(R.layout.activity_main);				AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);		builder.setPositivebutton("确定",this);		builder.setNegativebutton("取消",this);		builder.setNeutralbutton("中间BTN",this);		builder.create();		builder.show(); 	} 	@OverrIDe	public voID onClick(DialogInterface dialog,int which) {		// Todo auto-generated method stub		switch (which) {		case DialogInterface.button_POSITIVE:			//todo 确定按钮响应			break;		case DialogInterface.button_NEGATIVE:			//todo 取消按钮响应			break;		case DialogInterface.button_NEUTRAL:			//todo 中间按钮响应			break;		default:			break;		}	}}

这里在一个Activity中继承了DialogInterface.OnClickListener接口,我们在Builder.setpositivebutton的时候直接将监听函数设为this,所以在响应的时候要判断当前是哪个按钮过来的,这种方法很少使用,这里只是简单说一下DialogInterface.OnClickListener()中witch的含义及用法。
到这里,我们就讲完了,一个对话框应具有的几个基本属性,下面我们看看如果我想加个ImageVIEw,TextVIEw等等的布局要怎么办?下面就是自定义布局的部分了。

 

二、自定义布局

在AlertDialog中是允许我们传入我们自己的布局视图的,只需要将我们的VIEw通过:

Builder.setVIEw(vIEw);

设置进去就可以了,下面就是我们如何构建我们的视图的问题了,这里提供两种方法,静态构建和动态构建;

 

1、静态构建布局

首先,我们可以随意写一个Layout文件,比如下面这个:(custom_vIEw.xml)

<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"    androID:ID="@+ID/custom_vIEw_root"    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent"    androID:orIEntation="horizontal" >    <ImageVIEw         androID:layout_wIDth="wrap_content"        androID:layout_height="wrap_content"        androID:src="@drawable/dog"/>    <TextVIEw         androID:layout_wIDth="fill_parent"        androID:layout_height="wrap_content"        androID:textSize="20sp"        androID:text="小狗狗的照片"/>     </linearLayout>

视觉是这样的:

 

在布局写好之后,通过下面LayoutInflater就可以得到他的VIEw对象,然后通过Builder.setVIEw(vIEw)设置进Dialog:

LayoutInflater inflater = getLayoutInflater();VIEw vIEw = inflater.inflate(R.layout.custom_vIEw,null);builder.setVIEw(vIEw);

下面我们就完整的写下这段代码,给Dialog添加上ICON,标题,MSG和VIEw,按钮就不加了,因为代码太多,影响解读

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setIcon(R.drawable.ic_launcher);//添加ICONbuilder.setTitle("退出");                //添加标题builder.setMessage("你确定要离开吗?");     //添加MSG LayoutInflater inflater = getLayoutInflater();VIEw vIEw = inflater.inflate(R.layout.custom_vIEw,null); builder.setVIEw(vIEw);//添加自定义viewbuilder.create();builder.show();

出来的效果是这样的:

 

2、动态构建布局

现在我们要用代码来动态构建一个与上一个小狗狗相同的布局,有关动态创建布局

linearLayout root_lin=new linearLayout(MainActivity.this);  root_lin.setorIEntation(linearLayout.HORIZONTAL);  linearLayout.LayoutParams LP_FW = new linearLayout.LayoutParams(  linearLayout.LayoutParams.WRAP_CONTENT,linearLayout.LayoutParams.WRAP_CONTENT); root_lin.setLayoutParams(LP_FW); ImageVIEw imageVIEw = new ImageVIEw(MainActivity.this);imageVIEw.setimageResource(R.drawable.dog);imageVIEw.setLayoutParams(LP_FW);root_lin.addVIEw(imageVIEw); TextVIEw tv = new TextVIEw(MainActivity.this);  tv.setText("可爱的狗狗");  tv.setTextSize(20);  tv.setLayoutParams(LP_FW);  root_lin.addVIEw(tv); 

这里首先是创建一个线性的根布局root_lin,然后把新建的imageVIEw和Text控件都添加到里面,尤其要关注的是添加时的参数:

linearLayout.LayoutParams LP_FW = new linearLayout.LayoutParams(  linearLayout.LayoutParams.WRAP_CONTENT,linearLayout.LayoutParams.WRAP_CONTENT); 

这里为什么给imageVIEw和textvIEw设置布局参数时全部是使用linearLayout.LayoutParams构建的呢?这是因为,每个控件的布局参数都是依据父控件来构建的,如果父控件是线性布局那就用线性布局来构建参数,如果是相对布局那就要用下面这个:(这个是layout_wIDth="wrap_cotent",layou_heigt="wrap_content");
 

relativeLayout.LayoutParams RL_WW = new relativeLayout.LayoutParams(		relativeLayout.LayoutParams.WRAP_CONTENT,relativeLayout.LayoutParams.WRAP_CONTENT);

同理,如果父控件是帧布局(FrameLayout),那构建参数就要使用帧布局的参数来构建了:(这里构建的是:layout_wIDth="fill_parent",layout_hight = "wrap_content")

FrameLayout.LayoutParams FL_FW = new FrameLayout.LayoutParams(		FrameLayout.LayoutParams.FILL_PARENT,FrameLayout.LayoutParams.WRAP_CONTENT);

同样,在构建完布局,直接通过Builder.setVIEw(root_lin),将布局的根结点设置进去就可以了,完整的代码如下:

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setIcon(R.drawable.ic_launcher);//添加ICONbuilder.setTitle("退出");                //添加标题builder.setMessage("你确定要离开吗?");     //添加MSG linearLayout root_lin=new linearLayout(MainActivity.this);  root_lin.setorIEntation(linearLayout.HORIZONTAL);  linearLayout.LayoutParams LP_FW = new linearLayout.LayoutParams(  linearLayout.LayoutParams.WRAP_CONTENT,linearLayout.LayoutParams.WRAP_CONTENT); root_lin.setLayoutParams(LP_FW); ImageVIEw imageVIEw = new ImageVIEw(MainActivity.this);imageVIEw.setimageResource(R.drawable.dog);imageVIEw.setLayoutParams(LP_FW);root_lin.addVIEw(imageVIEw); TextVIEw tv = new TextVIEw(MainActivity.this);  tv.setText("可爱的狗狗");  tv.setTextSize(20);  tv.setLayoutParams(LP_FW);  root_lin.addVIEw(tv);  builder.setVIEw(root_lin);builder.create();builder.show();

效果与上一个图一样,就不贴了。

 

好了,这篇到这就结束了,下篇给大家说说有关ListVIEw的Dialog的东东。

总结

以上是内存溢出为你收集整理的详解Dialog(一)——基础元素构建全部内容,希望文章能够帮你解决详解Dialog(一)——基础元素构建所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1089436.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存