android 之自定义 AlertDialog

    技术2022-05-20  32

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


    最新回复(0)