Android中PopupWindow的PopupMenu

问题描述 投票:0回答:1

更新以下适用于API 26,但它在API 23上崩溃。有谁知道为什么会这样?还有,任何解决方法?

我的android开发真的需要你的帮助。我想要做的是拥有PopupWindow。在弹出窗口内,有一个按钮,显示弹出菜单。

这在技术上是否可行?我有以下代码,但当我点击popupwindow中的按钮时它停止工作。该应用程序关闭了“popupMenu.show()”行

import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.PopupMenu;
import android.widget.RelativeLayout;

public class MainActivity extends AppCompatActivity {

    private Button mPopupWindowButton;
    private Button mButtonPopupMenuOnPopupWindow;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        mPopupWindowButton = (Button) findViewById(R.id.btn);
        mPopupWindowButton.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View view) {
                LayoutInflater inflater = (LayoutInflater)getApplicationContext().getSystemService(LAYOUT_INFLATER_SERVICE);
                View settingsView = inflater.inflate(R.layout.settings, null);
                PopupWindow popupWindow = new PopupWindow(settingsView, RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
                if(Build.VERSION.SDK_INT >=21){
                    popupWindow.setElevation(5.0f);
                }

                LinearLayout mainLayout = (LinearLayout)findViewById(R.id.mainActivityLayout);

                popupWindow.showAtLocation(mainLayout, Gravity.BOTTOM,0,0);

                mButtonPopupMenuOnPopupWindow = settingsView.findViewById(R.id.btnPopupMenuOnPopupWindow);
                mButtonPopupMenuOnPopupWindow.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        PopupMenu popupMenu = new PopupMenu(MainActivity.this, view);
                        popupMenu.inflate(R.menu.age_group);
                        popupMenu.show();
                    }
                });

            }
        });


    }
}

如果这是不可能的,是否有解决方法?基本上,我想在popupwindow中有一个下拉选项。

谢谢你的时间。

UPDATE

这是崩溃日志

12-31 21:09:49.600 3960-3960/com.codingdaddy.popupwindowexample E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                  Process: com.codingdaddy.popupwindowexample, PID: 3960
                                                                                  android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRootImpl$W@4f880f0 is not valid; is your activity running?
                                                                                      at android.view.ViewRootImpl.setView(ViewRootImpl.java:567)
                                                                                      at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:310)
                                                                                      at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
                                                                                      at android.widget.PopupWindow.invokePopup(PopupWindow.java:1258)
                                                                                      at android.widget.PopupWindow.showAsDropDown(PopupWindow.java:1110)
                                                                                      at android.widget.ListPopupWindow.show(ListPopupWindow.java:658)
                                                                                      at com.android.internal.view.menu.MenuPopupHelper.tryShow(MenuPopupHelper.java:170)
                                                                                      at com.android.internal.view.menu.MenuPopupHelper.show(MenuPopupHelper.java:124)
                                                                                      at android.widget.PopupMenu.show(PopupMenu.java:218)
                                                                                      at com.codingdaddy.popupwindowexample.MainActivity$1$1.onClick(MainActivity.java:50)
                                                                                      at android.view.View.performClick(View.java:5198)
                                                                                      at android.view.View$PerformClick.run(View.java:21147)
                                                                                      at android.os.Handler.handleCallback(Handler.java:739)
                                                                                      at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                      at android.os.Looper.loop(Looper.java:148)
                                                                                      at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                                      at java.lang.reflect.Method.invoke(Native Method)
                                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
android popupmenu android-popupwindow
1个回答
0
投票

是的,有可能请修改您的以下点击监听器,如下所示: - 而不是getBaseContext使用Activity.this

 mButtonPopupMenuOnPopupWindow = settingsView.findViewById(R.id.btnPopupMenuOnPopupWindow);
                mButtonPopupMenuOnPopupWindow.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        PopupMenu popupMenu = new PopupMenu(MainActivity.this, view);
                        popupMenu.inflate(R.menu.menu);
                        popupMenu.show();
                    }
                });

主要布局文件

<LinearLayout android:id="@+id/main_layout"
              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:gravity="center_horizontal"
              android:orientation="vertical"
              android:paddingBottom="@dimen/activity_vertical_margin"
              android:paddingLeft="@dimen/activity_horizontal_margin"
              android:paddingRight="@dimen/activity_horizontal_margin"
              android:paddingTop="@dimen/activity_vertical_margin"
              tools:context="lib4.com.stackoverflow.SimpleActivity">
    <Button android:id="@+id/btn" android:layout_width="wrap_content"
            android:layout_height="wrap_content"
    android:text="TAP"/>

</LinearLayout>

设置布局文件

<LinearLayout android:id="@+id/main_layout"
              xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:gravity="center_horizontal"
              android:orientation="vertical"
              android:paddingBottom="@dimen/activity_vertical_margin"
              android:paddingLeft="@dimen/activity_horizontal_margin"
              android:paddingRight="@dimen/activity_horizontal_margin"
              android:paddingTop="@dimen/activity_vertical_margin">
    <Button android:id="@+id/btnPopupMenuOnPopupWindow" android:layout_width="wrap_content"
            android:layout_height="wrap_content"
    android:text="button"/>

</LinearLayout>

菜单资源文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/about"

          android:title="About"/>
    <item android:id="@+id/help"
          android:title="Help"/>
</menu>

如果有效,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.