Android开发 自定义Dialog开发

前言

  记录一些自己项目上自定义的Dialog

例子1:单选对话框

布局

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/public_shape_white_rectangle_corners10dp">

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:textColor="@color/public_color_181818"
        android:textSize="18sp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <View
        android:id="@+id/line1"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/public_color_f2f2f2"
        app:layout_constraintTop_toBottomOf="@id/title"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"/>

    <TextView
        android:id="@+id/content"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textSize="16sp"
        android:textColor="@color/public_color_666666"
        android:paddingTop="31dp"
        android:paddingBottom="31dp"
        android:paddingLeft="48dp"
        android:paddingRight="48dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/line1"/>

    <View
        android:id="@+id/line2"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/public_color_f2f2f2"
        app:layout_constraintTop_toBottomOf="@id/content"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"/>

    <TextView
        android:id="@+id/left"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:textColor="@color/public_color_111111"
        android:textSize="17sp"
        android:gravity="center"
        android:paddingTop="15dp"
        android:paddingBottom="15dp"
        android:background="@drawable/public_pressed_white_to_gray_left_radius"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@id/line3"
        app:layout_constraintTop_toBottomOf="@id/line2" />

    <View
        android:id="@+id/line3"
        android:layout_width="1dp"
        android:layout_height="0dp"
        android:background="@color/public_color_f2f2f2"
        app:layout_constraintTop_toTopOf="@id/left"
        app:layout_constraintBottom_toBottomOf="@id/left"
        app:layout_constraintLeft_toRightOf="@id/left"
        app:layout_constraintRight_toLeftOf="@id/right"/>

    <TextView
        android:id="@+id/right"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:textColor="@color/public_colorPrimary"
        android:textSize="17sp"
        android:gravity="center"
        android:paddingTop="15dp"
        android:paddingBottom="15dp"
        android:background="@drawable/public_pressed_white_to_gray_right_radius"
        app:layout_constraintLeft_toRightOf="@id/line3"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/line2" />

</androidx.constraintlayout.widget.ConstraintLayout>

代码

package net.yt.whale.common.views;

import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.text.SpannableString;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.WindowManager;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.StringRes;

import net.yt.whale.common.R;



/**
 * content: 单选对话框
 * time: 2020-3-16
 *
 * @author: zhouqiang
 */
public class SelectDialog extends Dialog {
    public TextView mTitle;
    public View mLine1;
    public TextView mContent;
    public View mLine2;
    public TextView mLeftButton;
    public View mLine3;
    public TextView mRightButton;
    private OnDialogListener mOnDialogListener = null;

    private SelectDialog(@NonNull Context context) {
        super(context);
    }

    private SelectDialog(@NonNull Context context, int themeResId) {
        super(context, themeResId);
    }

    public SelectDialog(@NonNull Context context, boolean cancelable, String title, String content, String leftButton, String rightButton) {
        super(context, cancelable, null);
        initView();
        mTitle.setText(title);
        mContent.setText(content);
        mLeftButton.setText(leftButton);
        mRightButton.setText(rightButton);
        initListener();

    }

    public SelectDialog(@NonNull Context context, boolean cancelable, @StringRes int title, @StringRes int content, @StringRes int leftButton, @StringRes int rightButton) {
        super(context, cancelable, null);
        initView();
        mTitle.setText(title);
        mContent.setText(content);
        mLeftButton.setText(leftButton);
        mRightButton.setText(rightButton);
        initListener();

    }

    public SelectDialog(@NonNull Context context, boolean cancelable, @StringRes int title, String content, @StringRes int leftButton, @StringRes int rightButton) {
        super(context, cancelable, null);
        initView();
        mTitle.setText(title);
        mContent.setText(content);
        mLeftButton.setText(leftButton);
        mRightButton.setText(rightButton);
        initListener();

    }

    public SelectDialog(@NonNull Context context, boolean cancelable, @StringRes int title, SpannableString content, @StringRes int leftButton, @StringRes int rightButton) {
        super(context, cancelable, null);
        initView();
        mTitle.setText(title);
        mContent.setText(content);
        mLeftButton.setText(leftButton);
        mRightButton.setText(rightButton);
        initListener();

    }

    public SelectDialog(@NonNull Context context, boolean cancelable, String title, String content, @StringRes int leftButton, @StringRes int rightButton) {
        super(context, cancelable, null);
        initView();
        mTitle.setText(title);
        mContent.setText(content);
        mLeftButton.setText(leftButton);
        mRightButton.setText(rightButton);
        initListener();

    }

    private void initView() {
        setContentView(R.layout.public_dialog_select);
        this.mTitle = (TextView) findViewById(R.id.title);
        this.mContent = (TextView) findViewById(R.id.content);
        this.mLeftButton = (TextView) findViewById(R.id.left);
        this.mRightButton = (TextView) findViewById(R.id.right);
        this.mLine1 = (View) findViewById(R.id.line1);
        this.mLine2 = (View) findViewById(R.id.line2);
        this.mLine3 = (View) findViewById(R.id.line3);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
        int width = (int) (displayMetrics.widthPixels * 0.90);
        WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
        layoutParams.width = width;
        getWindow().setAttributes(layoutParams);
        getWindow().getDecorView().setBackground(new ColorDrawable(Color.TRANSPARENT));

    }

    private void initListener() {
        mLeftButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mOnDialogListener != null) {
                    mOnDialogListener.onClickLeft(SelectDialog.this);
                }

            }
        });
        mRightButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mOnDialogListener != null) {
                    mOnDialogListener.onClickRight(SelectDialog.this);
                }

            }
        });
    }

    public void setOnDialogListener(OnDialogListener listener) {
        this.mOnDialogListener = listener;
    }

    public interface OnDialogListener {
        void onClickLeft(SelectDialog dialog);

        void onClickRight(SelectDialog dialog);
    }

    public TextView getTitle() {
        return mTitle;
    }

    public View getLine1() {
        return mLine1;
    }

    public TextView getContent() {
        return mContent;
    }

    public View getLine2() {
        return mLine2;
    }

    public TextView getLeftButton() {
        return mLeftButton;
    }

    public View getLine3() {
        return mLine3;
    }

    public TextView getRightButton() {
        return mRightButton;
    }
}

end

原文地址:https://www.cnblogs.com/guanxinjing/p/14154232.html