现在很多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原本的背景,这里使用透明即可,使用我们自己的布局。透明色:
自定义布局
这里用一个简单的选择性别的布局
<?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就是通过接口返回的返回数据
}
});