Dialog小结

简述:梳理关于Dialog的相关知识点:

  1. Dialog Style属性
  2. 将Activity作为Dialog
  3. 自定义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>

参考:

  1. 几种常见Dialog,直接拿去用!懒人必收
    NormalSelectDialog (github)

  2. 产品设计——四种常见的App弹窗设计

  3. Dialogs(官方文档)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值