【问题标题】:Can a View on a PopupWindow display a PopupMenu?PopupWindow 上的视图可以显示 PopupMenu 吗?
【发布时间】:2013-02-25 12:39:43
【问题描述】:

在 Android API11+ 中,我在 PopupWindow 中显示一个按钮。我想在单击按钮时显示一个 PopupMenu,而不关闭 PopupWindow。这可能吗? 我正在实例化和初始化 PopupMenu,但是当我调用 popupMenu.show() 我收到此错误(LogCat + 部分调用堆栈):

02-25 13:31:38.281:W/WindowManager(528):尝试添加带有子窗口令牌的窗口:android.os.BinderProxy@41316cc8。中止。 02-25 13:31:51.257: D/AndroidRuntime(7643): 关闭虚拟机 02-25 13:31:51.257: W/dalvikvm(7643): threadid=1: 线程以未捕获的异常退出 (group=0x40a711f8) 02-25 13:31:51.320:E/AndroidRuntime(7643):致命异常:主要 02-25 13:31:51.320: E/AndroidRuntime(7643): android.view.WindowManager$BadTokenException: 无法添加窗口——令牌 android.view.ViewRootImpl$W@419c3458 无效;您的活动正在运行吗? [堆栈的其余部分]

这是因为 PopupMenu 使用了另一个 PopupWindow 似乎不允许从 PopupWindow 中使用吗?当我将它连接到 Activity 内容视图中的按钮时,相同的代码运行正常。

提前致谢,

【问题讨论】:

    标签: android popupwindow popupmenu


    【解决方案1】:

    您不能从 PopupWindow 视图中锚定 PopupMenu,您可以做的是在行视图或顶级视图中定义或锚定视图,这是一个示例:

    main.xml:

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >
    
    
            <ImageView
                android:id="@+id/IVoptionsMenuInvis"
                android:layout_width="match_parent"
                android:layout_height="52dp"
                android:layout_gravity="center_horizontal"
                android:layout_weight="25"            
                android:paddingBottom="6dp"
                android:paddingTop="6dp">
    
    </FrameLayout>
    

    弹出窗口.xml:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/settingseditback"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >
    
    <ImageView
                android:id="@+id/IVoptionsMenu"
                android:layout_width="match_parent"
                android:layout_height="52dp"
                android:layout_gravity="center_horizontal"
                android:layout_weight="25"
                android:onClick="showSettingsPopup2"
                android:paddingBottom="6dp"
                android:paddingTop="6dp"
                android:src="@drawable/ic_actionbar_overflow_dark" />
    
    </LinearLayout>
    

    最后是你的 MainActivity.java:

    public class MainActivity extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.main);
        }
    .
    .
    .
        public void showSettingsPopup2(View v) {
            PopupMenu popup = new PopupMenu(MainActivity.this, findViewById(R.id.IVoptionsMenuInvis));
            popup.setOnMenuItemClickListener(this);
            popup.getMenuInflater().inflate(R.menu.main, popup.getMenu());
            popup.show();
        }
    }
    

    【讨论】:

    • 注意“我想在单击按钮时显示一个 PopupMenu,而不关闭 PopupWindow”。我尝试了您的解决方案,但它导致弹出窗口关闭。
    • 不,不是,我在我自己的应用程序中使用它,您可以查看我对自己问题的回答并查看我正在使用的代码here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    相关资源
    最近更新 更多