一、前言:
在开发中有时我们需要用到dialog,可是系统提供的dialog有时不能满足我们的要求,比如显示位置等,不够灵活,我们这时可以创建activity,使其风格和dialog一样。
二、实现
1. 1.创建样式
在res/values/styles.xml中
1<style name="DialogActivityStyle" parent="Theme.AppCompat.Light.Dialog"> 2 <!--设置dialog的背景--> 3 <item name="android:windowBackground">@android:color/transparent</item> 4 <!--设置Dialog的windowFrame框为无--> 5 <item name="android:windowFrame">@null</item> 6 <!--设置无标题--> 7 <item name="android:windowNoTitle">true</item> 8 <item name="android:title">@null</item> 9 <item name="windowNoTitle">true</item> 10 <item name="android:dialogTitle">@null</item> 11 <!--是否浮现在activity之上--> 12 <item name="android:windowIsFloating">true</item> 13 <!--是否半透明--> 14 <item name="android:windowIsTranslucent">true</item> 15 <!--设置窗口内容不覆盖--> 16 <item name="android:windowContentOverlay">@null</item> 17 <!--设置动画--> 18 <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> 19 <!--背景是否模糊显示--> 20 <item name="android:backgroundDimEnabled">true</item> 21 <!--点击外部是否退出-> 22 <item name="android:windowCloseOnTouchOutside">false</item> 23 </style>
然后将主题设置给相应的activity
在AndroidManifest中
1 <activity android:name=".DialogActivity" 2 android:theme="@style/DialogActivityStyle"/>
2. 设置圆角
在res/drawable文件夹下新建dialog_background.xml
1<?xml version="1.0" encoding="utf-8"?> 2<shape xmlns:android="http://schemas.android.com/apk/res/android" > 3 4 <solid android:color="@android:color/white" /> 5 6 <corners android:radius="10dp" /> 7 8 <padding 9 android:bottom="10dp" 10 android:left="10dp" 11 android:right="10dp" 12 android:top="10dp" /> 13 14</shape>
将此背景设置给所需要的圆角Activity最外层布局
1<?xml version="1.0" encoding="utf-8"?> 2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="200dp" 4 android:layout_height="200dp" 5 android:background="@drawable/dialog_background"> 6 7 <TextView 8 android:layout_width="match_parent" 9 android:layout_height="match_parent" 10 android:gravity="center" 11 android:text="我亦只有一个一生 不能慷慨赠与我不爱的人" /> 12 13</LinearLayout>
3. 在Activity中设置点击区域外消失属性;
1public class MyActivity extends Activity { 2 3@Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 //设置为true点击区域外消失 7 setFinishOnTouchOutside(true); 8 setContentView(R.layout.activity_layout); 9 } 10}
4. 效果

image
