PopupWindowFragment :使用Fragment来管理和生成PopupWindow,并且提供更好的定制化接口,比DialogFragment更加强大实用

PopupWindowFragment :使用Fragment来管理和生成PopupWindow,并且提供更好的定制化接口,比DialogFragment更加强大实用###


GitHub 地址:<a href="https://github.com/FeiMo1988/PopupWindowFragment">PopupWindowFragment</a>

Bug反馈地址: dingwei.chen1988@gmail.com
<strong>简介:</strong>

  • <p>PopupWindowFragment是为了在Fragment模型中更好,更方便的使用PopupWindow而存在的通用组件。跟DialogFragment类似,也是将一个新的Window对象纳入Fragment的状态管理。但是由于DialogFragment的功能及接口的局限性,已经很难满足更加复杂的界面要求。因此,使用接口更加丰富的PopupWindow代替Dialog的方式应运而生。</p>
  • 在PopupWindowFragment中,你除了可以轻松的指定Window切换时候的过场动画,还可以动态指定背景及布局外,在屏幕翻转的时候,PopupWindowFragment一样会记录翻转前的状态。

1.使用方法:

/**生成一个PopupWindowFragment
* @code david.demos.popupwindow.DemoPopupWindowFragment
*/
public class DemoPopupWindowFragment extends PopupWindowFragment {    
    @Override    
    protected View onCreateView(LayoutInflater inflater, Bundle savedInstanceState) {       
     return inflater.inflate(R.layout.demo_pop_window,null);   
    }
}

/**Activity中调用
* @code david.demos.popupwindow.Demos_PopupWindowFragment
*/
private PopupWindowFragment mPopupWindowFragment = new DemoPopupWindowFragment();
...
mPopupWindowFragment.show(getFragmentManager(),mPopTag);

调用PopupWindowFragment的方法就是如此简单。当然,这部分剪口很大一部分参考了DialogFragment的接口设计。调用上述方法后可以实现效果:

弹出一个PopupWindowFragment

2.过场动画:

当然PopupWindowFragment可以做的事情远不止此,PopupWindowFragment可以通过简单的request方法来定制你的过场动画:

/**Activity中调用
* @code david.demos.popupwindow.Demos_PopupWindowFragment
*/
private int[] mWindowAnims =  { 
       PopupWindowFragment.ANIM_ACTIVITY,        
       PopupWindowFragment.ANIM_TOAST,        
       PopupWindowFragment.ANIM_DIALOG,        
       PopupWindowFragment.ANIM_INPUTMETHOD
};
...
mPopupWindowFragment.requestPopupAnimationStyle(mWindowAnims[index]);
...

PopupWindowFragment将默认提供4个过场动画,分别是Activity动画,Toast动画,Dialog弹出动画,还有输入法动画,效果如下:

指定不同的过场动画


3.状态保存:

PopupWindowFragment拥有Fragment的保存特质,可以在Activity切换的时候依旧保持自己的状态:

Activity重新生成后,PopupWindowFragment依旧能保持之前的状态和属性

4.定制Gravity:

//demo/Demos_PopupWindowFragment.java

private int[] mGravitys =  {Gravity.BOTTOM,Gravity.CENTER,Gravity.TOP};
...
mPopupWindowFragment.requestGravity(mGravitys[i]);
....

效果:

通过Gravity指定位置

PopupWindowFragment提供了丰富的API和接口供各位开发者使用,如果疑问和Bug,请发送到作者邮箱。thx

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,523评论 25 708
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,550评论 0 17
  • 世间千百样好,都比不过夜有明月、人间有你。 01 我在开往苏州的火车上,寻常的晚上,人并不多。旅途疲惫,或闭目养神...
    寒烟衰草阅读 18,600评论 503 612
  • 节日有点多,冬至过冬,接着平安夜,圣诞节,再到元旦。每恰逢这种日子,我们的朋友圈也总免不了被各种庆祝刷屏,聊天框里...
    曦E阅读 567评论 0 0
  • 今天我和旁边门市的小路路妹妹玩了,那小妹妹特别可爱也特别听话
    付大康阅读 297评论 0 0