PopupWindow,顾名思义就是弹出窗口,下面简单介绍一下它的使用。
1.构造方法
常用的有这么几种
1.public PopupWindow()
2.public PopupWindow(Context context)
3.public PopupWindow(View contentView)
4.public PopupWindow(View contentView, int width, int height)
5.public PopupWindow(View contentView, int width, int height, boolean focusable)
1是个无参构造函数,不传入任何参数就可以构造出一个PopupWindow实例,然而这样构造出的实例没有任何布局。所以通过这种方法构造出的PopupWindow需要在后面调用它的setContentView()方法来设置布局,setWidth()和SetHeight()设置宽高
2与1的不同是传了context进去,后面仍然需要设置布局和宽高
3传入一个自己构造的布局转成的View进去,可以在PopupWindow上显示我们的布局,需要后main设置宽高
4在3的基础上设置了PopupWindow的宽高
5中的focusable是一个boolean类型的变量,设置成false表示成我们的PopupWindow不能获取到焦点,比如我们无法在其上的EditText上执行输入操作,所以一般我们设置成true
2.基本方法
1.
public void setBackgroundDrawable(Drawable background)
这个方法用来设置我们的PopupWindow的背景,如果不设置的话会导致我们的PopupWindow的外部点击事件无法使用
示例:popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));//透明背景
2.
public void setTouchable(boolean touchable)
设置是否可以点击
3.
public void setOutsideTouchable(boolean touchable)
设置是否可以在外部点击,即是否可以通过点击PopupWindow外部和返回按钮来隐藏PopupWindow
4.
public void dismiss()
隐藏PopupWindow
5.
public void showAtLocation(View parent, int gravity, int x, int y)
设置PopupWindow相对于父布局显示的位置,parent表示父布局,gravity表示位置,x和y表示偏移量
6.
public void showAsDropDown(View anchor)
public void showAsDropDown(View anchor, int xoff, int yoff)
public void showAsDropDown(View anchor, int xoff, int yoff, int gravity)
与上面那个不同的是,这个方法用于设置PopupWindow相对于某控件的显示位置
“`
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.haha);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
View popupWindowView = getLayoutInflater().inflate(R.layout.item_popupwindow,null);
final PopupWindow popupWindow = new PopupWindow(popupWindowView,200,200);
Button btnReturn = popupWindowView.findViewById(R.id.btn_return);
btnReturn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
popupWindow.dismiss();
}
});
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
popupWindow.setOutsideTouchable(false);
popupWindow.setTouchable(true);
popupWindow.showAsDropDown(view);
}
});
}
需要运用到此方法
public void setAnimationStyle(int animationStyle)
首先我们先在res文件夹下创建anim文件夹
在其中创建两个资源文件分别命名为context_menu_enter和context_menu_exit。
context_menu_enter
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_shortAnimTime"
android:fromXDelta="0"
android:fromYDelta="100%p"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:toXDelta="0"
android:toYDelta="0"/>
set>
context_menu_exit
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_shortAnimTime"
android:fromXDelta="0"
android:fromYDelta="0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:toXDelta="0"
android:toYDelta="100%p" />
set>
然后在style文件夹下
添加
最后
popupWindow.setAnimationStyle(R.style.contextMenuAnim);
看一下效果吧!
源码地址
源码地址