<style name="my_dialog" parent="Theme.AppCompat.Dialog">
<item name="android:windowTranslucentStatus">true</item><!--透明状态栏并占用状态栏位置 -->
<item name="android:windowIsTranslucent">true</item><!-- 半透明 -->
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowCloseOnTouchOutside">true</item>
<item name="android:backgroundDimAmount">0.5</item><!-- 背景模糊的透明度 数值越小越透明-->
<item name="android:windowIsFloating">false</item><!-- 浮现在Activity之上 -->
<item name="windowNoTitle">true</item><!-- 无标题 -->
<!-- Dialog进入及退出动画 -->
<item name="android:windowAnimationStyle">@null
</item><!-- 进入和退出动画 -->
</style>
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
//设置Theme.Dialog View高度 在setContentView(id);之后添加以下代码
WindowManager m = getWindowManager();
Display d = m.getDefaultDisplay(); // 为获取屏幕宽、高
android.view.WindowManager.LayoutParams p = getWindow().getAttributes();
p.gravity = Gravity.BOTTOM;
p.height = (int) (d.getHeight() * 0.75); // 高度设置为屏幕的
p.width = (int) (d.getWidth() * 1); // 宽度设置为屏幕的
getWindow().setAttributes(p);
}
//解决华为手机半屏点击空白区域无法消失问题
@Override
public boolean onTouchEvent(MotionEvent event) {
LogUtils.e("CLP", "height:" + getWindow().getAttributes().height);
LogUtils.e("CLP", "event.getY():" + event.getY());
if (event.getY() < 0) {
finish();
}
return super.onTouchEvent(event);
}
<activity
android:name="MyActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait"
android:theme="@style/my_dialog"
android:windowSoftInputMode="stateHidden|adjustResize">
</activity>