| 屬性 | 值 | 效果 |
| android:maxLines | 1 | 強制單行,超出不換行 |
| android:ellipsize | end | 末尾截斷顯示 ... (Unicode U+2026) |
| android:singleLine | true (已棄用) | 舊版單行強制,等同 maxLines=1 + ellipsize=end,不推薦 |
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); // 確保生效
常見坑點
- 父佈局寬度
wrap_content 導致 TextView 無法計算可用寬度 → 父佈局用 match_parent 或固定寬度。
- 同時設置
android:singleLine="true" 與 maxLines 衝突 → 移除 singleLine。
- 文本含換行符
\n 導致實際多行 → text.replace("\n", " ") 預處理。
「Item 布局 TextView 加兩行屬性」—— ListView 單行省略號,不動 Adapter、不動 Java 代碼,純 XML 搞定。
- 上一篇文章: 正則表達式提取 content 開頭的非中文字符:[^\u4e00-\u9fa5] 匹配非漢字字符
- 下一篇文章: Div CSS 佈局核心思維:何時嵌套、何時獨立——從設計圖到結構的實戰分析
Copyright ©
程式碼之家 All Rights Reserved