2021-10-19 使用popupwindow,

使用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会消失。

猜你喜欢

转载自blog.csdn.net/qq_45204129/article/details/120850274