如果安卓窗口管理器报告的物理尺寸不正确,可能是因为设备的屏幕密度设置不正确。下面是一个示例代码,用于正确获取安卓设备的物理尺寸:
import android.app.Activity;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Point;
import android.view.Display;
import android.view.WindowManager;
public class ScreenUtils {
/**
* 获取设备的物理尺寸
* @param activity 当前活动
* @return 屏幕尺寸
*/
public static Point getScreenSize(Activity activity) {
Point screenSize = new Point();
WindowManager windowManager = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
Display display = windowManager.getDefaultDisplay();
if (android.os.Build.VERSION.SDK_INT >= 17){
// 新版本系统可以直接使用getRealSize获取屏幕尺寸
display.getRealSize(screenSize);
} else if (android.os.Build.VERSION.SDK_INT >= 14) {
// 旧版本系统可以使用getRawHeight和getRawWidth获取屏幕尺寸
try {
screenSize.x = (Integer) Display.class.getMethod("getRawWidth").invoke(display);
screenSize.y = (Integer) Display.class.getMethod("getRawHeight").invoke(display);
} catch (Exception e) {
e.printStackTrace();
}
} else {
// 如果无法获取屏幕尺寸,则使用旧方法
screenSize.x = display.getWidth();
screenSize.y = display.getHeight();
}
// 如果是横屏状态,则交换屏幕宽度和高度
if(isScreenLandscape(activity)) {
int temp = screenSize.x;
screenSize.x = screenSize.y;
screenSize.y = temp;
}
return screenSize;
}
/**
* 判断屏幕是否处于横屏状态
* @param context 上下文
* @return 是否处于横屏状态
*/
public static boolean isScreenLandscape(Context context) {
return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
}
}
使用上述代码,可以获取到正确的物理屏幕尺寸,解决安卓窗口管理器报告的物理尺寸不正确的问题。
使用方法示例:
Point screenSize = ScreenUtils.getScreenSize(this);
int screenWidth = screenSize.x;
int screenHeight = screenSize.y;