AlertDialog用法续:在对话框显示View

有时候AlertDialog上的按钮,文本并不能满足我们程序的要求,比如说我们要设计个登录窗口,如果用上文的方法是没法插入EditText的,也就无法实现。其实AlertDialog是可以显示View的,这样的话,几乎任何元素都可以在AlertDialog中显示。
先看效果图:

下面我们用代码一步一步实现。
先讲思路,首先写个view的XML文件,把登录框的提示以用输入框写进去,然后把xml文件转成View类型,再用setView()即可。
下面是我写好的xml文件,文件名为login.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView android:text="用户名"
		  android:layout_width="fill_parent"
		  android:layout_height="wrap_content"
		  android:layout_marginLeft="10dip"
		  android:textSize="25px"
		/>
<EditText android:id="@+id/usr"
		  android:layout_width="fill_parent"
		  android:layout_height="fill_parent"
		  android:layout_margin="10dip"
/>
<TextView android:text="密码"
		  android:layout_width="fill_parent"
		  android:layout_height="wrap_content"
		  android:layout_marginLeft="10dip"
		  android:textSize="25px"
		/>
<EditText android:id="@+id/pwd"
		  android:layout_width="fill_parent"
		  android:layout_height="fill_parent"
		  android:layout_margin="10dip"
/>
</LinearLayout>

接下来是程序代码:


package com.pocketdigi.test;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button button=(Button)findViewById(R.id.b1);
		button.setOnClickListener(openDialog);
    }

    private OnClickListener openDialog=new OnClickListener(){
		@Override
		public void onClick(View v) {
			Login();//点击执行弹出登录对话框
		}


    };
	public void Login() {
		LayoutInflater factory=LayoutInflater.from(main.this);
		final View v1=factory.inflate(R.layout.login,null);
                         //R.layout.login与login.xml文件名对应,把login转化成View类型
		AlertDialog.Builder dialog=new AlertDialog.Builder(main.this);
		dialog.setTitle("用户登录");
		dialog.setView(v1);//设置使用View
                          //设置控件应该用v1.findViewById 否则出错
        dialog.setPositiveButton("登录", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {

                //登录代码
            }
        });
        dialog.setNegativeButton("取消",new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				
			}
		});
        dialog.show();
	}
}

© 2010, 冰冻鱼. 请尊重作者劳动成果,复制转载保留本站链接! 应用开发笔记