前言
最近公司一个定制设备,一个学校查询机当30秒没有用户操作的时候弹出广告轮播,这里我选择的是AlertDialog用这个去做,结果出现了各种小插曲。
总结一下遇到的问题,以及解决问题的办法
显示沉浸式状态栏
要知道既然做了全屏弹窗广告,这个沉浸式状态栏必须得隐藏掉,这里网上的一些方法还是很管用的。
因为我自定的弹窗继承了AlertDialog,所以重写了它的onStart,在onStart方法中进行隐藏沉浸式状态栏的操作。
@Override
protected void onStart() {
super.onStart();
// 主要解决沉浸式状态栏的隐藏问题
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE
| View.SYSTEM_UI_FLAG_FULLSCREEN;
this.getWindow().getDecorView().setSystemUiVisibility(uiOptions);
}
}
广告图片与显示屏幕总有一些间距
一开始我以为是我广告图片设置的问题,当我确定设置了fitXY 它还不是全屏。
网上有很多人写的博客,给我各种误导,说真的就算是抄袭别人的东西,能不能自己先试一试呢?经过我自己不断的摸索 尝试,最后实现了全屏显示。
因为我自定义Dialog采用的是继承 AlertDialog 的方式
(1)首先在构造方法中设置style
public AdvertDialog(@NonNull Context context) {
// 设置 style
super(context,R.style.MyDialog);
}
(2)在onCreate方法中 对View设置宽高,以及将padding 设置为0
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setBackgroundDrawable(null);
//全屏的方法设置
WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
layoutParams.gravity= Gravity.BOTTOM;
layoutParams.width= ViewGroup.LayoutParams.MATCH_PARENT;
layoutParams.height= ViewGroup.LayoutParams.MATCH_PARENT;
getWindow().getDecorView().setPadding(0, 0, 0, 0);
getWindow().setAttributes(layoutParams);
getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
setContentView(R.layout.dialog_advert);
}
最后写上style
<!-- 全屏style -->
<style name="MyDialog" parent="@android:style/Theme.NoTitleBar.Fullscreen">
<!-- 是否有边框 -->
<item name="android:windowFrame">@null</item>
<!--是否在悬浮Activity之上 -->
<item name="android:windowIsFloating">true</item>
<!--标题 -->
<item name="android:windowNoTitle">true</item>
<!--阴影 -->
<item name="android:windowIsTranslucent">true</item><!--半透明-->
<!-- 点外边可以消失 -->
<item name="android:windowCloseOnTouchOutside">false</item>
</style>
如果你采用的也是 extends AlertDialog 继承AlertDialog方式 一定可以实现全屏显示! 亲测有效!!