Android UI:“智能”居中?

时间:2017-04-27 12:19:53

标签: android android-layout

所以我有一个UI元素(单行文本),我想要相对于整个设备水平居中 - 除非/直到它与给定视图组/布局中的其他UI元素发生碰撞。在那一点上,我希望它能够在剩余的空间中居中,或者尽可能接近整体居中而不会碰撞。 [当最终没有足够的空间时,我想使用省略号。]

有没有办法只使用标准的Android布局来实现这一目标?

我目前正在通过代码调整布局约束来实现此目的,当视图组的宽度发生变化,文本发生变化或相关的UI元素变得可见/不可见时。它工作正常,但我不禁想到一些布局应该只为我做这件事。

1 个答案:

答案 0 :(得分:0)

您可以像这样使用加权水平LinearLayout

<LinearLayout
   android:orientation="horizontal"
   android:layout_width="match_parent"
   android:layout_height="match_parent">

   <TextView
        android:gravity="center_horizontal"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="i am centered"
        android:ellipsize="end"
        />

    <Button
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="another widget"/>
     .
     .
     .
</LinearLayout>

宽度0dp {<1>}和权重1 将使用剩余的水平空间。

您可以向TextView添加其他小部件,LinearLayout将始终占用剩余空间。

例如,如果您将TextView的可见性更改为Button,则会看到GONE将展开以使用整个宽度。同样,如果您以编程方式将新小部件添加到TextView,则LinearLayout的可用空间将会调整。

您可以进一步添加TextView个选项,以控制当文字不符合ellipsize尺寸时会发生什么。