Ric*_*ral 18 android dimensions android-layout
例如,在特定的布局中,我有以下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" />
Run Code Online (Sandbox Code Playgroud)
此网格视图特定于此布局,我不认为我将使用具有类似属性的任何其他网格视图.这就是说代码中的维度值特定于该网格视图.
我是否应该将它们移动到dimens.xml文件中,或者将它们留下来就可以了?如果是这样,仅当在多个布局中使用该值时,我是否应该在dimens.xml文件中放置值?
Dev*_*red 30
我将维度值放入dimens.xml资源中通常有三个原因:
dimens.xml作为"dp"或"dip" 放入允许我在Java代码中获得一个缩放值Resources.getDimensionPixelSize()HTH!
Sur*_*gch 14
@Devunwired列出了3个使用理由dimens.xml.以下是如何执行此操作的详细信息.
如果你像这样设置一些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>
Run Code Online (Sandbox Code Playgroud)
您可以在多个位置的整个应用中重复使用它.
<TextView
android:padding="@dimen/textview_padding"
android:textSize="@dimen/large_text_size"
... />
<TextView
android:padding="@dimen/textview_padding"
android:textSize="@dimen/large_text_size"
... />
Run Code Online (Sandbox Code Playgroud)
然后,当您需要进行更改时,您只需要在一个地方进行更改.
笔记
dimen如果它们真的不应该,请注意不要给两个不同的视图相同的值.如果您需要更改一组视图而不是另一组视图,那么您将不得不单独返回每个视图,这会使目的失败.dp(密度无关的像素),这已经很小心了除了最小的情况之外的所有密度差异问题.所以在我看来,屏幕尺寸是一个更重要的使用因素dimens.xml.一个8dp填充可能会在手机上很好看,但是当应用程序的平板电脑上运行,它看起来过于狭窄.您可以通过制作两个(或更多)不同版本来解决此问题dimens.xml.
右键单击您的res文件夹,然后选择新建>值资源文件.然后写入dimens并选择最小屏幕宽度.写入宽度为600(7"平板电脑).(还有其他方法可以选择尺寸.有关详细信息,请参阅文档和此答案.)
这将生成另一个values文件夹,用于屏幕宽度最小的设备600dp.在Android视图中,这两个dimens.xml文件看起来像这样.
现在您可以单独修改它们.
值/ dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="my_default_padding">16dp</dimen>
</resources>
Run Code Online (Sandbox Code Playgroud)
值-sw600dp/dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="my_default_padding">64dp</dimen>
</resources>
Run Code Online (Sandbox Code Playgroud)
使用时,您dimen只需使用两个dimens.xml文件中使用的名称进行设置.
<LinearLayout
...
android:padding="@dimen/my_default_padding">
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
系统将根据用户使用的设备自动为您选择正确的值.
有时,它是一种痛苦之间编程比例px和dp(见这个答案如何).
如果您dp已经定义了dimens.xml这样的固定值
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="my_dp_value">16dp</dimen>
</resources>
Run Code Online (Sandbox Code Playgroud)
然后你可以很容易地得到它
int sizeInPixels = getResources().getDimensionPixelSize(R.dimen.my_dp_value);
Run Code Online (Sandbox Code Playgroud)
并且它已经被转换为用户拥有的任何密度设备的像素.
该dimens.xml文件用于将所有硬编码像素值保留在一个位置。
现在,尽管您可能不会立即重复使用这些值,但是将它们放在dimens.xml将来以供参考仍然是一个好主意。此外,遵循标准的Android编程范例可帮助其他开发人员更快地理解您的代码。这很像strings.xml我们放置的位置String,其中一些最终仅使用一次!:)
| 归档时间: |
|
| 查看次数: |
14800 次 |
| 最近记录: |