2013-04-15 2 views
5

Wrap_contentとして幅を設定したテキストをテキストに追加しようとしています。私はこのテキストビューの幅を取得しようとしています。しかし、すべてのケースで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()で取得できる方法はありません。 1つの方法は、TextViewから継承してonSizeChanged()をオーバーライドするクラスを作成することです。

6

動的な幅/高さのビューは、レイアウト処理が完了した後にのみ正しいサイズになります(http://developer.android.com/reference/android/view/View.html#Layout)。
あなたのTextViewのにOnLayoutChangeListener追加して取得することができ、それは、サイズがあります:

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

関連する問題