使用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也是可以做的。不要拘泥于这一种方法。相关文章推荐
- 【起航计划 005】2015 起航计划 Android APIDemo的魔鬼步伐 04 App->Activity->Custom Dialog Dialog形式的Activity,Theme的使用,Shape的使用
- 主题为AppTheme.Light.Dialog的Activity拉取数据后,使用PullToRefreshListView显示不出来数据
- 在使用ActionBarActivity和AppCompatActivity时,对应的android v7包的版本
- 【起航计划 005】2015 起航计划 Android APIDemo的魔鬼步伐 04 App-&gt;Activity-&gt;Custom Dialog Dialog形式的Activity,Theme的使用,Shape的使用
- 对比Activity,记录AppCompatActivity在使用过程中出现过的问题
- 把Activity当成Dialog的时候不能全屏显示 (部分手机上)
- 使用appcompat_v7,定义activity全屏或无标题栏
- 使用appcompat_v7,定义activity全屏或无标题栏
- 安卓全屏设置实现(基于Activity与AppCompatActivity)
- 使用ActionBarActivity或者RxAppCompatActivity或者AppCompatActivity闪退的问题
- 继承与AppCompatActivity的Activity全屏踩的坑
- 使用 AppCompatActivity全屏(隐藏状态栏报错问题)
- 使用appcompat_v7,实现Dialog类型无标题栏和ActionBar的Activity
- Activity伪造Dialog的时候不能全屏显示
- Android设置全屏时出现unfortunately Activity has stopped,app不能运行
- Activity与AppCompatActivity全屏实现方法
- ApiDemos App/Activity/Custom Dialog
- ActivityGroup里面装的子Activity不能使用OnActivityResult()方法
- ifstrem流不能使用ios::app标示
- dialog style 的 activity 的全屏设置 (dialog适用)