Adapter中用不了getWindowManager()
时间: 2023-06-25 11:05:10 浏览: 140
是的,因为 Adapter 本身不是一个 Activity 或 Fragment,它没有自己的窗口管理器。如果您需要在 Adapter 中使用窗口管理器,可以将其传递给 Adapter 的构造函数或方法,并在需要时使用它。或者您可以尝试使用 Context.getWindowManager() 方法来获取窗口管理器,因为 Context 是 Adapter 可以访问的父级对象。但是请注意,这可能会导致内存泄漏,因此最好将窗口管理器传递给 Adapter。
相关问题
android11 getWindowManager()路径
在Android 11 (API Level 30) 中,`getWindowManager()` 方法通常用于获取一个 `WindowManager` 对象,这个对象可以让你访问和操作应用程序窗口的管理功能,比如添加、修改或删除视图,以及处理屏幕相关的事件等。要获取它,你需要从Activity或者Fragment上下文中调用。这里是基本步骤:
```java
// 如果你在Activity中
WindowManager windowManager = ((Activity) this).getWindow().getDecorView().getWindowManager();
// 如果你在Fragment中
WindowManager windowManager = ((FragmentActivity) getActivity()).getWindow().getDecorView().getWindowManager();
```
这里的关键点是通过`this`或者`getActivity()`来获取到当前的Activity或Fragment实例,然后调用其`getWindow()`方法,进一步获取到`Window`对象,再通过`getDecorView().getWindowManager()`来获得`WindowManager`。
android11 怎么修改通过getWindowManager()获取到得分辨率
在Android 11 (API级别30)及更高版本中,系统引入了DisplayCutout的概念,这可能导致传统的通过`getWindowManager().getDefaultDisplay()`获取屏幕分辨率的方式有所变化。如果你想要获取更精确的分辨率信息,可以使用以下方法:
1. **DisplayMetrics**对象:首先,你需要创建一个`DisplayMetrics`实例并填充它。然后,你可以使用`WindowManagerGlobal`来获取正确的窗口管理器,并从`display`对象上获取分辨率。
```java
DisplayMetrics metrics = new DisplayMetrics();
WindowManagerGlobal.getWindowManagerService().getDefaultDisplay().getRealMetrics(metrics);
int widthPixels = metrics.widthPixels;
int heightPixels = metrics.heightPixels;
```
2. **Display.getDisplayInfo()**:直接调用`Display`对象的`getDisplayInfo()`方法,它会返回更详细的显示信息,包括分辨率、方向等。
```java
Display display = WindowManager.getDefaultDisplay();
DisplayInfo displayInfo = display.getDisplayInfo();
int width = displayInfo.width;
int height = displayInfo.height;
```
请注意,在Android 11之后,对于某些刘海屏和打孔屏设备,真正的物理分辨率可能不会等于`Display.getWidth()`和`Display.getHeight()`,因为系统可能会考虑缺口或切口的影响。所以建议使用上述方法获取更准确的信息。
阅读全文
相关推荐












