【问题标题】:Show three dots when TextView is too longTextView 太长时显示三个点
【发布时间】:2019-10-14 21:33:10
【问题描述】:

人们会认为在 2019 年的字符串末尾显示三个点很容易,但事实恰恰相反。我试过了:

maxLines="1"
drawablePadding="10dp"
ellipsize="end"
ellipsize="marquee"
singleLine="true"
layout_width="match_parent"
layout_width="wrap_content"

我在 stackoverflow 上解决了几十个问题,但它不起作用。

我的布局文件很简单:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/dialog_nearest_charger"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minHeight="40dp"
    android:orientation="horizontal"
    android:weightSum="10">

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

        <TextView
            android:id="@+id/itemChargerDistance"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textColor="@color/colorCoarseDistance"
            android:textStyle="bold"
            android:textSize="20sp"
            android:text="1.2" />

        <TextView
            android:id="@+id/itemChargerUnits"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textSize="12sp"
            android:text="miles" />

    </LinearLayout>

    <ImageView
        android:id="@+id/itemChargerOperator"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:minWidth="40dp"
        android:layout_weight="1"
        app:srcCompat="@drawable/dot_cpo_cps_copy_5" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginStart="7dp"
        android:layout_weight="2"
        android:drawablePadding="10dp"
        android:orientation="vertical">

        <TextView
            android:id="@+id/itemChargerTitle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:drawablePadding="10dp"
            android:ellipsize="end"
            android:maxLines="1"
            android:text="Kinross Park and Ride"
            android:textSize="18sp"
            android:textStyle="bold" />

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

            <TextView
                android:id="@+id/itemChargerAddress"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:layout_marginStart="5dp"
                android:textSize="14sp"
                android:text="Junction Road" />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

我只需要在 TextView itemChargerTitle 溢出时显示三个点。到目前为止,即使在 Android Studio 预览版中,我发现的任何解决方案都不起作用。

【问题讨论】:

  • 只需指定一个与 wrap_content 不同的高度。否则,小部件将始终适应并且永远不会省略其中的文本
  • 添加了android:ellipsize="end" android:maxLines="1",它对我有用。

标签: android textview


【解决方案1】:

TextView 有 ellipsize 的属性 你可以这样使用

<TextView
  android:id="@+id/topicName"
  android:layout_width="50dp"
  android:layout_height="wrap_content"
  android:layout_marginStart="10dp"
  android:layout_marginTop="10dp"
  android:layout_marginEnd="10dp"
  android:maxLines="1"
  android:ellipsize="end"
  android:text="Very long long long long text"
  android:textColor="@color/black"
  android:textSize="16sp" />

它会像这样显示这个文本 很长很长很长……

【讨论】:

    【解决方案2】:

    您的 TextView 在最后显示三个点,但您看不到它,因为您的布局超出了屏幕的边缘。将其父布局 android:layout_weight 更改为 8 以匹配容器 android:weightSum=10,您将看到您的点。

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/dialog_nearest_charger"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minHeight="40dp"
    android:orientation="horizontal"
    android:weightSum="10">
    
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:minWidth="55dp"
        android:layout_weight="1"
        android:orientation="vertical">
    
        <TextView
            android:id="@+id/itemChargerDistance"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textColor="@color/colorCoarseDistance"
            android:textStyle="bold"
            android:textSize="20sp"
            android:text="1.2" />
    
        <TextView
            android:id="@+id/itemChargerUnits"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textSize="12sp"
            android:text="miles" />
    
    </LinearLayout>
    
    <ImageView
        android:id="@+id/itemChargerOperator"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:minWidth="40dp"
        android:layout_weight="1"
        app:srcCompat="@drawable/dot_cpo_cps_copy_5" />
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginStart="7dp"
        android:layout_weight="8"
        android:drawablePadding="10dp"
        android:orientation="vertical">
    
        <TextView
            android:id="@+id/itemChargerTitle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:drawablePadding="10dp"
            android:ellipsize="end"
            android:maxLines="1"
            android:text="Kinross Park and Ride"
            android:textSize="18sp"
            android:textStyle="bold" />
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal">
    
            <TextView
                android:id="@+id/itemChargerAddress"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:layout_marginStart="5dp"
                android:textSize="14sp"
                android:text="Junction Road" />
        </LinearLayout>
    </LinearLayout>
    

    【讨论】:

      【解决方案3】:

      请试试这个。我已将宽度更新为 0dp。当您使用 android:layout_weight 时,请确保您使用的是 android:layout_width="0dp" 并且所有子 layout_weight 的总数为 1 或 10。这意味着 100% 宽度。

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/dialog_nearest_charger"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:background="@color/colorWhite"
          android:minHeight="40dp"
          android:orientation="horizontal"
          android:weightSum="10">
      
          <LinearLayout
              android:layout_width="0dp"
              android:layout_height="match_parent"
              android:layout_weight="1"
              android:orientation="vertical">
      
              <TextView
                  android:id="@+id/itemChargerDistance"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_gravity="center_horizontal"
                  android:text="1.2"
                  android:textColor="@color/colorCoarseDistance"
                  android:textSize="20sp"
                  android:textStyle="bold" />
      
              <TextView
                  android:id="@+id/itemChargerUnits"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_gravity="center_horizontal"
                  android:text="miles"
                  android:textSize="12sp" />
      
          </LinearLayout>
      
          <ImageView
              android:id="@+id/itemChargerOperator"
              android:layout_width="0dp"
              android:layout_height="match_parent"
              app:srcCompat="@drawable/dot_cpo_cps_copy_5"
              android:layout_weight="1" />
      
          <LinearLayout
              android:layout_width="0dp"
              android:layout_height="match_parent"
              android:layout_marginStart="7dp"
              android:layout_weight="8"
              android:drawablePadding="10dp"
              android:orientation="vertical">
      
              <TextView
                  android:id="@+id/itemChargerTitle"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:drawablePadding="10dp"
                  android:ellipsize="end"
                  android:lines="1"
                  android:maxLines="1"
                  android:padding="@dimen/ten_dp"
                  android:text="Kinross Park and Ride"
                  android:textSize="18sp"
                  android:textStyle="bold" />
      
              <LinearLayout
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:orientation="horizontal">
      
                  <TextView
                      android:id="@+id/itemChargerAddress"
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:layout_marginStart="5dp"
                      android:layout_weight="1"
                      android:text="Junction Road"
                      android:textSize="14sp" />
              </LinearLayout>
          </LinearLayout>
      
      </LinearLayout>
      

      【讨论】:

        【解决方案4】:

        试试这个

        <?xml version="1.0" encoding="utf-8"?>
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/dialog_nearest_charger"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:minHeight="40dp"
            android:orientation="horizontal"
            android:weightSum="10">
        
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:minWidth="55dp"
                android:layout_weight="1"
                android:orientation="vertical">
        
                <TextView
                    android:id="@+id/itemChargerDistance"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:textColor="@color/colorPrimary"
                    android:textStyle="bold"
                    android:textSize="20sp"
                    android:text="1.2" />
        
                <TextView
                    android:id="@+id/itemChargerUnits"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:textSize="12sp"
                    android:text="miles" />
        
            </LinearLayout>
        
            <ImageView
                android:id="@+id/itemChargerOperator"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:minWidth="40dp"
                android:layout_weight="1"
                app:srcCompat="@drawable/ic_launcher_background" />
        
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_marginStart="7dp"
                android:layout_weight="8"
                android:orientation="vertical">
        
                <TextView
                    android:id="@+id/itemChargerTitle"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:ellipsize="end"
                    android:singleLine="true"
                    android:maxLines="1"
                    android:text="Kinross Parkcvcxvxcgjghjhjhjvxcvcvcvcvcv and Ride"
                    android:textSize="18sp"
                    android:textStyle="bold" />
        
                <TextView
                    android:id="@+id/itemChargerAddress"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginStart="5dp"
                    android:textSize="14sp"
                    android:text="Junction Road" />
        
            </LinearLayout>
        
        </LinearLayout>
        

        输出

        【讨论】:

          猜你喜欢
          • 2020-11-17
          • 1970-01-01
          • 2019-05-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多