0%

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();
    }
}