欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android自定义对话框

程序员文章站 2022-08-18 13:49:14
在Android程序中由于界面风格不同,一般会根据项目需求定义相应的对话框样式,废话不多说,先上效果图。先在activity_main布局文件中,放置一个按钮,用于弹出对话框

在Android程序中由于界面风格不同,一般会根据项目需求定义相应的对话框样式,废话不多说,先上效果图。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