Adapter中用不了getWindowManager()
时间: 2023-06-25 11:05:10 浏览: 61
是的,因为 Adapter 本身不是一个 Activity 或 Fragment,它没有自己的窗口管理器。如果您需要在 Adapter 中使用窗口管理器,可以将其传递给 Adapter 的构造函数或方法,并在需要时使用它。或者您可以尝试使用 Context.getWindowManager() 方法来获取窗口管理器,因为 Context 是 Adapter 可以访问的父级对象。但是请注意,这可能会导致内存泄漏,因此最好将窗口管理器传递给 Adapter。
相关问题
display.getRealSize(size);不支持
如果`display.getRealSize(size)`方法不被支持,你可以尝试使用以下代码来获取设备的分辨率:
```java
Display display = getWindowManager().getDefaultDisplay();
int screenWidth, screenHeight;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
Point size = new Point();
display.getRealSize(size);
screenWidth = size.x;
screenHeight = size.y;
} else {
screenWidth = display.getWidth();
screenHeight = display.getHeight();
}
```
这段代码中,我们首先判断当前设备的系统版本是否大于等于Android 4.2(API level 17),如果是,则使用`getRealSize()`方法获取设备的真实分辨率,否则则使用旧的`getWidth()`和`getHeight()`方法获取设备的分辨率。这样可以兼容不同版本的Android系统。
Android App不跟随系统显示大小变化 的所有解决方法
以下是一些解决方法:
1. 在AndroidManifest.xml文件中添加以下代码:
```
<application
android:resizeableActivity="false"
...>
```
这将禁止应用程序随系统的显示大小变化而调整大小。
2. 使用固定单位(如dp)来定义布局元素的大小,而不是使用可变单位(如%、sp等)。
3. 使用ConstraintLayout布局,它可以自动适应不同的屏幕大小和分辨率。
4. 在代码中设置固定的屏幕大小,如下所示:
```
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int width = displayMetrics.widthPixels;
int height = displayMetrics.heightPixels;
getWindow().setLayout((int) (width * 0.8), (int) (height * 0.6));
```
这将在屏幕上显示一个固定的弹出窗口,而不管系统的显示大小如何变化。
5. 在Android 7.0及以上版本中,可以使用以下代码来禁止应用程序随系统的显示大小变化而调整大小:
```
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
setMultiWindowEnabled(false);
}
```
6. 如果您使用的是WebView来显示内容,可以使用以下代码来禁止缩放:
```
webView.getSettings().setSupportZoom(false);
webView.getSettings().setBuiltInZoomControls(false);
```
这将禁止用户对WebView进行缩放,从而确保内容的大小和布局不会因为用户的操作而改变。