2013-05-15 77 views
13

我想設置textview的佈局,所以我可以使用getEllipsisCount()方法。但是,下面的代碼返回null作爲佈局值。 如何進行佈局然後使用getEllipsisCount(0)方法。如何使用textview.getLayout()?它返回空

public class MainActivity extends Activity { 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    TextView mytextview =(TextView) findViewById(R.id.textView1); 
    mytextview.setText(myText); 

     Layout layout = mytextview.getLayout(); 
     if(layout != null){ 
      mytextview.settext("very good layout worked\n"); 
     } 

} 
+0

我想你不能在'onCreate'方法完成之前調用這個方法。 –

回答

24

你太早調用它,這就是爲什麼它返回null

試試這個

ViewTreeObserver vto = mytextview.getViewTreeObserver(); 
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      Layout layout = mytextview.getLayout(); 
     } 
    }); 
+0

謝謝我做過工作 –

+2

值得注意的是,即使在onGlobalLayout中,getLayout仍然可以返回null。不幸的是,您需要弄清楚如何在代碼中處理這個問題。 – 2014-04-23 19:27:21

+6

我發現了一個解決方法,即使在全局佈局之後getLayout()可能爲空:我使用addOnPreDrawListener()來代替,並通過返回true來進行偵聽,直到getLayout()開始返回true,然後我使用它,調用removeOnPreDrawListener()並從此預抽聽者返回false以導致重新佈局 – dimsuz

0

呼叫mytextview.getLayout()onStartonResume回調。

0

首先,我不知道它是否是打字錯誤,或者是故意的,但是您已經聲明瞭一個「settext」方法,而不是預定義的setText。然而,爲了讓您的佈局的參考,我建議你如下:

LayoutInflater inflater = getLayoutInflater(); 

RelativeLayout textViewLayout = (RelativeLayout) inflater.inflate(R.layout.activity_main,null); 

if (textViewLayout != null) { 
    mytextview.setText("very good layout worked\n"); 
} 

假設你的TextView屬於RelativeLayout

2

documentation

公共最終佈局getLayout()

在API級別1返回當前正在使用 顯示文本佈局。如果文本或寬度最近發生更改,則該值可以爲null。

因此,可能您的文字有變化,或者您稱它爲時尚早。

看這個answer其中

這僅適用於佈局階段後聲明,否則返回佈局 將是空的,所以在你的代碼的適當位置調用它。

+1

gipi,請使用報價標籤報價,而不是代碼標籤;)修復它爲你。 – RvdK

+0

謝謝@RvdK,:) – gipi

1

呼叫

TextView.onPreDraw(); 

它創建的佈局。

+1

提供有關被問題的更多詳細信息或示例代碼。 –

相關問題