如何从 dp 格式的 dimen 文件夹中获取值

How get value from dimen folder in dp format

我想以编程方式设置布局大小。而这个布局尺寸来自 dimen 文件夹。但问题是当我从 dimen 文件夹中获取值时,它会在普通分辨率屏幕上完美显示,但是当它 运行 以高分辨率显示时它不会 运行 完美

您必须将从 dimen 文件夹中获得的 dp 值转换为适合设备屏幕密度的适当像素数。示例:

float dp = 5.0f // This is the dp value from your dimen file
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, displayMetrics);

其中 px 是将在设备上正确显示的缩放像素值。

参考这个linkDifferent values folders in android!

为每个屏幕密度创建一个 "values" 文件夹,并在每个 "dimensions.xml" 文件中定义布局的大小。这将使您能够对同一布局使用不同的尺寸,而无需使用任何 Java 代码。

希望对您有所帮助:)

是的,我解决了 screen resolution 问题。 当您从 dimen 文件夹中获取值时,它会以像素格式获取。像素大小取决于您的 device resolution 而不是 device size。 所以你需要创建基于 screen sizescreen resolution 的 dimen 文件夹。就像:

在此文件夹中按不同的屏幕尺寸和不同的屏幕分辨率分类。

所有设备布局不能只使用一个维度,请尝试创建一些不同大小的值资源文件夹

你可以参考我的项目如下,它可以帮助你自动生成不同floder中的维度 https://github.com/Vaycent/genDimensXml 希望对你有所帮助

您可以使用以下方式之一以编程方式设置布局大小:

方法一:

  •  int width = getResources().getDimensionPixelSize(R.dimen.layout_width);
    
  •  int height = getResources().getDimensionPixelSize(R.dimen.layout_height);
    

方法二:

  •  int width = (int) (widthdpValue * Resources.getSystem().getDisplayMetrics().density);
    
  • int height = (int) (heightdpValue * Resources.getSystem().getDisplayMetrics().density);`
    

将此宽度和高度设置为布局。