AlertDialog实现普通对话框和登录对话框——Android

目的:实现普通对话框和登录对话框

开发工具:Android Studio3.3.2 

实现过程

  • 第一步:在布局文件activity_main.xml中添加两个Button用于打开对话框,并将按钮设置为水平和竖直方向都居中
    1. 要让按钮在页面居中需要在父级元素添加 android:gravity="center"
    2. 如果希望按钮宽度自适应且在竖直方向排列,则需要在父级元素中添加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>
  •  第三步:这部分主要是处理打开对话框的点击事件
    1. 与用户界面程序中的组件建立关联,并注册按钮的监听器。
    2. 在点击触发的函数中判断用户点击的按钮,当点击的是“普通对话框”时:设置对话框的标题为“警告”并插入相应的图标和提示语,然后给对话框插入一个确定按钮;当点击的是“输入对话框”时:设置标题为“”用户登录“并插入相应的图标和文字,接着关联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();
            }
        }
    }
  • 第四步:处理对话框的按钮事件
    1. 普通对话框的“确定”按钮:当用户点击确定之后关闭对话框
    2. 输入对话框的“确定”按钮:当用户点击确定之后,从密码输入框获取输入值与“admin”做比较,当输入密码为“admin”,则会关闭对话框并弹出“登录成功”的提示,反之则弹出“密码错误”。
    3. 输入对话框中的“退出”按钮:当用户点击退出后,则会退出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
            }
        }
    }
}

 ——运行效果图如下:

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值