一.使用
一.使用 AlertDialog 创建弹出窗口步骤
前面说过,使用AlertDialog.Builder弹出窗口,一般,是下面几个步骤.
(一)创建AltrtDialog.Builder对象,该对象是AlterDialog的创建器
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
AlertDialog.Builder ( Context context) Constructor using a context for this builder and the | |||||||||||
AlertDialog.Builder ( Context context, int theme) Constructor using a context and theme for this builder and the |
(二)调用 AltrtDialog.Builder的方法为对话框设定图标,标题,内容等.
AlertDialog.Builder | setIcon ( Drawable icon) Set the |
AlertDialog.Builder | setIcon (int iconId) Set the resource id of the |
AlertDialog.Builder | setMessage ( CharSequence message) Set the message to display. |
AlertDialog.Builder | setMessage (int messageId) Set the message to display using the given resource id. |
AlertDialog.Builder | setOnKeyListener ( DialogInterface.OnKeyListener onKeyListener) Sets the callback that will be called if a key is dispatched to the dialog. |
AlertDialog.Builder | setPositiveButton (int textId, DialogInterface.OnClickListener listener) Set a listener to be invoked when the positive button of the dialog is pressed. |
AlertDialog.Builder | setPositiveButton ( CharSequence text, DialogInterface.OnClickListener listener) Set a listener to be invoked when the positive button of the dialog is pressed. |
AlertDialog.Builder | setTitle ( CharSequence title) Set the title displayed in the |
AlertDialog.Builder | setTitle (int titleId) Set the title using the given resource id. |
AlertDialog.Builder | setView ( View view) Set a custom view to be the contents of the Dialog. |
(三)调用 AltrtDialog.Builder的create()方法创建对话框
AlertDialog | create () Creates a |
(四)调用 AltrtDialog.Builder的show()方法显示对话框
AlertDialog | show () Creates a |
二.使用 AlertDialog.Builder加载自定义View
按照上面的步骤,使用的是默认的AlertDialog.Builder的窗口显示方式,如果想要显示内容丰富的弹出窗口,如里面有一些输入框之类的,如下面的图片所示,那么,就需要我们使用 AlertDialog.Builder.setView(View v)方法 加载自定义的View来作为窗口的显示方式了.
.
(一) 这里自定义的布局文件为 order.xml.
<?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:background="#ffffffff" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#ff000000" android:layout_marginTop="41dip" android:layout_marginBottom="41dip" android:layout_marginLeft="41dip" android:layout_marginRight="41dip" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="请输入欲预约图书的书号: " android:textSize="25dip" > </TextView> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="41dip" android:layout_marginRight="41dip" android:layout_marginBottom="24dip" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="预约书号: " android:textColor="#000000" android:textSize="25dip" > </TextView> <EditText android:id="@+id/orderEditSH" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="10009" android:textColor="#000000" android:textSize="25dip" > </EditText> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginLeft="41dip" android:layout_marginRight="41dip" android:layout_marginBottom="41dip" android:orientation="horizontal" > <Button android:id="@+id/startOrder_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="开始预约图书 " android:textSize="25dip" > </Button> <Button android:id="@+id/managerOrder_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="管理个人预约 " android:textSize="25dip" > </Button> </LinearLayout></LinearLayout>(二)下面,我们通过代码,加载这个自定义View
首先,获取需要加载的布局文件order.xml, 这里采用的是LayoutInflater,而不是我们平时使用的 findViewById( ). LayoutInflater的作用类似于 findViewById(),不同点是LayoutInflater是用来找layout文件夹下的xml布局文件,并且实例化!而 findViewById()是找具体某一个xml下的具体 widget控件(如:Button,TextView等)。 使用LayoutInflater来获取布局文件有三种方式:
第一种方式:
LayoutInflater inflater = LayoutInflater.from(this); View layout = inflater.inflate(R.layout.order, null);第二种方式:
LayoutInflater inflater = getLayoutInflater(); View layout = inflater.inflate(R.layout.order, null);第三种方式:
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); View layout = inflater.inflate(R.layout.main, null);
以前我们在Activity里面使用某个控件时,通常是直接使用findViewById()方法来获取这个控件,而如果我们要使用AlertDialog.Builder显示的自定义Layout里面的控件,需要注意要显示地用View对象调用findViewById()这个方法.如上面创建的是View layout对象.那么,需要使用如下访求获取EditText orderEditSH.
EditText orderBookNum=(EditText)layout.findViewById(R.id.orderEditSH);
使用AlertDialog.Builder弹出上面自定义窗口的完整代码如下:
LayoutInflater inflater = LayoutInflater.from(this); View view=inflater.inflate(R.layout.order,null); AlertDialog.Builder builder =new AlertDialog.Builder(Order.this); builder.setView(view); builder.setCancelable(false); builder.create().show(); Button startOrder_btn=(Button) layout.findViewById(R.id.startOrder_btn); Button managerOrder_btn=(Button) layout.findViewById(R.id.managerOrder_btn); EditText orderBookNum=(EditText)layout.findViewById(R.id.orderEditSH); startOrder_btn.setOnClickListener(new OnClickListener(){ public void onClick(View v) { //加上你要实现的代码 } }); managerOrder_btn.setOnClickListener(new OnClickListener(){ public void onClick(View v) {//加上你要实现的代码 } });