Android Studio 自定义对话框

Android Studio 自定义对话框

​ 代码主要包括四个部分:activity_main.xml用于存放界面控件,custom.xml用于显示界面信息,CommonDialog用于初始化自定义对话框中的控件以及响应的按钮点击事件,MainActivity用于实现自定义对话框的功能。

话不多说:直接上代码

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btn_dialog"
        android:text="弹出自定义对话框"/>

</LinearLayout>

在activity_main.xml布局文件中,主要=放置一个button按钮,用于显示弹出自定义对话框。

custom.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="16dp"
        android:orientation="vertical">

        <TextView
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:visibility="visible"
            android:textColor="#333333"
            android:textSize="18sp"
            android:layout_marginBottom="16dp"/>

        <TextView
            android:id="@+id/message"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:layout_marginLeft="20dp"
            android:textColor="#999999"
            android:textSize="14sp"
            android:layout_marginRight="20dp"/>

        <View
            android:layout_width="match_parent"
            android:layout_height="2dp"
            android:layout_marginTop="16dp"
            android:background="#E8E8E8"/>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:id="@+id/negtive"
                android:layout_marginLeft="10sp"
                android:paddingTop="16dp"
                android:paddingBottom="16dp"
                android:layout_weight="1"
                android:background="@null"
                android:gravity="center"
                android:singleLine="true"
                android:textColor="#999999"
                android:textSize="16sp"/>
            <View
                android:id="@+id/column_line"
                android:layout_width="2dp"
                android:layout_height="match_parent"
                android:background="#E8E8E8"/>
            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:id="@+id/positive"
                android:layout_marginRight="10sp"
                android:paddingTop="16dp"
                android:paddingBottom="16dp"
                android:layout_weight="1"
                android:background="@null"
                android:gravity="center"
                android:textColor="#38ADFF"
                android:textSize="16sp"/>
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

由于自定义对话框需要一个布局文件来显示界面信息因此需要创建一个custom.xml布局文件。里面放置2个TextView控件分别用于显示标题和提示信息。2个Button控件分别用于显示“取消”按钮和“确定”按钮。

CommonDialog:

package cn.itcast.customdialog;

import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;

public class CommonDialog extends AlertDialog {

    private TextView titleTv;
    private TextView messageTv;
    private Button negtiveBn,positiveBn;
    protected CommonDialog(Context context) {
        super(context);
    }
    private String message;    //显示的消息
    private String title;      //显示的标题
    private String positive;   //确认按钮
    private String negtive;    //取消按钮
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView(); //初始化界面控件
        initEvent(); //初始化界面控件的点击事件
    }


    //初始化界面控件
    private void initView() {
        negtiveBn = (Button)findViewById(R.id.negtive);
        positiveBn = findViewById(R.id.positive);
        titleTv = findViewById(R.id.title);
        messageTv = findViewById(R.id.message);
    }

    //初始化界面控件的显示数据
    private void refreshView(){
      //如果自定义了title和message的信息,则会在弹出框中显示
        if (!TextUtils.isEmpty(title)){
            titleTv.setText(title);      //设置标题控件的文本为自定义的title
            titleTv.setVisibility(View.VISIBLE);//标题控件设置为显示状态
        }else {
            titleTv.setVisibility(View.GONE);  //标题控件设置为隐藏状态
        }
        if (!TextUtils.isEmpty(message)){
            messageTv.setText(message);  //设置按钮的文本为自定义的message信息
        }
      //如果没有自定义按钮的文本,则默认显示“确定”和"取消”
        if (!TextUtils.isEmpty(positive)){
            positiveBn.setText(positive);
        }else {
            positiveBn.setText("确定");
        }
        if (!TextUtils.isEmpty(negtive)){
            negtiveBn.setText(negtive);
        }else {
            negtiveBn.setText("取消");
        }
    }


    //初始化界面控件的确定和取消监听器
    private void initEvent() {
        positiveBn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (onClickBottomListener != null){
                    onClickBottomListener.onPositiveClick();
                }
            }
        });
        negtiveBn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (onClickBottomListener!=null){
                    onClickBottomListener.onNegtiveClick();
                }
            }
        });
    }
    @Override
    public void show(){
        super.show();
        refreshView();
    }


    public interface onClickBottomListener{
        void onPositiveClick(); //实现 确定 按钮的点击事件的方法
        void onNegtiveClick();  //实现 取消 按钮的点击事件的方法
    }
    //设置 确定和取消 按钮的回调
    public CommonDialog.onClickBottomListener onClickBottomListener;
    public CommonDialog setOnClickBottomListener(CommonDialog.onClickBottomListener onClickBottomListener){
        this.onClickBottomListener = onClickBottomListener;
        return this;
    }

    public CommonDialog setMessage(String message) {
        this.message = message;
        return this;
    }
    public CommonDialog setPositive(String positive) {
        this.positive = positive;
        return this;
    }

    public CommonDialog setTitle(String title) {
        this.title = title;
        return this;
    }

    public CommonDialog setNegtive(String negtive) {
        this.negtive = negtive;
        return this;
    }
}

CommonDialog类继承AlerIDialog类,用于初始化自定义对话框中的控件以及响应按钮的点击事件。

MainActivity:

package cn.itcast.customdialog;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }
    private void init(){
        Button btn_dialog = findViewById(R.id.btn_dialog);
        btn_dialog.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final CommonDialog dialog = new CommonDialog(MainActivity.this);
                dialog.setMessage("你确定要删除的信息:");
                dialog.setNegtive("取消");
                dialog.setPositive("确定");
                dialog.setTitle("提示");
                dialog.setOnClickBottomListener(new CommonDialog.onClickBottomListener() {
                    @Override
                    public void onPositiveClick() {
                        dialog.dismiss();
                    }

                    @Override
                    public void onNegtiveClick() {
                        dialog.dismiss();
                    }
                });
                dialog.show();
            }
        });
    }
}

以上就是全部的代码,下面就自己运行一下吧!

  • 1
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值