Textview with long text pushes out other views in GridLayout despite ellipsize=end

前端 未结 14 1861
星月不相逢
星月不相逢 2020-12-24 01:19

My problem is very similar to How to get a layout where one text can grow and ellipsize, but not gobble up the other elements on the layout, but read on below why I can\'t u

相关标签:
14条回答
  • 2020-12-24 02:02

    I'm a big fan of LinearLayouts, so here's my suggestion using those:

    <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:orientation="horizontal"
            android:layout_weight="1" >
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:ellipsize="end"
                android:singleLine="true"
                android:text="Long text to demonstrate problem with TextView in GridLayout taking up too much space despite ellipsis" />
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="(view1)" />
        </LinearLayout>
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:text="(view2)" />
    </LinearLayout>
    
    0 讨论(0)
  • 2020-12-24 02:03

    The trick which worked for me was to use maxWidth to restrict the width of the first view. You need to do it with Java, here is the basic logic:

    firstView.setMaxWidth(parentView.getWidth() - view2.getWidth() - view1.getWidth() - padding * 2);
    

    Not pretty, but it works.

    0 讨论(0)
  • 2020-12-24 02:06

    I will suggest you to play with layout_weight property of your widget

    Example:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity" >
    
        <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:orientation="horizontal"
        android:weightSum="10">
    
        <LinearLayout
           android:id="@+id/ll_twoViewContainer"
           android:layout_weight="8"
           android:layout_width="0dp"
           android:layout_height="wrap_content" 
           android:orientation="horizontal">
    
          <TextView
              android:id="@+id/rl0"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_alignParentLeft="true"
              android:layout_weight="1"
              android:ellipsize="end"
              android:singleLine="true"
              android:text="Long text" />
    
          <TextView
              android:id="@+id/rl1"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_marginLeft="10dp"
              android:layout_toRightOf="@id/rl0"
              android:layout_weight="1"
              android:minWidth="120dp"
              android:text="(view1)" />
    
        </LinearLayout>
        <TextView
            android:id="@+id/rl2"
            android:layout_weight="2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/rl1"
            android:layout_alignParentRight="true"
            android:layout_marginLeft="10dp"
            android:text="(view2)" />
      </LinearLayout>
    
    </LinearLayout>
    

    finally your layout will look like as follow:

    +----------------------------------------+
    | short text [view1]             [view2] |
    +----------------------------------------+
    | long text with ell ... [view1] [view2] |
    +----------------------------------------+
    
    0 讨论(0)
  • 2020-12-24 02:07

    First, you must layout [view 2] to parent Right;

    Again, you reference the reference to the last two layout!

    <Relativelayout android:layout_width="match_parent"
                android:layout_height="wrap_content"
          <TextView
            android:id="@+id/view2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
           />
    
          <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_toLeft="@id/view2"
            android:gravity="left">
    
            <TextView
                android:id="@+id/shortORlongtTextView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@id/view1"
                android:ellipsize="end"
                android:maxLines="1"
                android:textSize="18dp"/>
    
            <TextView
                android:id="@+id/view1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
               />
        </RelativeLayout>
    

    0 讨论(0)
  • 2020-12-24 02:10

    I had the same problem with the grid layout. what i did is given a fixed width for the text view and also given layout_columnWeight property for each text view then the issue was fixed ,hope it helps ...

               <TextView
                    android:id="@+id/txtName"
                    style="@style/MyDetailTitle"
                    android:layout_width="@dimen/detail_length"
                    android:layout_height="wrap_content"
                    android:text="@string/app_name"
                    app:layout_column="3"
                    app:layout_columnWeight="1"
                    app:layout_gravity="start"
                    app:layout_row="1" />
    
    0 讨论(0)
  • 2020-12-24 02:12

    Try using Layout Weight

       <TableRow
            android:id="@+id/tableRow3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/tableRow2"
            android:layout_alignParentBottom="true"
            android:gravity="center"
            android:weightSum="10"
            android:background="@android:color/black" >
    
            <TextView
                android:id="@+id/txtInningsTotal"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="2"
                android:gravity="center"
                android:text="0" 
                android:textColor="@android:color/white" />
    
            <TextView
                android:id="@+id/txtTeamOneTotal"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="2.5"
                android:gravity="center"
                android:text="0" 
                android:textColor="@android:color/white" />
    
            <View
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="0.2" />
    
            <TextView
                android:id="@+id/txtTeamTwoTotal"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="2.5"
                android:gravity="center"
                android:text="0"
                android:textColor="@android:color/white"  />
    
            <View
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="0.2" />
    
            <TextView
                android:id="@+id/txtGrandTotal"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="3"
                android:gravity="center"
                android:text="0"
                android:textColor="@android:color/white"  />
        </TableRow>
    

    Here i have taken table row in which there is layout weight sum which is of 10 means that it is 100% width of its parent. and in all its child views i have set width to 0Dp and given weight to 1 or 2. so that it will take up to that percent of total 10. so the layout will be adjusted accordingly screen and also there will be no issue of overlapping.

    If i have understood you correctly then this is the answer you wanted.

    Hope it Helps!

    0 讨论(0)
提交回复
热议问题