【问题标题】:Should we avoid the size definition inside the xml?我们应该避免在 xml 中定义大小吗?
【发布时间】:2018-11-15 20:30:34
【问题描述】:

是否有任何理由避免在 xml 文件中直接定义 dps?
例如。有什么理由更喜欢:

android:layout_marginLeft="@dimen/left_margin"  

在此:

android:layout_marginLeft=16dp  

如果我理解正确,这仅对平板电脑有意义,但在这种情况下,我们不会在 land 中拥有具有相关值的相关 xml 吗?
另外,在向dimen.xml 添加内容方面是否有任何需要注意的地方?例如。 left_margin 是否应该在所有维度的所有 dimen.xml 中定义?

【问题讨论】:

  • 如果left_margin遇到2次以上就应该去dimen.xml,否则16dp就可以了。
  • @Onik:是在哪里设置了2倍以上?我不明白
  • 对不起,描述的很简短。我的意思是,如果它在一个或(此外)几个xml 布局文件中遇到两次以上。为什么要修改多个文件中的值而不是一个 (dimen.xml)?!

标签: android android-layout android-xml android-resources android-screen-support


【解决方案1】:

使用第一个是有充分理由的。假设您决定购买想要更大利润的真正大型设备。使用第一个,您只需要覆盖尺寸文件并覆盖 1 尺寸。第二,你必须覆盖整个布局,这会导致更大的维护问题。

(此外,您应该几乎总是使用 marginStart 和 marginEnd 而不是左右,这样您就可以正确处理 RTL 语言)。

【讨论】:

  • 对于非常大的设备,我是否需要在特定目录中添加第二个dimens.xml?如果丢失了会发生什么?
  • 然后它会回退到默认的尺寸文件。这是为了能够以最少的努力针对不同的条件进行定制。
【解决方案2】:

一个很好的理由是,也许你有很多布局,marginLeft 需要相同。您可以在布局文件中将它们全部设置为16dp,但是如果您需要更改该尺寸怎么办?如果您在每个布局中都定义了16dp,则必须更改它的每个实例,并且您可能会忘记一些。如果它在dimens 中定义,您只需更改一次。

另一个原因是主题。有人可能会为您的应用制作主题。覆盖提取的值比为了更改一个值而覆盖和复制整个布局要容易得多。

正如 Gabe 所说,您确实应该尽可能使用 startend 而不是 leftright。否则,您的应用在使用 RTL 的设备上看起来会很糟糕。

【讨论】:

  • 所以startend 也适用于LinearLayout
  • 任何时候您都可以使用startend 代替leftright。它不仅适用于边距,还适用于填充、关系、重力等。
  • 我明白了,不是在每个布局文件中更改它,而是更改一次,但是用作名称的约定是什么?我无法命名它,例如<dimen name="left_margin">16dp</dimen>screen_left_marginleft_margin_16。所以这让我很困惑
  • 您可以随意命名。我通常会选择描述性的东西,所以我知道它的用途。
  • 如果它打算在多个布局文件 (=views) 中重复使用,如果在名称中提到了对特定视图的引用,那么它似乎是错误的。如果我将其命名为 left_margin_16,那么我不能只从 16dp 更改为例如22dp 并在名称中包含 _16left_margin 也太通用了。如果需要另一个left_margin22dp 怎么办?我说得通吗?
猜你喜欢
  • 2012-10-14
  • 2018-06-16
  • 2022-08-05
  • 2011-03-20
  • 2011-03-26
  • 2018-10-26
  • 2014-10-24
  • 2020-05-02
  • 2010-10-15
相关资源
最近更新 更多