概観
今日、アバターをクリックする機能が開発され、ユーザーはそれをどうするかを選択できますが、フローティングウィンドウを使用して完了する必要があります。初めは開発に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は表示されたコンテンツです。
次の操作では、コードにさらに詳細なコメントが含まれています。自分で確認できます。