当前位置: 移动技术网 > 移动技术>移动开发>Android > Android自定义对话框

Android自定义对话框

2020年07月27日  | 移动技术网移动技术  | 我要评论

在Android程序中由于界面风格不同,一般会根据项目需求定义相应的对话框样式,废话不多说,先上效果图。在这里插入图片描述

先在activity_main布局文件中,放置一个按钮,用于弹出对话框

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout 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”

tools:context=".MainActivity">

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

创建对话框的显示页面custom_dialog.xml显示界面信息

<?xml version="1.0" encoding="utf-8"?>

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

    <TextView
        android:id="@+id/tittle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textColor="#000"
        android:textSize="36sp"
        android:visibility="visible"/>

    <TextView
        android:id="@+id/msg"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:gravity="center"
        android:textSize="26sp"
        />

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginTop="25dp"

        android:background="#AFADAD" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/negative"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="36dp"
            android:layout_weight="1"
            android:background="@null"
            android:textSize="26sp" />

        <View
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:background="#AFADAD" />

        <Button
            android:id="@+id/positive"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginRight="36dp"
            android:layout_weight="1"
            android:background="@null"
            android:textSize="26sp"
            />
    </LinearLayout>
</LinearLayout>

创建CustomDiglog类继承自AlertDialog,初始化对话框控件以及点击事件

package com.fangkuai.customdialog;

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

public class CustomDialog extends AlertDialog {
private TextView tittle,msg; //标题,消息
private Button negative,positive; //取消和确认按钮
private String sTittle,sMsg,sNegative,sPositive;
protected CustomDialog(Context context) {
super(context);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.custom_dialog);
    initView();                                         //初始化控件
    initEvent();                                        //初始化控件的点击事件
}

private void initView(){
    tittle=findViewById(R.id.tittle);
    msg=findViewById(R.id.msg);
    negative=findViewById(R.id.negative);
    positive=findViewById(R.id.positive);
}
//初始化控件的显示数据
private void refreshView(){
    //如果自定义了标题和消息,则直接显示
    if (!TextUtils.isEmpty(sTittle)){
        tittle.setText(sTittle);
        tittle.setVisibility(View.VISIBLE);
    }else {
        tittle.setVisibility(View.GONE);        //隐藏标题
    }
    if (!TextUtils.isEmpty(sMsg)){
        msg.setText(sMsg);
    }
    //如果自定义了按钮文本,则直接显示,没有则显示“取消”、“确定”
    if (!TextUtils.isEmpty(sNegative)){
        negative.setText(sNegative);
    }else {
     negative.setText("取消");
    }
    if (!TextUtils.isEmpty(sPositive)){
        positive.setText(sPositive);
    }else {
        positive.setText("确定");
    }
}
//初始化按钮监听器
private void initEvent(){
    negative.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (onClickButtonListener!=null){
                onClickButtonListener.OnClickNeagtive();
            }
        }
    });
    positive.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onClickButtonListener.OnClickPositive();
        }
    });
}
public interface OnClickButtonListener{
    void OnClickNeagtive();         //实现“取消”点击事件的方法
    void OnClickPositive();         //实现“确定”点击事件的方法
}
//由于Dialog被创建后,要调用show()方法才会回调onCreate(),所以重写show()方法中调用refreshView()初始化控件数据
@Override
public void show() {
    super.show();
    refreshView();
}

//设置点击事件的回调
public OnClickButtonListener onClickButtonListener;
public CustomDialog setOnClickButtonListener(OnClickButtonListener onClickButtonListener){
    this.onClickButtonListener=onClickButtonListener;
    return this;
}

public CustomDialog setTittle(String Tittle) {
    this.sTittle = Tittle;
    return this;
}

public CustomDialog setMsg(String Msg) {
    this.sMsg = Msg;
    return this;
}

public CustomDialog setNegative(String Negative) {
    this.sNegative = Negative;
    return this;
}

public CustomDialog setPositive(String Positive) {
    this.sPositive = Positive;
    return this;
}

}

最后实现自定义对话框功能

package com.fangkuai.customdialog;

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

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private Button showDialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initView();
}

private void initView() {
    showDialog = (Button) findViewById(R.id.showDialog);

    showDialog.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.showDialog:
            final CustomDialog customDialog=new CustomDialog(this);
            customDialog.setTittle("提示");
            customDialog .setMsg("您确定删除该信息吗?");
            customDialog.setNegative("取消");
            customDialog.setPositive("确定");
            customDialog.setOnClickButtonListener(new CustomDialog.OnClickButtonListener() {
                        @Override
                        public void OnClickNeagtive() {
                            customDialog.dismiss();
                        }

                        @Override
                        public void OnClickPositive() {
                            customDialog.dismiss();
                        }
                    });
            customDialog.show();
            break;
    }
}

}

本文地址:https://blog.csdn.net/CSDn_lm1225/article/details/107564691

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网