我需要水平显示两个单行TextView。左侧TextView(让我们将其命名为1)可能有一个较长的文本,可能会缩短并以“...”结束。正确的文本视图(2)有一个简短的文本,不应该缩短。
我希望1保持与父节点的左端对齐。 2与1的右侧对齐。
现在我必须遇到两个条件
a)如果1有一个短文本,则2应该与1的右边对齐(没有缩短)。
b)但如果1的文本太长,则1的文本应缩短为“...”,而视图2最大移动到父级的右侧但仍保持完全可见(不... 。)
我目前的解决方案如下。方案b)对我很好,但是在a)的情况下,问题是视图2移动到父级的右侧而1移动到左侧 - 两者都很短并且之间有相当大的空间看起来很奇怪我希望2向左移动(在1旁边)并将此空间留在右侧。
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_marginTop="1dp"
android:layout_weight="0.5">
<TextView
android:id="@+id/ns_in_txt"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:gravity="top|left"
android:maxLines="1"
android:singleLine="true"
android:textColor="#00a2ff"
android:textSize="18sp" />
<TextView
android:id="@+id/ns_txt"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@id/ns_in_txt"
android:gravity="top|left"
android:maxLines="1"
android:singleLine="true"
android:textColor="#00a2ff"
android:textSize="18sp" />
</RelativeLayout>
答案 0 :(得分:0)
尝试这样做
<RelativeLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_context"
android:layout_marginTop="1dp">
<TextView
android:id="@+id/ns_in_txt"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_alignParentRight="true"
android:gravity="left"
android:maxLines="1"
android:ellipsize="end"
android:singleLine="true"
android:textColor="#00a2ff"
android:textSize="18sp" />
<TextView
android:id="@+id/ns_txt"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@id/ns_in_txt"
android:gravity="left"
android:maxLines="1"
android:singleLine="true"
android:textColor="#00a2ff"
android:textSize="18sp" />
</RelativeLayout>
答案 1 :(得分:0)
显然,您需要两个场景,这些场景需要为父布局设置不同的方向:第一个水平,第二个垂直。也许我错了(我希望如此但是)在静态xml中,很难做到这一点。
尝试以下代码来测试我是否错了:
场景1:方向水平=文字1不够大
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="1dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/textLong"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:ellipsize="end"
android:singleLine="true"
android:textColor="#00a2ff"
android:textSize="18sp"
android:text="This is a normal text not big" />
<TextView
android:id="@+id/textShort"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:singleLine="true"
android:textColor="#00a2ff"
android:textSize="18sp"
android:text="short text" />
</LinearLayout>
场景2:方向垂直=文字1太大
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="1dp"
android:orientation="vertical" >
<TextView
android:id="@+id/textLong"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:ellipsize="end"
android:singleLine="true"
android:textColor="#00a2ff"
android:textSize="18sp"
android:text="This is a biiiggg loooonnng teeeeexxxxxtttt" />
<TextView
android:id="@+id/textShort"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:singleLine="true"
android:textColor="#00a2ff"
android:textSize="18sp"
android:text="short text" />
</LinearLayout>
要解决您的问题,您可以尝试2个解决方案。
首先,尝试创建maxLenght
限制,在Activity
中计算并更改LinearLayout
的父方向。获取您拥有的字符数量并显示方向。
其次,定制自己的类扩展TextView
。并创建一个getWidth
方法,与其父级相比返回长TextView
的宽度并更改方向。
也许以下问题/答案可能有用(我认为没有解决方案,但更多的是灵感):
In Android how to get the width of the Textview which is set to Wrap_Content
Get the size of a text in TextView
How to find android TextView number of characters per line?
Auto Scale TextView Text to Fit within Bounds
编辑:
我找到了一个我上面写的最后一个网址的解决方案。看看这个答案,开发人员想和你做同样的事情。所以他决定创建一个可自动恢复的textview 。看看这里: Move two side by side textviews to be one under another if text is too long
我希望这会对你有所帮助。
答案 2 :(得分:0)
我建议使用LinearLayout
和一点点编码的组合。无论大小如何,这个想法都是将它们并排放置。测量并布置右侧文本视图后,将左侧textview的最大宽度设置为剩余的空间。
这是布局文件,这里没什么特别的:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/ns_in_txt"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:ellipsize="end"
android:gravity="top|left"
android:maxLines="1"
android:singleLine="true"
android:textColor="#00a2ff"
android:textSize="18sp" />
<TextView
android:id="@+id/ns_txt"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:ellipsize="none"
android:gravity="top|left"
android:maxLines="1"
android:singleLine="true"
android:textColor="#00a2ff"
android:textSize="18sp" />
</LinearLayout>
并向activity / fragment添加一些代码:
final TextView tvLeft = (TextView) findViewById(R.id.ns_txt);
final TextView tvRight = (TextView) findViewById(R.id.ns_in_txt);
ViewTreeObserver obs = tvRight.getViewTreeObserver();
obs.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
tvLeft.setMaxWidth(SCREEN_WIDTH - tvRight.getWidth());
}
});