【问题标题】:Android how to force screen density by defaultAndroid如何默认强制屏幕密度
【发布时间】:2018-09-11 09:34:07
【问题描述】:

通过“设置/显示”放大屏幕,我发现我的 Galaxy s9+ 的屏幕密度从 430 dpi 变为 600 dpi 以上。

这会使布局和图像从 xxhdpi 更改为 xxxhdpi。

如果我有一个固定大小为 16dp 的 textView,

在 xxhdpi 中是 16 * 3 px,在 xxxhdpi 中将变为 16 * 4 px。

这使我的布局(当然是来自editTexts 或textViews 的文本)变得更大,因为设备的实际密度永远不会改变,而谷歌(或制造商samsumg)为此功能而设计的。

但我不希望这种情况发生在我的应用中。

我试图通过这样做来修复它;

Configuration configuration = activity.getResources().getConfiguration();

if (configuration.densityDpi != 430) { 
                configuration.densityDpi = 430;    
}

DisplayMetrics metrics = activity.getResources().getDisplayMetrics();
WindowManager wm = (WindowManager) activity.getSystemService(activity.WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(metrics);
metrics.scaledDensity = configuration.densityDpi * metrics.density;
activity.getResources().updateConfiguration(configuration, metrics);

这会强制屏幕密度变为 430,并且在 Galaxy s9+ 上运行良好。 但是,事实上,并非所有设备的默认密度都是 430。

如何确定运行我的应用程序的设备的默认密度?

或者是否有一个配置可以忽略我的应用程序的放大效果?

【问题讨论】:

  • 我也有类似的泡菜。你有没有想出办法?

标签: android android-layout screen-density


【解决方案1】:

这似乎对我有用。

        DisplayMetrics displayMetrics = activity.getResources().getDisplayMetrics();

        int snap = 20;
        float exactDpi = (displayMetrics.xdpi + displayMetrics.ydpi) / 2;
        float dpi = displayMetrics.densityDpi;

        if (dpi - exactDpi > snap) {

            int targetDpi = (int) (Math.ceil(exactDpi / snap) * snap);

            Configuration config = activity.getResources().getConfiguration();

            ErrorController.showMessage("adjustDisplayScale : " + config.densityDpi);

            ErrorController.showMessage("targetDpi : " + targetDpi);


            displayMetrics.densityDpi = targetDpi;
            config.densityDpi = targetDpi;
            displayMetrics.setTo(displayMetrics);
            config.setTo(config);
            activity.getResources().updateConfiguration(config, displayMetrics);
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    相关资源
    最近更新 更多