您的位置:首页 > 移动开发

使用V7包中的AppcompatActivity充当Dialog,Activity不能全屏

2016-12-26 17:29 501 查看

问题

很多时候,传统的Dialog并不能解决我们的问题,这个时候,我们就需要使用Activity来充当Dialog,以达到我们的目的。

普通的Activity配置Theme.AppCompat.Dialog 就长成这副德行。



在一些时候,是满足不了我们的需求的,比如我们在支付宝输入密码界面,我们需要支付页面是一个透明背景并且安全数字键盘是在底部,并且和左右两边没有留白,这个时候,我们就只能自定义主题了,我们在style中自定义一个透明的样式主题:

<style name="TranslucentTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="windowNoTitle">true</item><!--没有标题 -->
<item name="windowActionBar">false</item><!--没有ActionBar -->
<item name="android:windowFullscreen">true</item><!--全屏 -->
<item name="android:windowIsFloating">true</item><!-- 浮动在activity之上,左右两边不会填充屏幕 -->
<item name="android:windowIsTranslucent">true</item><!-- 半透明 -->
<item name="android:windowFrame">@null</item><!--无边框 -->
<item name="android:backgroundDimEnabled">true</item><!-- 设置背景模糊-->
<item name="android:windowBackground">@android:color/transparent</item><!-- 设置背景模糊-->
</style>


这个时候你给Activity配置这个样式的主题,你会发现是这个鸟样。



what the fuck? 这是什么玩意?两边的留白实在是太丑了,如果密码键盘设置成这个吊样,用户肯定会分分钟卸载。那么问题到底出在哪里呢?其实主要问题是出在

<item name="android:windowIsFloating">true</item>


这一句配置上,这句配置的意思是,我们密码键盘的这个布局是浮动在当前Activity上的,以达到冒充Dialog以假乱真的效果,肯定有人会说,你把密码键盘的布局设置成match_parent不就可以了? 实际上我是已经设置成了match_parent。 如果我们将该属性改成false,大部分手机都是可以适配的,但是适配并不代表完美,比如说状态栏的时间不见了,这种小问题没什么大的影响,没有强迫症的可以忽略。(强迫症患者请看下面的解决办法和截图,我测试过4.x,5.x 以及 6.x,状态栏都是和下图一样的,完全达到了以假乱真的效果)只有少数手机是存在问题的,这少部分手机的问题主要表现为:

属性设置成false, 密码键盘布局会和后面的Activity布局重叠,看不出Dialog的效果

属性设置成true, 密码键盘的布局依然在左右两边有留白。(我当时就是出现了第二种情况,我在pos机上调试的,具体pos机是什么机型我也说不准)

解决办法

在onCreate方法中添加如下代码,在setContentView方法之后

getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);


完美解决!解决办法只是针对上面出现问题的少部分机型,如果没有上面的问题,就不要改了,毕竟手动更改布局参数这个方法很蠢。-v-



提示

这种底部弹出密码框的情景并不是说只有Dialog才能做,popWindow也是可以做的。不要拘泥于这一种方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Activity Dialog
相关文章推荐