简述:梳理关于Dialog的相关知识点:
- Dialog Style属性
- 将Activity作为Dialog
- 自定义Dialog出现位置和宽高
1. Dialog Style属性
<style name="dialog" parent="@android:style/Theme.Dialog">
// Dialog的windowFrame框为无
<item name="android:windowFrame">@null</item>
// 是否浮现在activity之上
<item name="android:windowIsFloating">true</item>
// 是否半透明
<item name="android:windowIsTranslucent">true</item>
// 是否显示title
<item name="android:windowNoTitle">true</item>
// 设置dialog的背景
<item name="android:background">@android:color/transparent</item>
// 显示区域背景是否透明
<item name="android:windowBackground">@android:color/transparent</item>
// 用来控制dialog以外区域的灰度值。当为1时,黑色的;系统的默认值是0.5
<item name="android:backgroundDimAmount">0.5</item>
// 显示区域以外是否使用黑色半透明背景
<item name="android:backgroundDimEnabled">true</item>
</style>
2. 将Activity作为Dialog
2.1 常规:设置activity的xml属性
<activity android:theme="@android:style/Theme.Holo.Dialog">
2.2 在一个大屏上显示一个用Activity实现的Dialog:设置activity的xml属性
<activity android:theme="@android:style/Theme.Holo.DialogWhenLarge" >
3. 自定义Dialog出现位置和宽高
public Dialog create(Context context) {
AlertDialog dialog = new AlertDialog.Builder(context).create();
// dialog.setContentView(R.layout.dialog);
dialog.show();
// 1.获取窗体对象
Window window = dialog.getWindow();
// 2.设置View,等效于dialog.setContentView();
window.setContentView(R.layout.dialog);
// 3.获取设置属性的对象
WindowManager.LayoutParams lp= window.getAttributes();
// 4.弹窗的动画
lp.windowAnimations = R.style.dialogAnim;
// 5.Dialog位于Window的底部
lp.gravity = Gravity.BOTTOM;
// 6.设置Dialog的大小(等效于lp.height,lp.width)
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
//lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
//lp.width = WindowManager.LayoutParams.MATCH_PARENT;
// 7.将参数lp赋值给window(最终会调用View.requestLayout()重新布局)
window.setAttributes(lp);
return dialog;
}
动画
<style name="dialogAnim" parent="android:Animation">
<item name="@android:windowEnterAnimation">@anim/dialog_enter
</item>
<item name="@android:windowExitAnimation">@anim/dialog_exit
</item>
</style>
参考: