dimens.xml
文件用于将所有硬编码像素值保留在一个位置。 例如,在特定布局中,我具有以下XML:
<GridView
android:id="@+id/gridView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="3dp"
android:columnWidth="48dp"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="spacingWidth" />
此网格视图特定于此布局,我认为我不会使用具有类似属性的任何其他网格视图。也就是说,代码中的维度值特定于该网格视图。
我还是应该将它们移到dimens.xml文件中,还是可以像这样保留它们?如果是这样,仅在跨多个布局使用该值时,才应将值放置在dimens.xml文件中吗?
我通常出于三个原因将维度值放入dimens.xml
资源中:
Reuse:我需要多个小部件或布局来使用相同的值,并且只希望在更新或调整应用程序时对其进行一次更改。
密度差:如果我需要使尺寸比ldpi -> hdpi
或small -> large
稍小或更大。
从代码中读取:当我在代码中实例化视图并想应用一些静态尺寸时,将它们作为dimens.xml
(或dp
)放在dip
中,以便使用Resources.getDimensionPixelSize()
在Java代码中获得标度值。
@ Devunwired列出了使用dimens.xml
的3个原因。这是如何执行此操作的详细信息。
如果这样在dp
中设置一些sp
或dimens.xml
值一次,则>]
<?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="textview_padding">16dp</dimen> <dimen name="large_text_size">30sp</dimen> </resources>
您可以在整个应用中的多个位置重复使用它。
<TextView android:padding="@dimen/textview_padding" android:textSize="@dimen/large_text_size" ... /> <TextView android:padding="@dimen/textview_padding" android:textSize="@dimen/large_text_size" ... />
然后,当您需要进行更改时,只需要在一个地方进行即可。
Notes
dimen
值,请注意。如果您需要更改一组视图而不是其他视图,那么您将不得不单独返回每一个视图,这违背了目的。dp
(与密度无关的像素),则已经解决了除最少数情况以外的所有情况下的密度差异问题。因此,在我看来,屏幕尺寸是使用dimens.xml
的一个更重要的因素。8dp
填充在手机上看起来不错,但是当应用在平板电脑上运行时,它看起来太窄了。您可以通过制作两个(或更多)不同的dimens.xml
版本来解决此问题。右键单击res
文件夹,然后选择
新建>值资源文件
。然后输入dimens
并选择最小屏幕宽度。在600中输入宽度(7英寸平板电脑)。 (还有其他选择大小的方法。有关更多信息,请参见documentation和this answer。)这将创建另一个values
文件夹,该文件夹将用于最小屏幕宽度为600dp
的设备。在Android视图中,两个dimens.xml
文件如下所示。
现在您可以独立修改它们。
values / dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="my_default_padding">16dp</dimen>
</resources>
values-sw600dp / dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="my_default_padding">64dp</dimen>
</resources>
[使用dimen
时,只需用在两个dimens.xml
文件中使用的名称进行设置。
<LinearLayout
...
android:padding="@dimen/my_default_padding">
</LinearLayout>
系统将根据用户使用的设备自动为您选择正确的值。
3。从代码读入
px
和dp
之间进行缩放的痛苦(有关方法,请参见this answer。如果您已经在dp
中定义了固定的dimens.xml
值,则像这样
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="my_dp_value">16dp</dimen>
</resources>
然后您可以使用]轻松获得它>
int sizeInPixels = getResources().getDimensionPixelSize(R.dimen.my_dp_value);
并且对于用户拥有的任何密度设备,它都已经转换为像素。
dimens.xml
文件用于将所有硬编码像素值保留在一个位置。 现在,尽管您现在可能不会重复使用这些值,但是将它们放在dimens.xml
中以供将来参考仍然是一个好主意。此外,遵循标准的Android
编程范例可帮助其他开发人员更快地理解您的代码。这很像strings.xml
,我们在其中放置String
,其中一些最终仅使用一次! :)
dimens.xml
文件用于将所有硬编码像素值保留在一个位置。