我有一个带有两个视图的FrameLayout:一个ImageButton和一个TextView。
使用RelativeLayout避免重叠。
<RelativeLayout
android:id="@+id/dialog_header"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageButton
android:id="@+id/dialog_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_padding="20dp"
android:src="@drawable/btn_close"
android:layout_alignParentStart="true"/>
<TextView
android:id="@+id/dialog_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Some text"
android:textSize="17sp"
android:textAlignment="center"
android:layout_toEndOf="@id/dialog_close"
android:layout_centerVertical="true"/>
</RelativeLayout>
但是现在,TextView不在布局中居中:而是在ImageButton和Parent的末尾之间居中。 Text not centered
我无法添加按钮大小的边距,因为我实际上并不知道按钮的大小。
保留RelativeLayout,并添加一个不可见的假按钮(与第一张图片相同,因此大小相同)。并在两个按钮之间居中放置TextView。
<RelativeLayout
android:id="@+id/dialog_header"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageButton
android:id="@+id/dialog_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_padding="20dp"
android:src="@drawable/btn_close"
android:layout_alignParentStart="true"/>
<TextView
android:id="@+id/dialog_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Some text"
android:textSize="17sp"
android:textAlignment="center"
android:layout_toEndOf="@id/dialog_close"
android:layout_toStartOf="@id/dialog_margin"
android:layout_centerVertical="true"/>
<ImageButton
android:id="@+id/dialog_margin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_padding="20dp"
android:src="@drawable/btn_close"
android:layout_alignParentEnd="true"
android:visibility="invisible"/>
</RelativeLayout>
导致我想要的行为的原因: Result with fake button
但是我觉得使用假按钮不是正确的方法。
是否有另一种解决方案可以使视图居中并避免重叠,而不是使用这种看不见的假按钮技巧?
如果能带来解决方案(约束,线性...),我可以轻松使用其他布局
感谢您的回答!
答案 0 :(得分:0)
我不确定您是否也需要FrameLayout。假设我了解您要完成的工作,则可以仅使用RelativeLayout作为基本布局。
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="match_parent">
<RelativeLayout
android:id="@+id/dialog_header"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageButton
android:id="@+id/dialog_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:padding="20dp"
android:src="@drawable/btn_close" />
<TextView
android:id="@+id/dialog_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toEndOf="@id/dialog_close"
android:text="Some very long text which will overlap my button and I dont want that."
android:textSize="17sp"
android:gravity="center"
android:layout_marginEnd="75dp"/>
</RelativeLayout>
</FrameLayout>
答案 1 :(得分:0)
为了使文本看起来居中,父布局两端的边距必须相等。因此,无需添加假按钮,您就可以在等于按钮宽度的文本中添加margin_right。
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="match_parent">
<RelativeLayout
android:id="@+id/dialog_header"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageButton
android:id="@+id/dialog_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:padding="20dp"
android:src="@drawable/btn_close" />
<TextView
android:id="@+id/dialog_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/dialog_close"
android:layout_marginRight = "//value equal to source width"
android:text="Some very long text which will overlap my button and I dont want that."
android:textSize="17sp"
android:gravity="center"/>
</RelativeLayout>
</FrameLayout>
希望这会有所帮助。
答案 2 :(得分:0)
将TextView
居中放在ConstraintLayout
中,方法是将其内容包装起来,并使用约束将其约束到所有父边界。然后,通过包装ImageButton
的内容并将其约束到父对象的顶部和底部,将其垂直居中。最后,将ImageButton
的结尾限制为TextView
的开头。
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/dialog_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Some text"
android:textSize="17sp"
android:textAlignment="center"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<ImageButton
android:id="@+id/dialog_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_padding="20dp"
android:src="@drawable/btn_close"
app:layout_constraintEnd_toStartOf="@id/dialog_title"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
</android.support.constraint.ConstraintLayout>