首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android ListView 單行顯示超出省略號:TextView 屬性 maxLines + ellipsize 實現

     編輯:程式設計疑難解答

核心解決方案:Item 布局 TextView 設置兩屬性


<TextView
    android:id="@+id/tv_content"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:maxLines="1"           <!-- 限制最大行數 -->
    android:ellipsize="end"         <!-- 超出處理:末尾省略號 -->
    android:textColor="#333"
    android:textSize="16sp" />

屬性詳解

ArrayAdapter 使用場景

無論用 ArrayAdapter、SimpleAdapter 還是自定義 BaseAdapter,**關鍵在 Item XML 布局**,Adapter 僅負責數據綁定,不影響顯示邏輯。

自定義 Adapter 示例(ViewHolder 模式)


public class MemoAdapter extends BaseAdapter {
    private List<String> data;
    private LayoutInflater inflater;

    public MemoAdapter(Context ctx, List<String> data) {
        this.data = data;
        this.inflater = LayoutInflater.from(ctx);
    }

    @Override public int getCount() { return data.size(); }
    @Override public Object getItem(int pos) { return data.get(pos); }
    @Override public long getItemId(int pos) { return pos; }

    @Override
    public View getView(int pos, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.item_memo, parent, false);
            holder = new ViewHolder();
            holder.tv = convertView.findViewById(R.id.tv_content);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.tv.setText(data.get(pos)); // XML 已配置 maxLines+ellipsize
        return convertView;
    }

    static class ViewHolder { TextView tv; }
}

進階:多行省略 (API 16+)


android:maxLines="3"
android:ellipsize="end"

holder.tv.setEllipsize(TextUtils.TruncateAt.END); // 確保生效

常見坑點

  1. 父佈局寬度 wrap_content 導致 TextView 無法計算可用寬度 → 父佈局用 match_parent 或固定寬度。
  2. 同時設置 android:singleLine="true" 與 maxLines 衝突 → 移除 singleLine。
  3. 文本含換行符 \n 導致實際多行 → text.replace("\n", " ") 預處理。

「Item 布局 TextView 加兩行屬性」—— ListView 單行省略號,不動 Adapter、不動 Java 代碼,純 XML 搞定。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
屬性值效果
android:maxLines1強制單行,超出不換行
android:ellipsizeend末尾截斷顯示 ... (Unicode U+2026)
android:singleLinetrue (已棄用)舊版單行強制,等同 maxLines=1 + ellipsize=end,不推薦