使用popupwindow,
AlterDialog使用时不可以指定固定的位置,当有这种需求需要指定位置设置类似弹窗的样式,可以使用popupwindow。
使用的时候的步骤:
① 创建popupwindow显示想要样式的布局文件xml,
② 在使用的activity中设置点击事件,进行加载显示popupwindow,
③ 加载popupwindow的布局文件
val popup_view = layoutInflater.inflate(R.layout.popupwindow_tool, null, false)
④ 创建popupwindow对象,构造方法可以使用以下几种:
//方法一:
public PopupWindow (Context context)
//方法二:
public PopupWindow(View contentView)
//方法三:
public PopupWindow(View contentView, int width, int height)
//方法四:
public PopupWindow(View contentView, int width, int height, boolean focusable)
这里使用方法四来创建,指定布局文件、设置宽高, 指定外界是否能点击。
val popupwindow = PopupWindow(popup_view, viewGroup.LayoutParams.WARP_CONTENT, viewGroup.LayoutParams.WARP_CONTENT, true)
注意:这里构造函数是设置了宽高的,其实在设置popup_view时已经设置了最外层的跟布局的宽高,现在创建对象时重新设置了,显示的时候是按照创建对象时设置的宽高来显示。
⑤ 设置显示的弹出窗的位置,方法有以下:
//相对某个控件的位置(正左下方),无偏移
showAsDropDown(View anchor):
//相对某个控件的位置,有偏移;xoff表示x轴的偏移,正值表示向左,负值表示向右;yoff表示相对y轴的偏移,正值是向下,负值是向上;
showAsDropDown(View anchor, int xoff, int yoff):
//相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移
showAtLocation(View parent, int gravity, int x, int y):
showAtLocation(View parent, int gravity, int x, int y)
⑥ 还可以设置popupwindow中的组件的点击事件,但是注意点击事件的组件的布局是popup_view,而不是在main.xml,
其他的函数:
//关闭弹出框
public void dismiss()
//是否有焦点
public void setFocusable(boolean focusable)
//是否可以点击
public void setTouchable(boolean touchable)
//外面是否可以点击,以下两个是必须连用
public void setBackgroundDrawable(Drawable background)
public void setOutsideTouchable(boolean touchable)
着重学习一下 setOutsideTouchable
在设置为true,点击外部的部分popupwindow会消失。