PopupWindow 在创建的时候我们会选择PopupWindow出现的位置,以前用的时候都是创建的时候都是如下面这样的,生成的弹出框是宽充满,高设定个值,这样出来的PopupWindow 背景还是底部Activity的背景不是半透明灰色。
PopupWindow mPopupWindow = new PopupWindow(contentView,getScreenWidth(this),50dp,true);
mPopupWindow.setOutsideTouchable(true);
mPopupWindow.showAsDropDown(targetView);
下面来说下怎么弄成类似dialog的效果。
效果图
第一步
popwindow的布局文件里,最外层要match_parent,并且背景为透明灰#b000000,在第二层里的LinearLayout,写我们真正的布局。背景设成白色。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#b0000000"
android:orientation="horizontal">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="350dp"
android:background="@color/white"
android:orientation="horizontal">
..............
</LinearLayout>
</LinearLayout>
- 第二步
创建PopupWindow,如下代码:
h =targetView所在位置的底部距离顶部高度包含状态栏的高度,其实就是状态栏高度加上targetView的高度加上targetView上面组件的高度。
PopupWindow mPopupWindow = new PopupWindow(contentView,getScreenWidth(this),getScreenHigh(this)-h ,true);
mPopupWindow.setOutsideTouchable(true);
mPopupWindow.showAsDropDown(targetView);
注意这个h的高度算错的话效果就不一样了。如果getScreenHigh(this)-h 的结果偏大则PopupWindow会出现在targetView的上方一点。getScreenHigh(this)-h的结果算小了的话,PopupWindow会出现在targetView下但是最下面会有一部分背景不是透明灰背景。
- 第三步
我们点dialog的背景灰时会触发dismiss,我们想要PopupWindow也要这样的效果,那么就要写这个事件。
contentView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mPopupWindow.dismiss();
}
});
这样的话就可以达到PopupWindow有dialog背景灰的效果了。