このコードの作品は、アンドロイドのapi 16-22で動作するようですが、api 23では動作しません。単にオプション付きのpopupwindowを表示しようとしていますその中とpopupwindow以下の背景を暗く:
WindowPopUp windowPopUp =
new WindowPopUp(mContext, mPlaces.get(position), position, fromSearch);
windowPopUp.showAtLocation(v, Gravity.CENTER, 0, 0);
View parent = (View) windowPopUp.getContentView().getParent();
//dim the window in the background
WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams p = (WindowManager.LayoutParams) parent.getLayoutParams();
p.flags = WindowManager.LayoutParams.FLAG_DIM_BEHIND;
p.dimAmount = 0.4f;
wm.updateViewLayout(parent, p);
エラーでこのコードの結果を実行:
03-18 21:55:19.674 8814-8814/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.myapp, PID: 8814
java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.view.WindowManager$LayoutParams
at com.bemyapp.adapter.OuterPlaceAdapter$5.onLongClick(OuterPlaceAdapter.java:400)
at android.view.View.performLongClick(View.java:5237)
at android.view.View$CheckForLongPress.run(View.java:21121)
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)
間違っていますか?
私の知る限りでは、WindowManager.LayoutParams
はViewGroup.LayoutParams
を拡張し、私はparent.getLayoutParams()
を呼び出すとき、それはViewGroup.LayoutParams
を返しますので、classCastException
があってはなりません。
しかし、なぜapi 16-22では動作しますが、api 23では動作しませんか? – Simon
編集を追加しました。基本的には、変更された実装の詳細に依存していました。 –
これはひどいニュースです。私はすべてのポップアップウィンドウをDialogActivityに変更しなければならないと思う。 Popupwindowsは、これが正しい場合、良い設計アイデアではありません。 – Simon