硬编码布局是否为XML或在代码中以编程方式实现一致的UI?

时间:2015-12-20 15:11:01

标签: android xml user-interface layout

我希望确保所有屏幕尺寸的UI一致。我将使用下边距作为示例。让我用下图说明:

enter image description here

我可以将50dp硬编码到底部边距的xml中,如图所示,并将其视为"中间地面"在大型和小型设备之间。或者,我可以在运行时动态确定父视图的高度,然后将其乘以10%,然后以这种方式实现它,尽管它有点麻烦。您有什么推荐的吗?

2 个答案:

答案 0 :(得分:3)

在我看来,您不需要将边距设置为美丽UI的百分比。只要您没有针对不同的屏幕尺寸显示不同的UI,边距应该保持不变。

将XML用于维度通常是最好的方法。它可以帮助您保持代码清洁。如果您需要针对不同情况使用不同的值(例如设备大小,方向,密度),则可以使用XML文件的变体(例如,对于较大的屏幕尺寸,值较大)。只是不要在布局XML中包含硬编码值,尝试将它们提取到值文件中。例如,使用布局XML,如:

<View
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginBottom="@dimen/margin_bottom" />

并在值和值 - 大文件夹下创建两个dimens.xml文件:

值/ dimens.xml

<resources>
    <dimen name="margin_bottom">16dp</dimen>
</resources>

值-大/ dimens.xml

<resources>
    <dimen name="margin_bottom">32dp</dimen>
</resources>

答案 1 :(得分:1)

我认为最好在xml中给出一个保证金,你也可以在layout-sw600dp/layout-sw720dp/中为平板电脑指定一个更大的保证金。

顺便说一句,您不需要在第二种方法中动态确定屏幕的高度。您可以指定方向为linear layoutvertical的父weightSum = 10。然后使用layout_weight s创建子视图(在此示例中权重的总和应为9.5),对于底部边距,您可以创建一个空的view,其中包含0.5 layout_weight。所以这样,每个屏幕上的比例都会很好。