2013-04-15 9 views
5

Próbuję dodać tekst do widoku tekstowego, dla którego ustawiłem szerokość jako Wrap_content. Próbuję uzyskać szerokość tego tekstu. Ale pokazuje 0 we wszystkich przypadkach. W jaki sposób mogę uzyskać szerokość widoku tekstowego po ustawieniu w nim tekstu?W systemie Android, jak uzyskać szerokość widoku tekstu ustawionego na Wrap_Content

kod jest jako:

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

Proszę zasugerować. Z góry dzięki.

Odpowiedz

1

Kiedy to nazywasz? Czy już został wyświetlony na ekranie?

Wygląda na to, że zbyt wcześnie dzwonisz pod numer getWidth().

Możesz także wziąć look at this question.

2

Nie można uzyskać szerokości widoku z dynamicznym rozmiarem, zanim układ zostanie całkowicie zbudowany. Oznacza to, że nie ma możliwości, aby uzyskać go naCreate(). Jednym ze sposobów byłoby stworzenie klasy dziedziczącej z TextView i przesłaniającej onSizeChanged().

6

Widoki z dynamiczną szerokością/wysokością uzyskują poprawny rozmiar dopiero po zakończeniu procesu układania (http://developer.android.com/reference/android/view/View.html#Layout).
Możesz dodać OnLayoutChangeListener do TextView i dostać to wielkość tam:

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

co jest jego odpowiednik dla API 8 i powyżej? –

+0

Możesz podklasować TextView i zastąpić onLayout(). Wywołaj z niego super.onLayout() i zapisz szerokość TextView. To powinno działać na każdym poziomie interfejsu API. – Const

+0

Klasa wymaga poziomu API 11 (bieżący min to 8): android.view.View.OnLayoutChangeListener –

-1

Należy użyć tego:

textView.getMeasuredWidth();

0

działa to dla mnie:

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

można spróbować to:

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

use cześć tej metody:

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

});

źródło: https://gist.github.com/omorandi/59e8b06a6e81d4b8364f

+0

Dziękujemy za ten fragment kodu, który może zapewnić ograniczoną, natychmiastową pomoc. [Poprawne wyjaśnienie znacznie poprawiłoby jego długoterminową wartość] (// meta.stackexchange.com/q/114762/206345), pokazując _why_ to jest dobre rozwiązanie problemu i sprawiłoby, że byłby bardziej przydatny dla przyszłych czytelników z inne, podobne pytania. Proszę [edytuj] swoją odpowiedź, aby dodać wyjaśnienia, w tym założenia, które podjąłeś. – Mogsdad

Powiązane problemy