Android 最简单易懂的自定义Dialog弹窗

好久没写博客了,也好久没有做过自定义弹出框了,然后发现博

客还给自定义Dialog弹窗留了个位置,今天就写一个最简单的自

定义的Dialog弹出框


老规矩,先上效果图:



1.先写style文件,写一些要用到的样式:

<style name="CustomDialogStyle" parent="@android:style/Theme.Dialog">
        <!-- 边框 -->
        <item name="android:windowFrame">@null</item>

        <!-- 背景透明 -->
        <item name="android:windowBackground">@color/transparent</item>

        <!-- 无标题 -->
        <item name="android:windowNoTitle">true</item>

        <!-- 是否浮现在activity之上 -->
        <item name="android:windowIsFloating">true</item>

        <!-- 半透明 -->
        <item name="android:windowIsTranslucent">false</item>

        <!-- 背景模糊 -->
        <item name="android:windowContentOverlay">@null</item>

        <!-- 允许对话框的背景变暗 -->
        <item name="android:backgroundDimEnabled">true</item>

        <!-- 字体颜色 -->
        <item name="android:textColor">@color/black</item>
        <item name="android:editTextColor">@color/black</item>
    </style>

2.写布局,这个布局可以自己随意定义的,所以是自定义(有些废

话了大哭)

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    android:background="#D4D4D4"
    android:layout_gravity="center"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:layout_gravity="center"
        android:layout_marginRight="30dp"
        android:layout_marginLeft="30dp"
        android:background="@drawable/rl_mine_job_certify"
        android:layout_width="match_parent"
        android:layout_height="200dp">

        <LinearLayout
            android:orientation="horizontal"
            android:id="@+id/ll_A"
            android:layout_width="match_parent"
            android:layout_height="150dp">
            <TextView
                android:id="@+id/tv_content"
                android:gravity="center"
                android:textSize="16sp"
                android:text="你还没有选择职业,请选择职业"
                android:layout_gravity="center"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
        </LinearLayout>

        <LinearLayout
            android:layout_below="@id/ll_A"
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <TextView
                android:id="@+id/tv_cancle"
                android:textSize="20sp"
                android:gravity="center"
                android:text="取消"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="match_parent" />
            <TextView
                android:id="@+id/tv_choose_job"
                android:textSize="20sp"
                android:gravity="center"
                android:textColor="#000"
                android:text="选择职业"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="match_parent" />
        </LinearLayout>


    </RelativeLayout>

</FrameLayout>

3.再来写自定义View的代码,实现Dialog

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.mobimtech.etp.mine.R;

/**
 * 自定义Dialog弹窗
 * Created by ManitoZhang on 2018-05-15.
 */
public class CertifyJobDialog extends Dialog{

    /**
     * 提示
     */
    protected TextView hintTv;

    /**
     * 左边按钮
     */
    protected TextView doubleLeftBtn;

    /**
     * 右边按钮
     */
    protected TextView doubleRightBtn;

    public CertifyJobDialog(Context context) {
        super(context, R.style.CustomDialogStyle);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setCancelable(false);  // 是否可以撤销
        setContentView(R.layout.dialog_certify_job);
        hintTv = (TextView) findViewById(R.id.tv_content);
        doubleLeftBtn = (TextView) findViewById(R.id.tv_cancle);
        doubleRightBtn = (TextView) findViewById(R.id.tv_choose_job);
    }

    /**
     * 设置右键文字和点击事件
     *
     * @param rightStr 文字
     * @param clickListener 点击事件
     */
    public void setRightButton(String rightStr, View.OnClickListener clickListener) {
        doubleRightBtn.setOnClickListener(clickListener);
        doubleRightBtn.setText(rightStr);
    }

    /**
     * 设置左键文字和点击事件
     *
     * @param leftStr 文字
     * @param clickListener 点击事件
     */
    public void setLeftButton(String leftStr, View.OnClickListener clickListener) {
        doubleLeftBtn.setOnClickListener(clickListener);
        doubleLeftBtn.setText(leftStr);
    }

    /**
     * 设置提示内容
     *
     * @param str 内容
     */
    public void setHintText(String str) {
        hintTv.setText(str);
        hintTv.setVisibility(View.VISIBLE);
    }

    /**
     * 给两个按钮 设置文字
     *
     * @param leftStr 左按钮文字
     * @param rightStr 右按钮文字
     */
    public void setBtnText(String leftStr, String rightStr) {
        doubleLeftBtn.setText(leftStr);
        doubleRightBtn.setText(rightStr);
    }
}

4.最后我们就可以用了,直接调用就行

final CertifyJobDialog dialog = new CertifyJobDialog(this);
        dialog.show();
        dialog.setHintText("你还未进行职业认证,请先完成认证!");
        dialog.setLeftButton("取消", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismiss();
            }
        });
        dialog.setRightButton("职业认证", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismiss();
                 }
        });


好了,biubiubiu,完成了!



猜你喜欢

转载自blog.csdn.net/qq1271396448/article/details/80324246