2011-02-22 84 views
2

所以我有一個擴展的TextView,我試圖創建一個StaticLayout,以便我可以通過調用getEllipsisCount來檢測文本是否在屏幕外。StaticLayout getEllipsisCount返回0,當我知道它是橢圓化?

所以從TextView的範圍內,我建造像這樣的staticlayout:

layout = new StaticLayout(getText(), getPaint(), getWidth(), Alignment.ALIGN_NORMAL, 0f, 0f, false); 

但是,即使layout.getLineCount()返回行的正確數目,getEllipsisCount(N)永遠不會返回> 0,甚至當我可以清楚地看到它添加省略號。

所以我猜這已經成爲一種不好的方式來檢測文本是否已經離開屏幕......所以沒有人知道更合適的方式,或如何讓這個工作?

+0

難道是StaticLayout需要先繪製?有沒有一種方法可以用來測試省略號而不顯示用戶? – 2011-02-28 14:52:39

+0

你可以確定一個textview是橢圓化的嗎? – sgarman 2011-11-10 22:38:13

+0

不,我相信在返回有效值之前必須繪製文本。但我最初問這是爲了創建另一個問題的解決方案,看看你是否需要在那裏:http://stackoverflow.com/questions/5033012/auto-scale-textview-text-to-fit-within-bounds – 2011-11-11 03:58:49

回答

1

我也在Android 4.2.2上遇到過這個問題。我能夠通過使用ViewTreeObserver API來設置onGlobalLayout事件的回調並啓動繞過它延遲可運行在那裏:

ViewTreeObserver observer = _someView.getViewTreeObserver();  
observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() 
       @Override  
       public void onGlobalLayout() { 
        _somView.getViewTreeObserver().removeGlobalOnLayoutListener(this);  
        _textView.postDelayed(new Runnable() { 
         public void run() { 
          // Code that uses ellipsis detection here 
         } 
        }, 10); 
       }); 

這是無可否認有點hackish的,但它是我能得到的唯一途徑省略號被正確檢測,否則它只是不斷報告沒有發生省略。在我的測試中,延遲對於這項工作至關重要,但整個項目的執行速度足夠快,以便可以根據這些信息隱藏/顯示元素,而不會出現UI閃爍現象。

+1

+1謝謝 - 能夠使用這個'_textView.post'而不是'.postDelayed'。 – 2013-08-26 19:29:17