我有一个UI元素(单行文本),我想要它水平居中于整个设备,除非/直到它与给定视图组/布局中的其他UI元素发生碰撞。此时,我希望它在剩余空间中居中或尽可能靠近整体居中而不发生碰撞。[当最终没有足够的空间时,我想使用省略号。]
有没有办法仅使用标准Android布局来实现这一点?
目前,我通过代码调整布局约束来实现这一点,当视图组的宽度更改、文本更改或相关UI元素变得可见/不可见时。它可以正常工作,但我不能不去想,有些布局应该只是为了方便我做这件事。
我有一个UI元素(单行文本),我想要它水平居中于整个设备,除非/直到它与给定视图组/布局中的其他UI元素发生碰撞。此时,我希望它在剩余空间中居中或尽可能靠近整体居中而不发生碰撞。[当最终没有足够的空间时,我想使用省略号。]
有没有办法仅使用标准Android布局来实现这一点?
目前,我通过代码调整布局约束来实现这一点,当视图组的宽度更改、文本更改或相关UI元素变得可见/不可见时。它可以正常工作,但我不能不去想,有些布局应该只是为了方便我做这件事。
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>
TextView
的 width 0dp 和 weight 1 将使用剩余的水平空间。
您可以向 LinearLayout
添加其他小部件,TextView
将始终占用剩余空间。
例如,如果将 Button
的可见性更改为 GONE
,则会看到 TextView
将扩展以使用整个宽度。同样,如果在 LinearLayout
中编程添加新小部件,则 TextView
的可用空间将调整。
您还可以添加 ellipsize
选项来控制当文本不适合 TextView
大小时发生的情况。
CoordinatorLayout
加上 Button
和 TextView
的行为可以帮助解决问题,或者像@Commonsware建议的那样,选用自定义 ViewGroup
。 - rupps
ViewGroup
。 - CommonsWareButton
替换成ViewGroup
并在运行时向该子ViewGroup
插入更多的View
。你有什么想法? - kishu27