浅谈Dialog样式Activty

来源:互联网 发布:驾照金手指软件下载 编辑:程序博客网 时间:2024/06/08 15:31

一、应用场景
当需要使用弹窗时,可以选择AlertDialog或者将Activity设置成Dialog样式两种方式,都可以实现功能,但出于代码的优化和复用性。Dialog样式的Activity能够更好的封装

 Intent in = new Intent(mContext,ShareActivity.class); in.putExtra("title","袭云踏雾 随云行远~"); in.putExtra("content", "我在云袭赚了好多积分,还有丰富的商品等我去领,推荐给你!\n" +                        "注册并填写我的邀请码:*******能立刻能兑现哦~\n");startActivity(in);

像这样直接传递要分享的内容就可以了
二、使用方式
1.首先需要自定义一个DialogStyle

    <style name="MyDialogStyle" parent="android:style/Theme.Dialog"><item name="android:windowBackground">@android:color/transparent</item>        背景透明<item name="android:windowFrame">@null</item>        边框<item  name="android:windowNoTitle">true</item>    无标题<item name="android:windowIsFloating">true</item>    浮在activity之上<item name="android:windowIsTranslucent">true</item><item name="android:windowContentOverlay">@null</item><item    动画样式name="android:windowAnimationStyle">@android:style/Animation.Dialog</item><item name="android:backgroundDimEnabled">true</item>   对话框外点击消失对话框<item name="android:windowCloseOnTouchOutside">true</item>    </style>

2.设置好样式后,在清单文件中配置这个样式

        <activity            android:name=".activity.ShareActivity"            android:screenOrientation="portrait"            android:theme="@style/ShareDialog"            ">

3.如果想设置弹进弹出的动画样式

    <style name="dialog_animation" parent="@android:style/Animation.Dialog">        <item name="@android:windowEnterAnimation">@anim/dialog_enter</item>        <item name="@android:windowExitAnimation">@anim/dialog_exit</item>    </style>

这样就能把activity当成dialog显示了,但是会发现弹出的dialog据屏幕有一定间距,这是因为我们继承了
Theme.Dialog而父类中实现了
<item name="listPreferredItemPaddingLeft">10dip</item>
<item name="listPreferredItemPaddingRight">10dip</item>
<item name="listPreferredItemPaddingStart">10dip</item>
<item name="listPreferredItemPaddingEnd">10dip</item>

所以造成了布局有边距。

解决方案呢,就是在代码中设置间距覆盖掉原来布局

WindowManager windowManager = getWindowManager();Display defaultDisplay = windowManager.getDefaultDisplay();WindowManager.LayoutParams params = getWindow().getAttributes();params.width=(int)(defaultDisplay.getWidth()*1);getWindow().setAttributes(params);

这样就能很好的实现功能。
ps:还有一点需要注意的是,这设置Activity布局的时候,不要让布局填满整个页面,这样就造成了点击dialog空白处 而不能把dialog隐藏掉

0 0