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