【问题标题】:How to show two Textview with ellipsize end in horizontal Linearlayout in android?如何在android中的水平Linearlayout中显示两个椭圆形结束的Textview?
【发布时间】:2016-09-20 05:21:50
【问题描述】:

我面临一个问题,我在一个水平线性布局中有两个 Textview 和一个带有椭圆结尾的 Textview,当我输入更多内容时,它会在 Textview 结尾显示“...”,但当时我无法显示第二个 TextView。

图片下方。

但我想要两个Textview。如果第一个 Textview 的内容更多,那么它会显示 ellipsize end 并显示第二个 Textview。

下图。 我的 Xml 布局是,

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentTop="true"
        android:orientation="horizontal"
        card_view:cardBackgroundColor="#ffffff"
        card_view:cardUseCompatPadding="true"
        card_view:contentPadding="5dp">

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

            <ImageView
                android:id="@+id/iv_profile_photo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_gravity="center"
                android:src="@mipmap/ic_launcher" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:orientation="vertical">

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

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

                        <TextView
                            android:id="@+id/tv_name"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginLeft="5dp"
                            android:ellipsize="end"
                            android:singleLine="true"
                            android:text="ABC ABC ABC ABC ABC ABC ABC ABC ABC ABC"
                            android:textSize="20sp"
                            android:textStyle="bold" />

                        <TextView
                            android:id="@+id/editText"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="3dp"
                            android:layout_toRightOf="@+id/tv_name"
                            android:layout_weight="1"
                            android:singleLine="true"
                            android:text="(20)"
                            android:textSize="12sp" />

                    </LinearLayout>

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="5dp"
                        android:layout_marginRight="5dp"
                        android:gravity="end"
                        android:singleLine="true"
                        android:text="Yesterday"
                        android:textSize="12sp" />
                </LinearLayout>

                <TextView
                    android:id="@+id/desc"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="5dp"
                    android:layout_marginTop="3dp"
                    android:ellipsize="end"
                    android:singleLine="true"
                    android:text="This is Demo for Just Testing and Its only Demo for Testing."
                    android:textSize="14sp" />

            </LinearLayout>

            <ImageView
                android:id="@+id/iv_next"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:src="@mipmap/ic_next" />

        </LinearLayout>
    </android.support.v7.widget.CardView>


</RelativeLayout>

请分享我的想法。 谢谢

【问题讨论】:

  • 请分享一些代码。特别是xml。
  • 请发布您的 xml 布局
  • 你的想法不清楚,请分享一些代码,以便我们可以正确指导你。
  • @Reena 请参考我的答案,我已经检查过了,它正在工作。

标签: android textview android-linearlayout


【解决方案1】:

将Weight 给您的第一个孩子Text View 而不是第二个。你不需要使用任何固定宽度。

仅将android:layout_weight="1" 给第一个孩子Text View。

参考这个。

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

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

        <TextView
            android:ellipsize="end"
            android:id="@+id/tv_name"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:layout_width="wrap_content"
            android:singleLine="true"
            android:text="ABC ABC ABC ABC ABC ABC...(20)"
            android:textSize="20sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/editText"
            android:layout_height="wrap_content"
            android:layout_marginTop="3dp"
            android:layout_toRightOf="@+id/tv_name"
            android:layout_width="wrap_content"
            android:singleLine="true"
            android:text="(20)"
            android:textSize="12sp" />

    </LinearLayout>

编辑 1:

我也让它适用于小内容。我删除了嵌套Linear Layouts,这对性能不利。我已对您的Layout 应用了更改,请将其替换为您的XML。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:orientation="horizontal"
        card_view:cardBackgroundColor="#ffffff"
        card_view:cardUseCompatPadding="true"
        card_view:contentPadding="5dp">

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

            <ImageView
                android:id="@+id/iv_profile_photo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_gravity="center"
                android:src="@mipmap/ic_launcher" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:orientation="vertical">


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

                    <TextView
                        android:id="@+id/tv_name"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="5dp"
                        android:layout_weight="0.90"
                        android:ellipsize="end"
                        android:singleLine="true"
                        android:text="ABCABC ABC ABC ABC ABC ABC...(20)"
                        android:textSize="20sp"
                        android:textStyle="bold" />

                    <TextView
                        android:id="@+id/editText"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="3dp"
                        android:layout_toRightOf="@+id/tv_name"
                        android:singleLine="true"
                        android:text="(20)"
                        android:textSize="12sp" />


                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="5dp"
                        android:layout_marginRight="5dp"
                        android:gravity="end"
                        android:singleLine="true"
                        android:text="Yesterday"
                        android:textSize="12sp" />
                </LinearLayout>

                <TextView
                    android:id="@+id/desc"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="5dp"
                    android:layout_marginTop="3dp"
                    android:ellipsize="end"
                    android:singleLine="true"
                    android:text="This is Demo for Just Testing and Its only Demo for Testing."
                    android:textSize="14sp" />

            </LinearLayout>

            <ImageView
                android:id="@+id/iv_next"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:src="@mipmap/ic_launcher" />

        </LinearLayout>
    </android.support.v7.widget.CardView>


</RelativeLayout>

永远不要使用Nested Linear Layouts,因为它不利于性能。

【讨论】:

  • 但是如果我只写 ABC 那么它将显示 ABC (20) 我想如果我只写 ABC 那么它将显示 ABC (20)。
  • 否 内容较少时无法正常工作。如果我正在写更多的内容意味着“ABC ABC ABC ABC ABC ABC ABC ABC”那么它可以正常工作,但我只写一次 ABC 那么它是显示 ABC(20)但我想 ABC(20)
  • 你可以勾选只写ABC然后会显示ABC bbbbbbbbbbbbb (20) 我要ABC (20)
  • 是的,使用 ABC (20) 和 ABc ABC ABcA BAC ABc ABc ABc...(20) 很好,但是昨天的字符串有问题,因为如果我可以写更多内容,它不会显示在文本视图中。你也可以检查一下
  • @Reena 请继续聊天。
【解决方案2】:

将weight sum 用于您的ellipsize text view,这样它总是会为第二个textview 留出空间。

<LinearLayout
            android:layout_width="300dp"
            android:layout_height="wrap_content">

            <TextView android:layout_height="wrap_content"
                android:layout_width="match_parent"
                android:layout_weight="1"
                android:singleLine="true"
                android:ellipsize="end"
                android:text="this is for checking that ellipsize is working or not in the view"/>

            <TextView android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="20"
               />

        </LinearLayout>

【讨论】:

  • 如果我采用固定宽度,那么它会在不同尺寸的设备中引起问题。
  • 这只是 sn-p,您可以根据需要添加 matchparent 或包装内容,因为我也可以看到您的父布局的 weight_sum。所以改变宽度并检查。 @Reena
  • 固定尺寸​​不可能,因为在其他不同尺寸下会出现问题
  • 我明白了,只要把你定义的宽度放在你定义的任何地方,比如匹配父级或包装内容或大小并检查。你有 android:layout_width="match_parent" 所以把匹配父级并检查。对于作为您的线性布局的父布局。 @Reena
【解决方案3】:
<?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="wrap_content"
    android:orientation="horizontal"
    android:layout_weight="10"
    android:padding="10dp">

        <TextView
        android:id="@+id/first"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="5"
        android:paddingRight="5dp"
        android:singleLine="true"
        android:maxLength="25"
        android:textColor="@color/dark_gray"
        android:text="rtert"
        android:textSize="@dimen/common_text_label" />

        <TextView
        android:id="@+id/second"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="5"
        android:gravity="right"
        android:text="rtyrty"
        android:textColor="@color/dark_gray"
        android:textSize="@dimen/common_text_label"/>



</LinearLayout>

【讨论】:

  • @Kinjal Jain 请检查第一个屏幕截图。如果我只想在第一个 TextView 中使用 ABC 名称,那么它将显示 ABC (20)
  • 在哪个线性布局中放置两个 textview 1. 在线性布局 layout_weight =2 2. 在两个文本视图中放置 weight = 1
【解决方案4】:

根据你的设计,我只添加了两个TextView

试试这个:

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

        <ImageView
            android:id="@+id/img_timeline"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:layout_marginLeft="15dp"
            android:src="@drawable/ic_launcher"
            />
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="13dp"
            android:orientation="vertical"
            android:weightSum="1">

            <TextView
                android:id="@+id/text_1"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="0.5"
                android:text="ABC ABC ABC ABC ABC ABC ABC ABC ABC ABC"
                android:singleLine="true"
                android:textAppearance="?android:attr/textAppearanceSmall"
                />

            <TextView
                android:id="@+id/text_2"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="0.5"
                android:text="This is Demo for Just Testing and Its only Demo for Testing."
                android:textSize="10dp"
                android:textAppearance="?android:attr/textAppearanceSmall"
                />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

希望对你有帮助。

【讨论】:

    【解决方案5】:

    这是解决您问题的方法,只需复制和粘贴即可,

             <android.support.v7.widget.CardView
            xmlns:card_view="http://schemas.android.com/apk/res-auto"
            android:id="@+id/view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_alignParentTop="true"
            android:orientation="horizontal"
            card_view:cardBackgroundColor="#ffffff"
            card_view:cardUseCompatPadding="true"
            card_view:contentPadding="5dp" >
    
    
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:weightSum="100" >
    
            <ImageView
                android:id="@+id/iv_profile_photo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_gravity="center"
                android:layout_weight="70"
                android:src="@mipmap/ic_launcher" />
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="20"
                android:orientation="vertical" >
    
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal" >
    
                    <RelativeLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:orientation="horizontal" >
    
                        <TextView
                            android:id="@+id/tv_name"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_alignParentLeft="true"
                            android:layout_toLeftOf="@+id/editText"
                            android:ellipsize="end"
                            android:singleLine="true"
                            android:text="ABC ABC ABC ABC ABC ABC...(20)"
                            android:textSize="20sp"
                            android:textStyle="bold" />
    
                        <TextView
                            android:id="@+id/editText"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="3dp"
                            android:layout_weight="1"
                            android:singleLine="true"
                            android:layout_alignParentRight="true"
                            android:text="(20)"
                            android:textSize="12sp" />
                    </RelativeLayout>
    
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="5dp"
                        android:layout_marginRight="5dp"
                        android:gravity="end"
                        android:singleLine="true"
                        android:text="Yesterday"
                        android:textSize="12sp" />
                </LinearLayout>
    
                <TextView
                    android:id="@+id/desc"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="5dp"
                    android:layout_marginTop="3dp"
                    android:ellipsize="end"
                    android:singleLine="true"
                    android:text="This is Demo for Just Testing and Its only Demo for Testing."
                    android:textSize="14sp" />
            </LinearLayout>
    
            <ImageView
                android:id="@+id/iv_next"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_weight="10"
                android:src="@android:drawable/ic_delete" />
        </LinearLayout>
        </android.support.v7.widget.CardView> 
    
    </RelativeLayout>
    

    如果这解决了您的问题,请将答案标记为正确。

    【讨论】:

    • @Reena 如果您仍然遇到问题,请告诉我,我会指导您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多