2011-06-22 7 views
32

Mam trudności z ponownym ustawianiem atrybutu maxLines programu TextView.Jak programowo wyłączyć maxLines TextView?

Po prostu wypróbowano ustawienie na 0 i nie działa. -1 powoduje awarię aplikacji. Mogę użyć prostszego obejścia i ustawić maxLines na 5000, ale nie chcę tego robić.

Jakieś pomysły, jak to zrobić?

AKTUALIZACJA

Cóż, znalazłem jeden problem .. mam ustawić Ellipsize jak dobrze ... Ja tylko zamiar użyć następującego rozwiązania:

TextView questionDetail = (TextView) mQuestionDetailHeader.findViewById(R.id.desc); 

questionDetail.setText(mCurrentQuestion.getQuestion()); 
questionDetail.setMaxLines(Integer.MAX_VALUE); //As in the android sourcecode 
questionDetail.setEllipsize(null); 
+0

Możliwy duplikat [jak zresetować Androida maxlines TextView?] (Http://stackoverflow.com/questions/5413394/how-to-reset-android-textview-maxlines) – blahdiblah

Odpowiedz

0

Model -1 nie powinien powodować awarii aplikacji. To rzeczywiście, co jest wykorzystywane wewnątrz TextView domyślnie:

case com.android.internal.R.styleable.TextView_maxLines: 
      setMaxLines(a.getInt(attr, -1)); 
      break; 

Ten fragment kodu pokazuje, że gdy android:maxLines nie jest określona, ​​wtedy kod wykorzystuje -1 aby ustawić wartość poprzez setMaxLines() funkcji.


Wykonałem również test aplikacji, aby zweryfikować moje wnioski. I to działa dobrze bez awarii:

public class HelloWorld extends Activity 
{   

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    {  
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity); 

     TextView text = (TextView)findViewById(R.id.text); 
     text.setMaxLines(-1);  
    } 
} 
+0

ale mam wyjątek : E/AndroidRuntime (10296): java.lang.ArrayIndexOutOfBoundsException E/AndroidRuntime (10296): at android.text.StaticLayout.getLineTop (StaticLayout.java:1240) E/AndroidRuntime (10296): at android.widget.TextView .getDesiredHeight (TextView.java:5472) E/AndroidRuntime (10296): na Android.widget.TextView.getDesiredHeight (TextView.java:5443) E/AndroidRuntime (10296): at android.widget.TextView.onMeasure (TextView. java: 5412) – Valdemar

+4

Po prostu zobaczyłem w kodzie źródłowym private void applySingleLine (boolean singleLine, boolean applyTransformation) { mSingleLine = singleLine; \t if (SingleLine) { \t \t ...}} else { setMaxLines (Integer.MAX_VALUE); setHorizontSrollowanie (fałsz); if (applyTransformation) { setTransformationMethod (null); } } } \t W rzeczywistości maksymalna wartość to Integer.MAX_VALUE. (setMaxLines (Integer.MAX_VALUE);) – Valdemar

+0

uzyskanie forece close, jeśli używam -1 w setMaxLines() –

-1

Do ustawiania maxLines do użytku tekst mTextView.setMaxLines (0) lub trzeba programowo-sojusznika miary tekstu wysokości i pomnożyć liczbę max linia The wynik powinien ustawić jako wysokość TextView

+0

Zbyt skomplikowane. Ponadto ustawienie setMaxLines (0) powoduje, że mój tekst znika ... – Valdemar

-2

jeśli chcesz mieć tylko jedną linię, to dlaczego nie użyć:

txtView.setSingleLine(true); 
+0

Nie tego chcę ... Potrzebuję więcej linii ... :( – Valdemar

+0

, a następnie myślę, że możesz użyć funkcji setMaxLines(). –

41

jak nie jest jeszcze zatwierdzony odpowiedź - właściwa sposób resetowania właściwości maxlines TextView to:

textView.setMaxLines(Integer.MAX_VALUE);

Zgodnie Valdemar „s komentarz i ten stackoverflow answer. Użycie -1 spowoduje ArrayIndexOutOfBoundsException.

Pamiętaj tylko END i MARQEE setEllipsize() ustawienia będą przestrzegane dla maxlines> = 2 według documentation:

Jeśli setMaxLines (int) został wykorzystany do ustawiania dwóch lub więcej linii, koniec i MARQUEE * są obsługiwane tylko (inne typy elipsy nie wykonają niczego).

Powiązane problemy