例如,在特定的布局中,我有以下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文件中放置值吗?
答案 0 :(得分:27)
我将维度值放入dimens.xml
资源通常有三个原因:
dimens.xml
中作为“dp”或“dip”允许我在Java中获得一个缩放值代码Resources.getDimensionPixelSize()
HTH!
答案 1 :(得分:8)
@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"
... />
然后,当您需要进行更改时,您只需要在一个地方进行更改。
备注强>
dimen
值相同的观点。如果您需要对一组视图进行更改而不是另一组视图,则必须单独返回每个视图,这会使目的失效。dp
(密度无关的像素),那么已经考虑到了密度差异问题,除了最多小病例。因此,在我看来,屏幕尺寸是使用dimens.xml
。 8dp
填充在手机上可能看起来很棒,但是当应用在平板电脑上运行时,它看起来太窄了。您可以通过制作两个(或更多)不同版本的dimens.xml
来解决此问题。
右键单击您的res
文件夹,然后选择新建&gt;价值资源文件。然后写入dimens
并选择最小屏幕宽度。用 600 写宽度(7“平板电脑)。 (还有其他选择尺寸的方法。有关详情,请参阅documentation和this answer。)
这将生成另一个values
文件夹,该文件夹将用于屏幕宽度最小为600dp
的设备。在Android视图中,两个dimens.xml
文件看起来像这样。
现在您可以单独修改它们。
值/ dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="my_default_padding">16dp</dimen>
</resources>
值-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>
系统会根据用户使用的设备自动为您选择正确的值。
有时在px
和dp
之间以编程方式进行痛苦缩放(请参阅this answer了解如何)。
如果您已在此{/ 1}}中定义了固定的dp
值
dimens.xml
然后你可以轻松搞定
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="my_dp_value">16dp</dimen>
</resources>
并且它已经被转换为用户拥有的任何密度设备的像素。
答案 2 :(得分:3)
dimens.xml
文件用于将所有硬编码像素值保存在一个位置。
现在,虽然您现在可能不会重复使用这些值,但仍然可以将它们放在dimens.xml
中以供将来参考。此外,遵循标准Android
编程范例可帮助其他开发人员更快地理解您的代码。这与我们放置strings.xml
的{{1}}非常相似,其中一些最终仅被使用一次! :)