1、代码
public class TopNotifyDialog extends Dialog { private Context context; public TopNotifyDialog(@NonNull Context context) { this(context, R.style.top_notify_dialog_style); } public TopNotifyDialog(@NonNull Context context, int themeResId) { super(context, themeResId); this.context = context; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.top_notify_dialog_layout); setDialogTheme(); } //dialog属性设置 private void setDialogTheme() { //设置布局顶部显示 getWindow().setGravity(Gravity.TOP); //设置背景透明后设置该属性,可去除dialog边框 getWindow().setBackgroundDrawable(new ColorDrawable()); //设置横向铺满全屏 getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT); //设置dialog沉浸式效果 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); } else { getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); } } }
2、样式
<style name="top_notify_dialog_style" parent="Theme.AppCompat.Dialog"> <item name="android:windowIsTranslucent">true</item> <!--设置背景透明--> <item name="android:colorBackground">@android:color/transparent</item> <!--设置dialog浮与activity上面--> <item name="android:windowIsFloating">true</item> <!--去掉背景模糊效果--> <item name="android:backgroundDimEnabled">false</item> <item name="android:windowNoTitle">true</item> <!--去掉边框--> <item name="android:windowFrame">@null</item> <item name="android:windowEnterAnimation">@anim/slide_down_from_top</item> <item name="android:windowExitAnimation">@anim/slide_up_to_top</item> </style>
3、效果