DialogUtil:
public class DialogUtil {
private Dialog dialog;
private View inflate;
public void showRightDialog(Context context) {
//自定义dialog显示布局
inflate = LayoutInflater.from(context).inflate(R.layout.dialog_right, null);
//自定义dialog显示风格
dialog = new Dialog(context, R.style.DialogRight);
//弹窗点击周围空白处弹出层自动消失弹窗消失(false时为点击周围空白处弹出层不自动消失)
dialog.setCanceledOnTouchOutside(true);
//将布局设置给Dialog
dialog.setContentView(inflate);
//获取当前Activity所在的窗体
Window window = dialog.getWindow();
WindowManager.LayoutParams wlp = window.getAttributes();
wlp.gravity = Gravity.RIGHT;
wlp.width = WindowManager.LayoutParams.WRAP_CONTENT;
wlp.height = WindowManager.LayoutParams.MATCH_PARENT;
// 前2 个flag设置dialog 显示到状态栏 第三个设置点击dialog以外的蒙层 不抢夺焦点 响应点击事件
//WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
wlp.flags = WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
window.setAttributes(wlp);
dialog.show();
}
//关闭dialog时调用
public void close() {
if (dialog != null) {
dialog.dismiss();
dialog = null;
}
}
}
dialog_right:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="@dimen/dp_245"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="@dimen/dp_245"
android:layout_height="match_parent"
android:background="@drawable/qiehuan_ertong"
android:orientation="vertical">
<RelativeLayout
android:layout_width="@dimen/dp_245"
android:layout_height="@dimen/dp_35">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="添加换尿布记录"
android:textColor="@color/white"
android:textSize="@dimen/dp_11" />
</RelativeLayout>
<RelativeLayout
android:layout_width="@dimen/dp_245"
android:layout_height="match_parent"
android:background="@drawable/border_top_white_5">
</RelativeLayout>
</LinearLayout>
</RelativeLayout>
风格type:
<!--位于右侧dialog的风格-->
<style name="DialogRight" parent="Theme.AppCompat.Light.NoActionBar">
<!-- 背景透明 -->
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<!-- 浮于Activity之上 -->
<item name="android:windowIsFloating">true</item>
<!-- 边框 -->
<item name="android:windowFrame">@null</item>
<!-- Dialog以外的区域模糊效果 -->
<item name="android:backgroundDimEnabled">true</item>
<!-- 无标题 -->
<item name="android:windowNoTitle">true</item>
<!-- 半透明 -->
<item name="android:windowIsTranslucent">true</item>
<!--点击dialog以外区域关闭弹窗-->
<item name="android:windowCloseOnTouchOutside">true</item>
<!-- Dialog进入及退出动画 -->
<item name="android:windowAnimationStyle">@style/ActionSheetDialogRight</item>
</style>
<!-- ActionSheet进出动画 -->
<style name="ActionSheetDialogRight" parent="@android:style/Animation.Dialog">
<item name="android:windowEnterAnimation">@anim/dialog_right_in</item>
<item name="android:windowExitAnimation">@anim/dialog_right_out</item>
</style>
dialog_right_in:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:interpolator="@android:anim/accelerate_interpolator"
android:fromXScale="0.0"
android:toXScale="1.0"
android:fromYScale="1.0"
android:toYScale="1.0"
android:pivotX="100%"
android:pivotY="0%"
android:fillAfter="false"
android:duration="300"/>
</set>
dialog_right_out:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:interpolator="@android:anim/accelerate_interpolator"
android:fromXScale="1.0"
android:toXScale="0.0"
android:fromYScale="1.0"
android:toYScale="1.0"
android:pivotX="100%"
android:pivotY="0%"
android:fillAfter="false"
android:duration="200"/>
</set>
activity或fragment中调用展示:
DialogUtil dialogUtil = new DialogUtil();
dialogUtil.showRightDialog(getActivity());
|