如何防止" wrap_content"文本视图从另一个视图推出视线?

时间:2015-03-03 04:25:43

标签: android

我在布局中有两个文本视图。我想将它们彼此相邻显示:

| [TextView1] [TextView2] |

第一个文本视图的宽度可能会有很大差异。从几个符号到100个符号,但是如果它太长并且TextView2应该始终可见,我想椭划它。像这样:

| [TextView1TextView1Tex ...] [TextView2] |

我尝试了以下布局,但它总是在屏幕的末尾显示TextView2:

[TextView1] [TextView2] |

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:singleLine="true"
            android:maxLines="1"
            android:ellipsize="end"/>

        <TextView
            android:layout_marginLeft="5dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>

我试图将TextView1的宽度从0更改为wrap_content,但是它会将TextView2推出视线,如下所示:

| [TextView1TextView1TextView1Text ...] |

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:maxLines="1"
            android:ellipsize="end"/>

        <TextView
            android:layout_marginLeft="5dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:6)

这可能是一种矫枉过正,但TableLayout可以解决问题。

<TableLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:shrinkColumns="0">

        <TableRow
                android:layout_width="match_parent"
                android:layout_height="match_parent">

            <TextView
                    android:id="@+id/firstTextView"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:maxLines="1"
                    android:ellipsize="end"/>

            <TextView
                    android:id="@+id/secondTextView"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:maxLines="1"/>

        </TableRow>
    </TableLayout>

android:shrinkColumns="0"就是这里的问题。它告诉表只收缩第一列,同时保持其他列不变。结果是系统只会调整第一列的大小,即第一个TextView。

答案 1 :(得分:1)

对这个解决方案并不感到自豪,但它确实可以解决问题, 我已将TextView1和TextView2的宽度设置为&#34; wrap_content&#34;

然后在代码中我将TextView1的maxWidth设置为其父级的80%,如下所示:

view.setMaxWidth((int)(((View)view.getParent()).getWidth() * 0.8));

答案 2 :(得分:0)

当您只为其中一个子元素指定权重时,您告诉android该视图是您唯一关注其可见性的视图。但是如果您为两个子视图指定权重。这可以确保两者都可见。   

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:singleLine="true"
            android:maxLines="1"
            android:ellipsize="end"/>

        <TextView
            android:layout_width="0dp"
            android:layout_weight="0.25" //this makes sure both views are displayed
            android:layout_height="wrap_content"/>
    </LinearLayout>

答案 3 :(得分:0)

Try this solution, it works for me, 

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/textView1"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:ellipsize="end"
        android:maxLines="1"
        android:layout_height="wrap_content"
        android:text="TextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextView" />


    <TextView
        android:id="@+id/textView2"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:textColor="#FF0000"
        android:text="Second Textview" />

</LinearLayout>
![enter image description here][1]

Output: Check below Screen shot:

enter image description here