类似对话框的非全屏Activity

遇到一个需要非全屏的类似对话框的Activity的问题,照例现在网上搜一把,发现都是写一个style,写一个drawable设置背景色(一般是半透明)。但是写style的时候,是用dialog做为父类,比如:

 

<style name="Theme.MyDialog"  
parent="android:style/Theme.Dialog">
<item name="android:windowBackground">@drawable/dialog_bg</item>  
</style>

 

这样有一个问题,就是在点击对话框外部的时候会Activity消失(这也是应该的,因为Dialog就是如此)。怎么办?找了下Dialog Theme的源代码,注意到有如下片段:

<item name="android:windowFrame">@null</item>
<item name="android:windowTitleStyle">@android:style/DialogWindowTitle</item>
<item name="android:windowBackground">@android:drawable/panel_background</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="android:windowCloseOnTouchOutside">@bool/config_closeDialogWhenTouchOutside</item>
<item name="android:windowActionModeOverlay">true</item> 

 

  1. windowCloseOnTouchOutside这个属性即是点击外部是否关闭,设置为false即可。
  2. windowIsFloating这个属性其实就是Activity是否像对话框一样“飘”在另一个activity前面的关键属性。所以只要加上这个属性,不管这个style的parent是AppTheme还是其他什么的,都可以让Activity看起来“像”是一个对话框。
  3. 另外还有一个属性:windowNoTitle这个属性一定要设置为false,不要标题栏。如果不设为false,当windowIsFloating属性为true时,运行会报错。

我做的一个Demo如下,layout就是一个EditText,两个Button,这里就不贴源码了,效果如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值