📜  Android中的PopView(1)

📅  最后修改于: 2023-12-03 15:29:22.674000             🧑  作者: Mango

Android中的PopView

在Android中使用PopView可以在一个浮动视图上显示信息,它通常用于弹出菜单、弹出对话框等场景。本文将介绍PopView的用法和实现方式。

用法
创建PopView

在XML布局文件中添加一个PopView视图,例如:

<com.example.myapp.PopView
    android:id="@+id/popView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/pop_background"
    android:padding="10dp"
    android:textSize="14sp"/>
显示PopView

通过调用PopView的show方法即可在屏幕上弹出PopView:

PopView popView = findViewById(R.id.popView);
popView.show(anchorView);

其中,anchorView是PopView的锚点视图,即弹出PopView的触发视图。

隐藏PopView

通过调用PopView的dismiss方法即可隐藏弹出的PopView:

PopView popView = findViewById(R.id.popView);
popView.dismiss();
实现方式

PopView主要使用了PopupWindow实现。PopupWindow可以创建一个浮动视图,并相对于指定视图进行位置调整。

实现PopupWindow

在PopView的构造方法中创建PopupWindow:

public PopView(Context context) {
    super(context);
    // 创建PopupWindow实例
    popupWindow = new PopupWindow(context);
    // 设置PopView的布局文件
    View contentView = LayoutInflater.from(context).inflate(R.layout.view_pop, null);
    setContentView(contentView);
    // 设置PopupWindow的宽和高
    popupWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
    popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
    // 设置PopupWindow的动画效果
    popupWindow.setAnimationStyle(R.style.pop_anim);
    // 设置PopupWindow的背景
    popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    // 设置PopupWindow的焦点
    popupWindow.setFocusable(true);
    popupWindow.setOutsideTouchable(true);
    // 显示PopupWindow时,可以获取到PopView的宽和高
    measureView(contentView);
    // 初始化PopView的其他属性
    // ...
}
显示PopView

在PopView的show方法中,使用PopupWindow的showAsDropDown方法来显示PopView:

public void show(View anchorView) {
    // 获取PopView的宽和高
    int width = getMeasuredWidth();
    int height = getMeasuredHeight();
    // 显示PopView
    popupWindow.showAsDropDown(anchorView, -width / 2, -anchorView.getHeight() - height);
}
初始化PopView其他属性

为了方便使用,PopView可以增加其他的属性,例如设置文本、设置图标等。在PopView中可以定义这些属性,并提供设置方法。

public void setText(CharSequence text) {
    TextView textView = findViewById(R.id.popTextView);
    textView.setText(text);
}

public void setIcon(Drawable icon) {
    ImageView imageView = findViewById(R.id.popImageView);
    imageView.setImageDrawable(icon);
}

// ...
总结

本文介绍了Android中的PopView的用法和实现方式,了解了PopupWindow的基本用法,也可以通过自定义PopView的属性,方便地实现自己的弹出菜单或对话框。