我的textview中有很多行,我只让它显示三行,最后显示...,我设置了android:maxLines="3"和android:ellipsize="end",但出现的问题是只显示两行就显示...,请大侠们提供解决方法

解决方案 »

  1.   

    android:maxLines="3"设置为4看下情况
      

  2.   

    <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"
    />
      

  3.   

    这个好像是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     } } 
    }
    }
      

  4.   

    你是不是限制过textView的大小?没用warp content啊。我像你这样就对了啊
      

  5.   

    要不 都是用 warp content 试一下。
      

  6.   

    10楼正解这是一个android 的bug ,如果你只是检查英文可以用10楼的方法,如果你是检查的中文,日文这种需要分词滴,就复杂了。
      

  7.   

    正常情况下是三行,很有可能你设定的高度自能显示两行,另外一行你没看到,虽然是wrap_content,可能被其它控件占用了位置,android会把每一行多余的后面显示“...”,所以你把高度拉大,再看看效果
      

  8.   

    我刚也遇到了。。这样解决 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行了。。
      

  9.   

    10楼 正解           这是给BUG