2013-04-15 79 views
5

我正在嘗試向textview添加文本,我已將寬度設置爲Wrap_content。我試圖獲得這個textview的寬度。但在所有情況下它都顯示爲0。如何在設置文本後獲得文本視圖的寬度。在Android中如何獲取設置爲Wrap_Content的Textview的寬度

的代碼是:

 LinearLayout ll= new LinearLayout(this); 
     ll.setOrientation(LinearLayout.VERTICAL); 
     TextView tv = new TextView(this); 
     tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); 
     ll.addView(tv); 
     tv.setText("Hello 1234567890-0987654321qwertyuio787888888888888888888888888888888888888888888888888"); 
     System.out.println("The width is == "+tv.getWidth());// result is 0 
     this.setContentView(ll); 

請建議。 在此先感謝。

回答

1

你打電話給什麼時候?它已經被吸引到屏幕上嗎?

聽起來好像你打電話getWidth()太早。

您還可以採取look at this question

2

在佈局完全構建之前,您無法獲取具有動態大小的視圖的寬度。這意味着你無法在onCreate()中獲取它。一種方法是創建一個繼承自TextView並覆蓋onSizeChanged()的類。

6

只有在佈局過程完成後(http://developer.android.com/reference/android/view/View.html#Layout),具有動態寬度/高度的視圖纔會獲得其正確大小。
您可以OnLayoutChangeListener添加到您的TextView並獲得它的尺寸有:

tv.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { 
      public void onLayoutChange(View v, int left, int top, int right, int bottom, 
             int oldLeft, int oldTop, int oldRight, int oldBottom) { 
         final int width = right - left; 
         System.out.println("The width is == " + width);     
    }); 
+0

什麼其等效爲API 8及以上? –

+0

您可以繼承TextView並覆蓋onLayout()。從它調用super.onLayout()並保存TextView的寬度。這應該適用於任何API級別。 – Const

+0

類需要API級別11(當前最小值爲8):android.view.View.OnLayoutChangeListener –

-1

你應該使用這樣的:

textView.getMeasuredWidth();

0

這個工作對我來說:

RelativeLayout.LayoutParams mTextViewLayoutParams = (RelativeLayout.LayoutParams) mTextView.getLayoutParams(); 
mTextView.setText(R.string.text); 
mTextView.measure(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
int width = mShareTip.getMeasuredWidth(); 
//use the width to do what you want 
mShareTip.setLayoutParams(mShareTipLayoutParams); 
0

你可以試試這個:

textView.measure(0,0); 
int width = textView.getMeasuredWidth(); 
0

招呼使用這種方法:

textview.post(new Runnable() { 
    @Override 
    public void run() { 
     int width = textview.getWidth(); 
     int height = textview.getHeight(); 
     textview.setText(String.valueOf(width +","+ height)); 
    } 

});

源:https://gist.github.com/omorandi/59e8b06a6e81d4b8364f

+0

感謝您使用此代碼段,它可能會提供一些有限的即時幫助。一個[正確的解釋將大大提高其長期價值](/ meta.stackexchange.com/q/114762/206345)通過顯示_why_這是一個很好的解決方案,並將使它對未來的讀者更有用其他類似的問題。請[編輯]你的答案以添加一些解釋,包括你所做的假設。 – Mogsdad

相關問題