PopupWindow.getContentView()。getLayoutParams()在Android Marshmallow中返回一个不同的类

时间:2015-11-02 08:35:51

标签: android

我有一个如下代码。

....
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

有人在讨论此问题或有任何决议吗?

1 个答案:

答案 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();