我的目标是使两个TextView
(textLeft
,textRight
)彼此相邻。 textLeft
应该与父项的左侧对齐。 textRight
应该始终是textLeft
的直接权利(而不是设备的最右边),并且如果textLeft
太长,则不应将其推出屏幕。
水平LinearLayout
在这里没有用,因为使用权重将固定视图的大小,这是不希望的。
我一直在使用此RelativeLayout
,如果textLeft
不太长,则可以正常使用。文本较长时,textRight
会被推出屏幕。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".TextAlignActivity">
<TextView
android:id="@+id/textLeft"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="10sp"
android:maxLines="3"
android:ellipsize="end"
android:text="Text On the Left - long random text to follow"
/>
<TextView
android:id="@+id/textRight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@+id/textLeft"
android:layout_alignParentRight="true"
android:textSize="10sp"
android:maxLines="1"
android:text="Text on the Right"
/>
</RelativeLayout>
我认为ConstraintLayout可能适合这种情况,但是我不是很熟悉。我想避免这种情况,因为这将需要大量重写我现有的布局。
编辑:
为了简化查询,我在示例中使用了2个TextView
。在我的应用代码中,textLeft
是带有两个LinearLayout
(TextViews
和textLeftTop
)的垂直textLeftBottom
,而不是如示例所示的单个TextView
。我希望适用于2 TextViews
的解决方案也应适用于LinearLayout
和TextView
。
基于目前为止的解决方案,我需要澄清的是,如果textRight
时间不长,我需要textLeft
位于textLeft
的直接权利(而不是设备权利) 。如果textLeft
长,则textRight
应该“粘在”设备右侧,而textLeft
应该换行。
答案 0 :(得分:1)
编辑:
此布局是一种“聊天”布局。您可以使用两个LinearLayout
,一个是match_parent
的父级,另一个是两个TextView
的所有者。请注意,后一个宽度为wrap_content
。
layout_weight
的 LinearLayout
属性意味着...大致来说,较小的数字很重要。
另请参阅:https://developer.android.com/reference/android/widget/LinearLayout
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="test test test test test test test test test test test test test test test"
android:layout_weight="1"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello world"
android:layout_weight="0"/>
</LinearLayout>
<Space android:layout_width="wrap_content" android:layout_height="20dp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="test test test test test test test test "
android:layout_weight="1"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello world"
android:layout_weight="0"/>
</LinearLayout>
</LinearLayout>
过时的答案
请注意,textLeft
的宽度为0dp。
如果在约束布局中将宽度(或高度)设置为0,则表示它将填充剩余的空白空间。
或者,您可以将app:layout_constraintHorizontal_weight
与0dp宽度一起使用,可以设置布局宽度的百分比。
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textLeft"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Long Long Long Long Long Long Long Long Long Long Long Long Long"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/textRight"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@+id/textRight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World! "
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@id/textLeft"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</android.support.constraint.ConstraintLayout>
答案 1 :(得分:0)
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="text1ldksjdaskldjadlkjdaslkdjsl"
android:textSize="20sp"
app:layout_constraintEnd_toStartOf="@id/text2"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/text2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="text2dsjdakldjlkajdlskdjasldkjdlskdjasdlaskdjasldkj"
android:textSize="20sp"
android:gravity="right"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/text1"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
我不确定这是否是您要的内容,无论如何,我只是检查了两个文本视图中文本较长的几种情况。 我还建议您将布局转换为约束布局,最终您将从中受益,可以轻松地平整树视图层次结构而无需使用太多内部布局。
答案 2 :(得分:0)
您可以通过这种方式实现此代码
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textLeft"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="10sp"
android:maxLines="3"
android:ellipsize="end"
android:text="Text On the Left - long random text to follow"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
<TextView
android:id="@+id/textRight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@+id/textLeft"
android:layout_alignParentRight="true"
android:textSize="10sp"
android:maxLines="1"
android:text="Text on the Right"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
或那个
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textLeft"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="10sp"
android:maxLines="3"
android:ellipsize="end"
android:text="Text On the Left - long random text to follow"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_margin="10dp"/>
<TextView
android:id="@+id/textRight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@+id/textLeft"
android:layout_alignParentRight="true"
android:textSize="10sp"
android:maxLines="1"
android:text="Text on the Right"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toEndOf="@id/textLeft"
android:layout_margin="10dp"/>