【发布时间】:2017-12-31 05:11:11
【问题描述】:
更新 以下适用于 API 26,但它在 API 23 上崩溃。 有谁知道为什么会这样? 另外,有什么解决方法吗?
在我的 android 开发方面我真的需要你的帮助。 我想要做的是拥有 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();
}
});
}
});
}
}
如果这不可能,是否有解决方法? 基本上,我想要弹出窗口中的下拉选项。
感谢您的宝贵时间。
更新
这是崩溃日志
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