android弹出窗口PopupWindow学习

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);
        }
    });

}

}
“`android弹出窗口PopupWindow学习_第1张图片

进阶 (为PopupWindow添加动画)

需要运用到此方法

public void setAnimationStyle(int animationStyle)

首先我们先在res文件夹下创建anim文件夹

android弹出窗口PopupWindow学习_第2张图片

在其中创建两个资源文件分别命名为context_menu_enter和context_menu_exit。
android弹出窗口PopupWindow学习_第3张图片

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文件夹下

android弹出窗口PopupWindow学习_第4张图片

添加

 

最后

popupWindow.setAnimationStyle(R.style.contextMenuAnim);

看一下效果吧!

android弹出窗口PopupWindow学习_第5张图片

源码地址
源码地址

你可能感兴趣的:(android弹出窗口PopupWindow学习)