2014-09-21 163 views
0

我有一個自定義列表視圖。要求是,如果任何行的文本超過兩行,則只顯示兩行,並在文本上方顯示更多按鈕,並且當用戶單擊更多按鈕時,應該顯示所有行的內容,無論3或4行在哪裏。我搜索各種博客,但無法獲得解決方案。任何人都可以幫助我嗎? 爲了得到使用下面的代碼的文本行:Android - 如果行超過兩行,則在列表行中顯示更多按鈕

   ViewTreeObserver vto = msg.getViewTreeObserver(); 
       vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
        @Override 
        public void onGlobalLayout() { 
         Layout l = msg.getLayout(); 
         if (l != null){ 
          int lines = l.getLineCount(); 
          if (lines > 0) 
           if (l.getEllipsisCount(lines-1) > 0){ 
            txtMore.setVisibility(View.VISIBLE);          msg.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
           } 
         } 
        } 
       }); 

但問題是,更多的按鈕沒有顯示在列表比可見光區域更多。

回答

0

使用onGlobalLayoutListner,它沒有被調用不可見的列表項。 當使用下面的代碼,它的工作。

ViewTreeObserver vto = msg.getViewTreeObserver(); 
vto.addOnPreDrawListener(new OnPreDrawListener() {       
     @Override 
     public boolean onPreDraw() { 
     // TODO Auto-generated method stub 
      Layout l = msg.getLayout(); 
         if (l != null){ 
          int lines = l.getLineCount(); 
          if (lines > 0) 
           if (l.getEllipsisCount(lines-1) > 0){ 
            txtMore.setVisibility(View.VISIBLE);          msg.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
           } 
         } 
      return true; 
     } 
    });