我有一个如下代码。
....
PopupWindow popupWindow = new PopupWindow(someView);
final WindowManager.LayoutParams layoutParams = (WindowManager.LayoutParams) popupWindow.getContentView().getLayoutParams();
....
问题popupWindow.getContentView()。getLayoutParams返回不同的类,如下所示,因为我的类型转换失败了
在Marshamallow之前:android.View.WindowManager.LayoutParams
对于Marshmallow:android.widget.FrameLayout.layoutParams
有人在讨论此问题或有任何决议吗?
答案 0 :(得分:4)
没错。 M将所有内容包装在名为mDecorView
的FrameLayout中。如果您深入了解PopupWindow源代码,您会发现类似createDecorView(View contentView)
的内容。 mDecorView
的主要目的是处理事件调度和内容转换,这是M的新内容。
要抓住您的contentView,请尝试:
View container = (View) popupWindow.getContentView().getParent();
container.getLayoutParams();
请记住,如果您的contentView的背景不为null,则它将嵌套两次。这意味着:(View) popupWindow.getContentView().getParent().getParent();