自定义Dialog

先看效果图,后给完整代码:

调用的TestDialog类:

package com.example.dialog;

import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;

public class TestDialog extends Dialog implements View.OnClickListener {
    private Context mContext;
    private TextView tv_cancel,tv_sure,tv_content,tv_title;
    private ConfirmListener confirmListener; //确定监听事件
    
    public TestDialog(Context context) {
        super(context,R.style.DialogTheme);
        mContext = context;
        setContentView(R.layout.dialog_layout);
        Window window = getWindow();
        WindowManager.LayoutParams params = window.getAttributes();
        params.gravity = Gravity.CENTER;
        window.setAttributes(params);

        initView();
    }

    private void initView(){
        tv_sure = (TextView)findViewById(R.id.dialog_sure);
        tv_title = (TextView)findViewById(R.id.dialog_title);
        tv_cancel = (TextView) findViewById(R.id.dialog_cancel);
        tv_content = (TextView)findViewById(R.id.dialog_content);
        tv_sure.setOnClickListener(this);
        tv_cancel.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.dialog_cancel:
                this.dismiss();
                break;
            case R.id.dialog_sure:
                confirmListener.onConfirmClick(); 
                this.dismiss();
                break;
        }
    }

    //设置确定事件的监听
    public void setConfirmListener(ConfirmListener confirmListener){
        this.confirmListener = confirmListener;
    }

    //确定事件的监听接口
    public interface ConfirmListener{
        void onConfirmClick();
    }

    //设置提示头部
    public void setTitle(String title){
        tv_title.setText(title);
    }

    //设置提示内容
    public void setMessage(String msg){
        tv_content.setText(msg);
    }


}

 styles.xml样式代码(直接复制到styles.xml即可):

<style name="DialogTheme" parent="@android:style/Theme.Dialog">
        <!-- 边框 -->
        <item name="android:windowFrame">@null</item>
        <!-- 是否浮现在activity之上 -->
        <item name="android:windowIsFloating">true</item>
        <!-- 半透明 -->
        <item name="android:windowIsTranslucent">true</item>
        <!-- 无标题 -->
        <item name="android:windowNoTitle">true</item>

        <item name="android:background">@android:color/transparent</item>
        <!-- 背景透明 -->
        <item name="android:windowBackground">@android:color/transparent</item>
        <!-- 模糊 -->
        <item name="android:backgroundDimEnabled">true</item>
        <!-- 遮罩层 -->
        <item name="android:backgroundDimAmount">0.5</item>
    </style>

 样式布局代码(dialog_layout.xml):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:layout_width="250dp"
        android:layout_height="140dp"
        android:background="@drawable/dialog_bg"
        android:orientation="vertical" >
        <TextView
            android:id="@+id/dialog_title"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:gravity="center"
            android:text="温馨提示"
            android:textColor="@color/colorPrimary"
            android:textSize="16dp" />

        <TextView
            android:id="@+id/dialog_content"
            android:gravity="center_horizontal"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:text="余额不足,请先充值"
            android:textColor="#777"
            android:textSize="15sp" />

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

        <LinearLayout
            android:gravity="center_vertical|center_horizontal"
            android:id="@+id/ll_btn"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/dialog_cancel"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="取消"
                android:textSize="15dp"
                android:textColor="#888"
                android:gravity="center_horizontal|center_vertical"/>

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

            <TextView
                android:id="@+id/dialog_sure"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:textColor="@color/colorPrimary"
                android:text="确定"
                android:textSize="15dp"
                android:gravity="center_horizontal|center_vertical"/>

        </LinearLayout>

    </LinearLayout>

</RelativeLayout>

 圆角效果代码(dialog_bg.xml):

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#fff" />
    <corners android:radius="5dp"/>
    <stroke android:color="#c0c0c0" android:width="1dp"/>
</shape>

 MainActivity代码:

package com.example.dialog;

import androidx.appcompat.app.AppCompatActivity;
import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private Button btnTest1;
    private TestDialog testDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView(){
        btnTest1 = (Button) findViewById(R.id.btnTest1);
        btnTest1.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.btnTest1:
                dialogSure();
                break;
        }
    }

    //调用Dialog
    private void dialogSure(){
        testDialog = new TestDialog(this);
        //设置为true时,点击返回或者空白处取消
        testDialog.setCancelable(false);
        testDialog.setMessage("您确定退出吗?"); //设置提示内容
        //确定事件处理
        testDialog.setConfirmListener(new TestDialog.ConfirmListener() {
            @Override
            public void onConfirmClick() {
                Toast.makeText(MainActivity.this, "退出成功", Toast.LENGTH_SHORT).show();
            }
        });
        testDialog.show(); //显示提示
    }
}

 如果疑问,请留言。。。

原文地址:https://www.cnblogs.com/Mr-Deng/p/11431249.html