textview中多行显示,最后显示"..." 我的textview中有很多行,我只让它显示三行,最后显示...,我设置了android:maxLines="3"和android:ellipsize="end",但出现的问题是只显示两行就显示...,请大侠们提供解决方法 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 android:maxLines="3"设置为4看下情况 <TextView android:id="@+id/jgli_title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_toRightOf="@+id/jgli_pic" android:layout_alignParentTop="true" android:layout_marginTop="5dip" android:layout_alignParentRight="true" android:layout_marginRight="5dip" android:maxLines="3" android:ellipsize="end" android:text="@+id/bb_price" style="@style/listview_item_text" /> 这个好像是sdk的一个老bug,我上网查过的,可以自己写个继承TextView的类,再实现其中几个方法解决(注意得在java文件中设置maxLines)package com.jebeljing.TextViewTest;import java.util.ArrayList; import java.util.List; import android.content.Context; import android.graphics.Canvas; import android.text.Layout; import android.text.Layout.Alignment; import android.text.StaticLayout; import android.text.TextUtils.TruncateAt; import android.util.AttributeSet; import android.widget.TextView; public class EllipsizingTextView extends TextView { private static final String ELLIPSIS = "..."; public interface EllipsizeListener { void ellipsizeStateChanged(boolean ellipsized); } private final List<EllipsizeListener> ellipsizeListeners = new ArrayList<EllipsizeListener>(); private boolean isEllipsized; private boolean isStale; private boolean programmaticChange; private String fullText; private int maxLines = -1; private float lineSpacingMultiplier = 1.0f; private float lineAdditionalVerticalPadding = 0.0f; public EllipsizingTextView(Context context) { super(context); } public EllipsizingTextView(Context context, AttributeSet attrs) { super(context, attrs); } public EllipsizingTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public void addEllipsizeListener(EllipsizeListener listener) { if (listener == null) { throw new NullPointerException(); } ellipsizeListeners.add(listener); } public void removeEllipsizeListener(EllipsizeListener listener) { ellipsizeListeners.remove(listener); } public boolean isEllipsized() { return isEllipsized; } @Override public void setMaxLines(int maxLines) { super.setMaxLines(maxLines); this.maxLines = maxLines; isStale = true; } public int getMaxLines() { return maxLines; } @Override public void setLineSpacing(float add, float mult) { this.lineAdditionalVerticalPadding = add; this.lineSpacingMultiplier = mult; super.setLineSpacing(add, mult); } @Override protected void onTextChanged(CharSequence text, int start, int before, int after) { super.onTextChanged(text, start, before, after); if (!programmaticChange) { fullText = text.toString(); isStale = true; } } @Override protected void onDraw(Canvas canvas) { if (isStale) { super.setEllipsize(null); resetText(); } super.onDraw(canvas); } private void resetText() { int maxLines = getMaxLines(); String workingText = fullText; boolean ellipsized = false; if (maxLines != -1) { Layout layout = createWorkingLayout(workingText); if (layout.getLineCount() > maxLines) { System.out.println(layout.getLineCount()+"\t"+maxLines); workingText = fullText.substring(0, layout.getLineEnd(maxLines - 1)).trim(); Layout layout2=createWorkingLayout(workingText + ELLIPSIS); while (layout2.getLineCount() > maxLines) { System.out.println(layout2.getLineCount()+"\t"+maxLines); int lastSpace = workingText.lastIndexOf(' '); System.out.println(lastSpace); if (lastSpace == -1) { break; } workingText = workingText.substring(0, lastSpace); } workingText = workingText + ELLIPSIS; ellipsized = true; } } if (!workingText.equals(getText())) { programmaticChange = true; try { setText(workingText); } finally { programmaticChange = false; } } isStale = false; if (ellipsized != isEllipsized) { isEllipsized = ellipsized; for (EllipsizeListener listener : ellipsizeListeners) { listener.ellipsizeStateChanged(ellipsized); } } } private Layout createWorkingLayout(String workingText) { return new StaticLayout(workingText, getPaint(), getWidth() - getPaddingLeft() - getPaddingRight(), Alignment.ALIGN_NORMAL, lineSpacingMultiplier, lineAdditionalVerticalPadding, false); } @Override public void setEllipsize(TruncateAt where) { // Ellipsize settings are not respected } } }} 你是不是限制过textView的大小?没用warp content啊。我像你这样就对了啊 要不 都是用 warp content 试一下。 10楼正解这是一个android 的bug ,如果你只是检查英文可以用10楼的方法,如果你是检查的中文,日文这种需要分词滴,就复杂了。 正常情况下是三行,很有可能你设定的高度自能显示两行,另外一行你没看到,虽然是wrap_content,可能被其它控件占用了位置,android会把每一行多余的后面显示“...”,所以你把高度拉大,再看看效果 我刚也遇到了。。这样解决 android:ellipsize="end"这句删了就好。。楼主试下。。 <TextView android:id="@+id/txt_mess" android:layout_width="110dip" android:layout_height="wrap_content" android:maxLines="3" android:singleLine="false" android:hint="Ta好神秘,什么都没留下aaaaaaaaaaaaaaaasasasasas" />就能显示出3行了。。 10楼 正解 这是给BUG mono for android不显示hello world 界面 syslog输出在android平台上如何使用? 跪求!!安卓如何自定义键盘?? String.xml问题 老大让做个语音识别的功能,大家都知道什么工具可以利用呢 onFocusChange android listView 求助:自定义锁屏、自定义主题代码 求教 地图定位信息怎么回传给activity retrofit2每次请求都需要new Retrofit.Builder();吗? QRCODE 二维码问题 求大神解答 android 按钮点击事件中拿不到static对象的值
android:id="@+id/jgli_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/jgli_pic"
android:layout_alignParentTop="true"
android:layout_marginTop="5dip"
android:layout_alignParentRight="true"
android:layout_marginRight="5dip"
android:maxLines="3"
android:ellipsize="end"
android:text="@+id/bb_price"
style="@style/listview_item_text"
/>
(注意得在java文件中设置maxLines)package com.jebeljing.TextViewTest;import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.Canvas;
import android.text.Layout;
import android.text.Layout.Alignment;
import android.text.StaticLayout;
import android.text.TextUtils.TruncateAt;
import android.util.AttributeSet;
import android.widget.TextView; public class EllipsizingTextView extends TextView {
private static final String ELLIPSIS = "...";
public interface EllipsizeListener {
void ellipsizeStateChanged(boolean ellipsized);
}
private final List<EllipsizeListener> ellipsizeListeners = new ArrayList<EllipsizeListener>();
private boolean isEllipsized;
private boolean isStale;
private boolean programmaticChange;
private String fullText;
private int maxLines = -1;
private float lineSpacingMultiplier = 1.0f;
private float lineAdditionalVerticalPadding = 0.0f;
public EllipsizingTextView(Context context) {
super(context);
}
public EllipsizingTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public EllipsizingTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void addEllipsizeListener(EllipsizeListener listener) {
if (listener == null) {
throw new NullPointerException();
}
ellipsizeListeners.add(listener);
}
public void removeEllipsizeListener(EllipsizeListener listener) {
ellipsizeListeners.remove(listener);
}
public boolean isEllipsized() {
return isEllipsized;
}
@Override
public void setMaxLines(int maxLines) {
super.setMaxLines(maxLines);
this.maxLines = maxLines;
isStale = true;
}
public int getMaxLines() {
return maxLines;
}
@Override
public void setLineSpacing(float add, float mult) {
this.lineAdditionalVerticalPadding = add;
this.lineSpacingMultiplier = mult;
super.setLineSpacing(add, mult);
}
@Override
protected void onTextChanged(CharSequence text, int start, int before, int after) {
super.onTextChanged(text, start, before, after);
if (!programmaticChange) {
fullText = text.toString();
isStale = true;
}
}
@Override
protected void onDraw(Canvas canvas) {
if (isStale) {
super.setEllipsize(null);
resetText();
}
super.onDraw(canvas);
}
private void resetText() {
int maxLines = getMaxLines();
String workingText = fullText;
boolean ellipsized = false;
if (maxLines != -1) {
Layout layout = createWorkingLayout(workingText);
if (layout.getLineCount() > maxLines) {
System.out.println(layout.getLineCount()+"\t"+maxLines);
workingText = fullText.substring(0, layout.getLineEnd(maxLines - 1)).trim();
Layout layout2=createWorkingLayout(workingText + ELLIPSIS);
while (layout2.getLineCount() > maxLines) {
System.out.println(layout2.getLineCount()+"\t"+maxLines);
int lastSpace = workingText.lastIndexOf(' ');
System.out.println(lastSpace);
if (lastSpace == -1) {
break;
}
workingText = workingText.substring(0, lastSpace);
}
workingText = workingText + ELLIPSIS;
ellipsized = true;
}
}
if (!workingText.equals(getText())) {
programmaticChange = true;
try {
setText(workingText);
} finally {
programmaticChange = false;
}
}
isStale = false;
if (ellipsized != isEllipsized) {
isEllipsized = ellipsized;
for (EllipsizeListener listener : ellipsizeListeners) {
listener.ellipsizeStateChanged(ellipsized);
}
}
}
private Layout createWorkingLayout(String workingText) {
return new StaticLayout(workingText, getPaint(), getWidth() - getPaddingLeft() - getPaddingRight(),
Alignment.ALIGN_NORMAL, lineSpacingMultiplier, lineAdditionalVerticalPadding, false);
}
@Override
public void setEllipsize(TruncateAt where) {
// Ellipsize settings are not respected } }
}
}
<TextView
android:id="@+id/txt_mess"
android:layout_width="110dip"
android:layout_height="wrap_content"
android:maxLines="3"
android:singleLine="false"
android:hint="Ta好神秘,什么都没留下aaaaaaaaaaaaaaaasasasasas"
/>
就能显示出3行了。。