基本用法
首先定义弹窗的Layout文件
res/layout/popup_window.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#44000000"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="5dp">
<ImageView
android:id="@+id/popup_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/popup_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name" />
</LinearLayout>
显示
private PopupWindow pop;
private void showPopupWindowBasic() {
View rootView = getLayoutInflater().inflate(R.layout.popup_window, null);
mPopupText = (TextView) rootView.findViewById(R.id.popup_text);
mPopupText.setText("PopupTextBasic");
mPopupWindow = new PopupWindow(rootView,
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
mPopupWindow.showAsDropDown(mTextView);
}
上述代码中,在PopupWindow实例化时指定了显示的View,宽高均为WRAP_CONTENT
,也可以指定固定的尺寸(直接传入int
型的px
像素值即可)。
注意:这里通过Java代码设置的PopupWindow尺寸会直接覆盖Layout文件中顶层控件的尺寸。如果希望能直接在xml
中指定弹窗的固定尺寸,且修改尺寸时不需要修改Java代码,从而让代码更加规范,可以考虑对Layout
指定尺寸的同时,在其外层再嵌套一个FrameLayout
,Java代码中指定PopupWindow宽高均为WRAP_CONTENT
,即:
<FrameLayout
android: