前言
在开发过程中经常想使用到圆角dialog,但是写过之后你会发现View是圆角了,但是Dialog矩形的背景还是仍然存在,我在一次帮人解决bug的过程中发现他写的类,此处记载实现方式。
主题
<style name="custom_dialog" 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>
布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="200dp"
android:layout_height="100dp"
android:background="@drawable/shape_corner"
android:gravity="center"
android:orientation="vertical">
<!--取消确认类型的dialog-->
<TextView
android:id="@+id/dialog_title_tv"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
tools:text="确认已收到货了吗?"
android:textColor="#666666"
android:layout_marginTop="10dp"/>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:layout_marginTop="10dp"
android:background="#D9D9D9" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal"
android:gravity="center">
<TextView
android:id="@+id/cancel_tv"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:textColor="#666666"
android:text="取消" />
<View
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:layout_marginTop="3dp"
android:layout_marginBottom="3dp"
android:background="#D9D9D9" />
<TextView
android:id="@+id/ok_tv"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:textColor="#cc0033"
android:text="确定" />
</LinearLayout>
</LinearLayout>
shape_corner
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffffff" />
<corners android:radius="15dp"/>
<stroke android:width="1dp" android:color="#ffffff" />
</shape>
Java代码
虽说自定义的代码他写的有点丑陋,封装性不强而且不严格是自定义的风格,但是话粗理不粗,能用就行,我在使用中肯定会改造。
public class CancelOrOkDialog extends Dialog {
public CancelOrOkDialog(Context context, String title) {
super(context, R.style.custom_dialog);
setContentView(R.layout.dialog_cancel_or_ok);
setCancelable(false);
TextView titleTv = (TextView) findViewById(R.id.dialog_title_tv);
titleTv.setText(title);
findViewById(R.id.cancel_tv).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View paramView) {
cancel();
}
});
findViewById(R.id.ok_tv).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View paramView) {
ok();
}
});
}
public void ok() {
}
}
网友评论