目的:实现普通对话框和登录对话框
开发工具:Android Studio3.3.2
实现过程:
- 第一步:在布局文件activity_main.xml中添加两个Button用于打开对话框,并将按钮设置为水平和竖直方向都居中
- 要让按钮在页面居中需要在父级元素添加 android:gravity="center"
- 如果希望按钮宽度自适应且在竖直方向排列,则需要在父级元素中添加android:orientation="vertical"
<?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:gravity="center" android:orientation="vertical"> <Button android:id="@+id/button1" android:layout_width="150dp" android:layout_height="wrap_content" android:text="打开普通对话框" /> <Button android:id="@+id/button2" android:layout_width="150dp" android:layout_height="wrap_content" android:text="打开输入对话框" /> </LinearLayout>
- 第二步:创建登录对话框的界面布局文件login.xml,在布局文件中添加用户名和密码的输入框以及相关的提示。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent"> <TextView android:id="@+id/user" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="用户名" android:textSize="18sp"/> <EditText android:id="@+id/userEdit" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="18sp"/> <TextView android:id="@+id/password" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="密码" android:textSize="18sp"/> <EditText android:id="@+id/paswdEdit" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="18sp"/> </LinearLayout>
- 第三步:这部分主要是处理打开对话框的点击事件
- 与用户界面程序中的组件建立关联,并注册按钮的监听器。
- 在点击触发的函数中判断用户点击的按钮,当点击的是“普通对话框”时:设置对话框的标题为“警告”并插入相应的图标和提示语,然后给对话框插入一个确定按钮;当点击的是“输入对话框”时:设置标题为“”用户登录“并插入相应的图标和文字,接着关联longin.xml中的组件,在对话框中显示用户名和密码的输入框,最后给对话框插入“确定”和“退出”的按钮。
Button btn1,btn2; ProgressDialog mydialog; LinearLayout login; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn1=(Button)findViewById(R.id.button1); btn2 = (Button)findViewById(R.id.button2); btn1.setOnClickListener(new mClick()); btn2.setOnClickListener(new mClick()); } class mClick implements View.OnClickListener { AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this); public void onClick(View v) { if (v == btn1) { //设置对话框的标题 dialog.setTitle("警告"); //设置对话框的图标 dialog.setIcon(R.drawable.warn); //设置对话框的内容 dialog.setMessage("本想操作可能导致信息泄露!"); //设置对话框“确定”按钮 dialog.setPositiveButton("确定", new okClick()); //创建对象框 dialog.show(); } else if (v == btn2) { login = (LinearLayout) getLayoutInflater().inflate(R.layout.login, null); //从另外的布局关联组件 dialog.setTitle("用户登录").setMessage("请输入用户名和密码").setView(login); dialog.setPositiveButton("确定", new loginClick()); dialog.setNegativeButton("退出", new exitClick()); dialog.setIcon(R.drawable.qq); dialog.create(); dialog.show(); } } }
- 第四步:处理对话框的按钮事件
- 普通对话框的“确定”按钮:当用户点击确定之后关闭对话框
- 输入对话框的“确定”按钮:当用户点击确定之后,从密码输入框获取输入值与“admin”做比较,当输入密码为“admin”,则会关闭对话框并弹出“登录成功”的提示,反之则弹出“密码错误”。
- 输入对话框中的“退出”按钮:当用户点击退出后,则会退出APP
//普通对话框的确定 class okClick implements DialogInterface.OnClickListener{ public void onClick(DialogInterface dialog, int which){ dialog.cancel(); } } //输入对话框的“确定”按钮 class loginClick implements DialogInterface.OnClickListener{ EditText txt; public void onClick(DialogInterface dialog,int which){ txt = (EditText)login.findViewById(R.id.paswdEdit); //从密码框中取值比较 if((txt.getText().toString()).equals("admin")) Toast.makeText(getApplicationContext(),"登录成功",Toast.LENGTH_SHORT).show(); else Toast.makeText(getApplicationContext(),"密码错误",Toast.LENGTH_SHORT).show(); dialog.dismiss(); } } //输入对话框的“退出”按钮事件 class exitClick implements DialogInterface.OnClickListener{ public void onClick(DialogInterface dialog,int which){ MainActivity.this.finish(); //点击退出按钮退出MainActivity } }
- Java文件中完整代码如下
import android.app.ProgressDialog; import android.content.DialogInterface; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Toast;public class MainActivity extends AppCompatActivity { Button btn1,btn2; ProgressDialog mydialog; LinearLayout login; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn1=(Button)findViewById(R.id.button1); btn2 = (Button)findViewById(R.id.button2); btn1.setOnClickListener(new mClick()); btn2.setOnClickListener(new mClick()); } class mClick implements View.OnClickListener { AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this); public void onClick(View v) { if (v == btn1) { //设置对话框的标题 dialog.setTitle("警告"); //设置对话框的图标 dialog.setIcon(R.drawable.warn); //设置对话框的内容 dialog.setMessage("本想操作可能导致信息泄露!"); //设置对话框“确定”按钮 dialog.setPositiveButton("确定", new okClick()); //创建对象框 dialog.show(); } else if (v == btn2) { login = (LinearLayout) getLayoutInflater().inflate(R.layout.login, null); //从另外的布局关联组件 dialog.setTitle("用户登录").setMessage("请输入用户名和密码").setView(login); dialog.setPositiveButton("确定", new loginClick()); dialog.setNegativeButton("退出", new exitClick()); dialog.setIcon(R.drawable.qq); dialog.create(); dialog.show(); } } //普通对话框的确定 class okClick implements DialogInterface.OnClickListener{ public void onClick(DialogInterface dialog, int which){ dialog.cancel(); } } //输入对话框的“确定”按钮 class loginClick implements DialogInterface.OnClickListener{ EditText txt; public void onClick(DialogInterface dialog,int which){ txt = (EditText)login.findViewById(R.id.paswdEdit); //从密码框中取值比较 if((txt.getText().toString()).equals("admin")) Toast.makeText(getApplicationContext(),"登录成功",Toast.LENGTH_SHORT).show(); else Toast.makeText(getApplicationContext(),"密码错误",Toast.LENGTH_SHORT).show(); dialog.dismiss(); } } //输入对话框的“退出”按钮事件 class exitClick implements DialogInterface.OnClickListener{ public void onClick(DialogInterface dialog,int which){ MainActivity.this.finish(); //点击退出按钮退出MainActivity } } } }
——运行效果图如下: