Jes*_*tro 33 android android-layout
当我设计布局时,由于可维护性的主题,我集中了dimens.xml中的所有维度.我的问题是,这是否正确.什么是最好的做法?关于此的信息非常少,没什么.我知道在strings.xml上集中布局的所有字符串,colors.xml上的颜色是个好主意.但关于尺寸?
例如:
<TableLayout
android:id="@+id/history_detail_rows_submitted"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/cebroker_history_detail_rows_border"
android:collapseColumns="*">
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/history_detail_rows_margin_vertical"
android:background="@color/cebroker_history_detail_rows_background"
android:gravity="center"
android:paddingBottom="@dimen/history_detail_rows_padding_vertical"
android:paddingLeft="@dimen/history_detail_rows_padding_horizontal"
android:paddingRight="@dimen/history_detail_rows_padding_horizontal"
android:paddingTop="@dimen/history_detail_rows_padding_vertical">
<TextView
android:layout_width="match_parent"
android:drawableLeft="@mipmap/ic_history_detail_submitted_by"
android:drawablePadding="@dimen/history_detail_rows_textviews_padding_drawable"
android:gravity="left|center"
android:paddingRight="@dimen/history_detail_rows_textviews_padding"
android:text="@string/history_detail_textview_submitted_by"
android:textColor="@color/cebroker_history_detail_rows_textviews"
android:textSize="@dimen/history_detail_rows_textviews_text_size" />
Run Code Online (Sandbox Code Playgroud)
Sur*_*gch 66
dimens.xml
dimens.xml
通过右键单击values
文件夹并选择" 新建">"值资源文件"来创建新文件.写下dimens
名字.(你也可以称它为dimen
或dimensions
该名称并不重要,只有dimen
资源类型,这将包括.)
添加dimen
名称和值.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="my_value">16dp</dimen>
</resources>
Run Code Online (Sandbox Code Playgroud)
值可以是dp
,px
或sp
.
使用xml中的值
<TextView
android:padding="@dimen/my_value"
... />
Run Code Online (Sandbox Code Playgroud)
或者在代码中
float sizeInPixels = getResources().getDimension(R.dimen.my_value);
Run Code Online (Sandbox Code Playgroud)dimens.xml
感谢这个答案提供更多想法.
重用值 - 如果您需要在整个应用程序中使用相同的维度多个位置(例如,活动布局填充或TextView textSize
),那么使用单个dimen
值将使以后更容易调整.这与使用样式和主题的想法相同.
支持多个屏幕 - 8dp
在手机上可能看起来不错,但在10英寸平板电脑上看起来很糟糕.你可以创建多个dimens.xml
用于不同屏幕.这样你可以做一些像8dp
手机和64dp
平板电脑的设置.创建另一个dimens.xml
文件,右键单击您的res
文件夹,然后选择新建>值资源文件.(有关详细信息,请参阅此答案)
方便dp
到px
代码转换 -在代码中,你通常需要的像素值来工作.但是,你仍然需要考虑设备密度,并且转换很麻烦,以编程方式.如果你有一个常dp
数值,你可以像这样容易得到像素float
:
float sizeInPixels = getResources().getDimension(R.dimen.my_value);
Run Code Online (Sandbox Code Playgroud)
或者这个int
:
int sizeInPixels = getResources().getDimensionPixelSize(R.dimen.my_value);
Run Code Online (Sandbox Code Playgroud)我在更全面的答案中提供了更多关于如何做这些事情的细节.
dimens.xml
dimens.xml
如果要使它们更难以维护,请不要将您的值放入其中.通常情况下,只要它不属于我上面列出的类别.使用dimens.xml
会使代码更难阅读,因为您必须在两个文件之间来回切换以查看实际值是什么.个人观点不值得(在我看来).
字符串是不同的.所有字符串都应该放在资源文件中,strings.xml
因为在国际化应用程序时几乎所有字符串都需要翻译.另一方面,大多数维度值不需要针对不同的位置进行更改.Android Studio似乎支持这种推理.直接在布局xml中定义字符串将发出警告,但dp
不会定义值.