Android 悬浮窗口之 PopupWindow

Overview

今天开发一个功能,是点击头像,用户可以进行对其选择要进行啥操作,但是我们需要使用悬浮窗来完成。一开始我使用的是AlertDialog来进行开发,但是出来的效果比较的丑陋,所以我就改用PopupWindow来进行操作,这个我以前就会操作,但是,一直都没有做笔记。

啥事PopupWindow

This class represents a popup window that can be used to display an arbitrary view. The popup window is a floating container that appears on top of the current activity.

我们该如何优雅的使用我们的PopupWindow呢?

按照国际惯例,我们先是看一下我们你的代码:

item_layout.xmlPopupWindow的布局页面

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical">

     <Button
         android:id="@+id/btn_xixi"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:padding="5dp"
         android:text="Hello"
         android:textSize="18sp" />

     <Button
         android:id="@+id/btn_hehe"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:padding="5dp"
         android:text="World"
         android:textSize="18sp" />
 </LinearLayout>

这个也是非常的简单,我们就是非常单纯的放了两个Button。
这里我是用最简单的方式,不使用任何动画操作
然后我们看一下我们的逻辑代码。

public class MainActivity extends AppCompatActivity {
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.textView = this.findViewById(R.id.main_TextView);
        this.textView.setOnClickListener(view -> initPopupWindow(view));
    }
    void initPopupWindow(View v) {
        //创建内容显示View
        View view = LayoutInflater.from(this).inflate(R.layout.item_popip, null, false);
        Button btn1 = view.findViewById(R.id.btn_xixi);
        Button btn2 = view.findViewById(R.id.btn_hehe);
        //构造一个PopupWindow,参数依次是加载的View,宽,高
        final PopupWindow popupWindow = new PopupWindow(view, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);
        //添加点击PopupWindow外部PopupWindow自动消失
        popupWindow.setTouchable(true);
        popupWindow.setTouchInterceptor(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                return false;
            }
        });
        //设置PopupWindow的显示位置,这里的参数分别是,参照View,X轴的偏移量,Y轴的偏移量
        popupWindow.showAsDropDown(v, 50, 0);
        //设置PopupWindow的View的点击效果
        btn1.setOnClickListener(view12 -> Toast.makeText(MainActivity.this, "这是一个", Toast.LENGTH_SHORT).show());
        btn2.setOnClickListener(view1 -> Toast.makeText(MainActivity.this, "PopupWindow", Toast.LENGTH_SHORT).show());
    }
}

这部分就是我们的全部代码了。
接着我们看一我们的实现它逻辑是啥:
首先,我们点击了一个TextView来进行PopupWindow悬浮窗的显示。
然后我们通过initPopupWindow来进行。
方法中的v是我们的显示参照物,方法中的View是显示的内容。
下面的操作在,代码中都有比较详细的注释,可以自己看一下。

猜你喜欢

转载自www.cnblogs.com/cao-1/p/12680483.html