Dialog 风格的 Activity全屏悬浮窗。

  最近领导让做一个UI项目的技术可行方案,要求按home键实现任意apk弹出一个launcher可选菜单。纠结一时,考虑到android本身状态机制,如果在任意apk运行界面弹出另一个可以选择的菜单,那当前apk中的当前activity必定运行onPause(),才能转到另一个acitvity去。这样就带来了一个问题,如果当前正在使用播放器播放电影,那么弹出框出来,必定让电影播放停止,这个用户体验太差了。所以,为了不影响上一个activity的正常运行,只能考虑到将“菜单”做成弹出框的形式,背景透明。思路确定后,就是实现。关键点就卡在了如果让dialog全屏显示,满足自定义布局。网上找了很多方法,最后终于找到个合适的。做了个小demo源码地址附在后面。

  实现步骤:

1.android 4.4全套源码,中PhoneWindowManager.java (frameworks\base\policy\src\com\android\internal\policy\impl)修改函数   

 public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags)

 中关于home键触发的代码,指定跳转到Dialog风格的acitity(要进入的packageName中的className)。例如:

private void testNewUIDemo(){

Intent mIntent = new Intent();
mIntent.setClassName("com.ott_pro.launcher", "com.ott_pro.launcher.TestDemoActivity");
mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(mIntent);   
}

2.Dialog style Activity ,就是是在Androidmanifest.XML中加入android:them=“@style/DialogStyle”,然后在style.xml 中


      <!-- Test demo  -->
      <style name="DialogStyle" parent="@android:style/Theme.Dialog">
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>

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

        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:backgroundDimAmount">0.3</item>
       <item name="android:windowAnimationStyle">@null</item>
    </style>

最后在DialogActivity的onCreat()加入

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialog);
getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
}就行了,注意getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);这句是一定要的,而且必须在setContentView(R.layout.activity_dialog);之后,布局自定义,后续就和编写activity一样。


总结完毕,第一次写技术总结文章。不容易。

源码下载地址:http://download.csdn.net/detail/yql44137228/7580689

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值