所以我有一个UI元素(单行文本),我想要相对于整个设备水平居中 - 除非/直到它与给定视图组/布局中的其他UI元素发生碰撞。在那一点上,我希望它能够在剩余的空间中居中,或者尽可能接近整体居中而不会碰撞。 [当最终没有足够的空间时,我想使用省略号。]
有没有办法只使用标准的Android布局来实现这一目标?
我目前正在通过代码调整布局约束来实现此目的,当视图组的宽度发生变化,文本发生变化或相关的UI元素变得可见/不可见时。它工作正常,但我不禁想到一些布局应该只为我做这件事。
答案 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
尺寸时会发生什么。