2013-04-15 8 views
5

Sto provando ad aggiungere un testo alla vista testo per cui ho impostato la larghezza come Wrap_content. Sto cercando di ottenere la larghezza di questa vista testuale. Ma mostra 0 in tutti i casi. Come posso ottenere la larghezza della vista testo dopo aver impostato il testo.In Android come ottenere la larghezza della Textview che è impostata su Wrap_Content

il codice è il:

 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); 

si prega di suggerire. Grazie in anticipo.

risposta

1

Quando stai chiamando questo? È già stato disegnato sullo schermo?

Sembra che chiami getWidth() troppo presto.

È anche possibile prendere un look at this question.

2

Non è possibile ottenere la larghezza di una vista con dimensioni dinamiche prima che il layout sia completamente creato. Ciò significa che non c'è modo di metterlo in onCreate(). Un modo sarebbe quello di creare una classe che eredita da TextView e sostituisce onSizeChanged().

6

Le viste con larghezza/altezza dinamica hanno le dimensioni corrette solo dopo aver completato un processo di layout (http://developer.android.com/reference/android/view/View.html#Layout).
È possibile aggiungere al vostro OnLayoutChangeListener TextView e ottenere la sua dimensione non:

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

che cosa è il suo equivalente per le API 8 e superiori? –

+0

È possibile creare sottoclasse di TextView e sovrascrivere onLayout(). Chiama super.onLayout() da esso e salva la larghezza di TextView. Questo dovrebbe funzionare per qualsiasi livello API. – Const

+0

La classe richiede il livello API 11 (il minimo corrente è 8): android.view.View.OnLayoutChangeListener –

-1

si dovrebbe usare questo:

textView.getMeasuredWidth();

0

questo funziona per me:

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

si può provare questo:

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

uso ciao questo metodo:

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

});

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

+0

Grazie per questo snippet di codice, che potrebbe fornire un aiuto immediato limitato. Una [spiegazione corretta migliorerebbe notevolmente il suo valore a lungo termine] (// meta.stackexchange.com/q/114762/206345) mostrando _why_ questa è una buona soluzione al problema e lo renderebbe più utile ai futuri lettori con altre domande simili. Per favore [modifica] la tua risposta per aggiungere qualche spiegazione, incluse le ipotesi che hai fatto. – Mogsdad