调用PopupWindow的showAtLocation方法时,第一个参数总是很让人困惑
Paste_Image.pnga parent view to get the {@link android.view.View#getWindowToken()} token from
这个view是要能获取到window唯一标识的(也就是只要能获取到window 标示,view是什么控件都可以),应该是标示这个popupWindow添加到哪个window里面,对控制popupWindow出现位置没有影响。
这时候,如果作为一个封装出来的通用组件,这个参数是不是就可以随便传呢?
public void show(View parent){
showAtLocation(parent, Gravity.TOP | Gravity.RIGHT, 0, ViewUtil.dp2px(mContext, 485));
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
if(isShowing()){
dismiss();
}
}
}, SHOWING_TIME);
}
更无奈的是,调用的时候随便传就随便传吧,如果我是在一个最抽象的BaseFragmentActivity里面调用这个方法,这个Activity里面什么具体View都没有,我又该传什么呢?幸好,设计完善的android框架可以为我们提供Activity的content view,这个view是所有实际显示View的顶层:
View rootView = findViewById(android.R.id.content);
这时候把rootView传进去就可以了。
网友评论