目的:实现普通对话框和登录对话框
开发工具: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 } } } }
——运行效果图如下:




2万+

被折叠的 条评论
为什么被折叠?



