现在很多App的提示对话框都非常有个性,系统的对话框样式说很落后都觉得是称赞了,下面开始自定义自己的Dialog,根据自己app的主题,设计出相应的Dialog的风格。

设置Dialog风格

 <style name="LoadDialog" parent="@android:style/Theme.Dialog">
       <!-- <item name="android:windowFrame">@null</item>--><!--边框  null就只会显示有颜色的控件和背景-->
        <item name="android:windowIsFloating">true</item><!--是否浮现在activity之上-->
        <item name="android:windowIsTranslucent">false</item><!--半透明-->
        <item name="android:windowNoTitle">true</item><!--无标题-->
        <item name="android:windowBackground">@color/transparent</item><!--背景透明-->
        <item name="android:backgroundDimEnabled">true</item><!--模糊-->
 </style>

这里的背景是指Dialog原本的背景,这里使用透明即可,使用我们自己的布局。透明色:#00000000

自定义布局

这里用一个简单的选择性别的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/bg_dialog"
    android:orientation="vertical">

    <TextView
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="25dp"
        android:text="性别"
        android:textSize="15sp" />

    <RelativeLayout
        android:id="@+id/layout_boy"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="40dp"
            android:text="男"
            android:textSize="15sp" />

    </RelativeLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginLeft="35dp"
        android:layout_marginRight="35dp"
        android:layout_marginTop="8dp"
        android:background="#f2f2f2" />

    <RelativeLayout
        android:id="@+id/layout_girl"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="25dp"
        android:layout_marginTop="10dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="40dp"
            android:text="女"
            android:textSize="15sp" />   

    </RelativeLayout>


</LinearLayout>

继承Dialog实现自定义的Dialog

public class SexDialog extends Dialog {


    @BindView(R.id.layout_boy)
    RelativeLayout layoutBoy;
    @BindView(R.id.layout_girl)
    RelativeLayout layoutGirl;

    public SexDialog(@NonNull Context context) {
        super(context, R.style.TransDialog);//这里使用我们自定义的Dialog风格
        View view = LayoutInflater.from(context).inflate(R.layout.dialog_sex, null);//加载自定义布局
        setContentView(view);
 		//setCanceledOnTouchOutside(false);  点击屏幕Dialog以外的地方是否消失
        ButterKnife.bind(this, view);
    }

    private onSexClick onSexClick;
	//通过接口监听事件
    public void setOnSexClick(onSexClick sexClick) {
        this.onSexClick = sexClick;
    }

    @OnClick({R.id.layout_boy, R.id.layout_girl})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.layout_boy:
                onSexClick.setOnsex("男");
                dismiss();
                break;
            case R.id.layout_girl:
                onSexClick.setOnsex("女");
                dismiss();
                break;
        }
    }

	//定义回传接口
    public interface onSexClick {
        void setOnsex(String sex);
    }
}


使用Dialog

SexDialog sexDialog = new SexDialog(this);
sexDialog.show();
sexDialog.setOnSexClick(new SexDialog.onSexClick() {
    @Override
    public void setOnsex(String sex) {
        //sex就是通过接口返回的返回数据
    }
});