从另一个PopupWindow中启动PopupMenu

时间:2014-07-15 23:13:33

标签: android

嗨,大家好我需要从另一个popupWindow里面的按钮启动PopupMenu,问题是当我把这个按钮放在活动的根视图里面时它没有任何错误,但是当我想从另一个popupWindow启动它时给出错误。这是我正在使用的代码:

这是我的PopupWindow:

public void initiateSettingsPopupWindow() {

    LayoutInflater settingsInflate = (LayoutInflater) MainActivity.this
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View settingsLayout = settingsInflate.inflate(R.layout.settings_popup,
            (ViewGroup) findViewById(R.id.fullscreen_content_controls));

    PopupWindow swindo = new PopupWindow(settingsLayout, LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT, true);
    swindo.showAtLocation(settingsLayout, Gravity.BOTTOM,
            LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    swindo.setAnimationStyle(R.style.PopupWindowAnimation);
    LinearLayout settingsLinear = (LinearLayout) settingsLayout
            .findViewById(R.id.settingseditback);
    settingsLinear.setOnClickListener(this);
}

这是我的PopupMenu代码:

public void showSettingsPopup(View v) {
    PopupMenu popup = new PopupMenu(getBaseContext(), v);
    popup.setOnMenuItemClickListener(this);
    popup.getMenuInflater().inflate(R.menu.main, popup.getMenu());
    popup.show();
}

这是我的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" >

<LinearLayout
    android:id="@+id/fullscreen_content_controls"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|center_horizontal"
    android:background="#ededed"
    android:orientation="vertical" >

    .
    .
    .
        <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="showSettingsPopup"
            android:paddingBottom="6dp"
            android:paddingTop="6dp"
            android:src="@drawable/ic_actionbar_overflow_dark" >
        </ImageView>
    </LinearLayout>
</LinearLayout>

有什么问题?这个问题已经被问到here但尚无答案。 我尝试了互联网上提供的所有可能方式,但还没有成功。

请给我一个解决方案,我真的陷入了这个错误。

2 个答案:

答案 0 :(得分:1)

最后,我通过一个小技巧找到了解决方案,如果有人需要,我会分享它。我的解决方案并不是那么好但它的工作没有任何视觉差异和问题,所以在某些情况下它可能有所帮助。 我在主xml文件中创建了一个按钮,与PopupWindow中的原始按钮完全相同,在PopupMenu代码中,我用隐藏按钮的引用替换了v,这是我的代码:

public void showSettingsPopup2(View v) {
    PopupMenu popup = new PopupMenu(getBaseContext(), findViewById(R.id.IVoptionsMenuInvis));
    popup.setOnMenuItemClickListener(this);
    popup.getMenuInflater().inflate(R.menu.main, popup.getMenu());
    popup.show();
}

答案 1 :(得分:0)

您无法将PopupMenu锚定到PopupWindow中的视图。您需要将其锚定到顶级窗口中的视图。