AndroidフローティングウィンドウのPopupWindow

概観

今日、アバターをクリックする機能が開発され、ユーザーはそれをどうするかを選択できますが、フローティングウィンドウを使用して完了する必要があります。初めは開発にAlertDialogを使用していましたが、効果が比較的醜かったので、PopupWindowに切り替えて運用していましたが、以前は使用していたのですが、メモを取ったことがありません。

PopupWindowとは

このクラスは、任意のビューを表示するために使用できるポップアップウィンドウを表します。ポップアップウィンドウは、現在のアクティビティの上に表示されるフローティングコンテナーです。

PopupWindowをエレガントに使用するにはどうすればよいですか?

国際的な慣行によれば、まずコードを調べます。

item_layout.xml PopupWindowレイアウトページ

 <?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>

これも非常にシンプルで、2つのボタンを配置するだけです。
ここでは、アニメーション操作を行わない最も簡単な方法を使用
して、ロジックコードを確認します。

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