57 Stimmen

Wie deaktiviert man die TextView maxLines programmgesteuert?

Ich habe Schwierigkeiten, das maxLines-Attribut eines TextView programmatisch zurückzusetzen.

Habe gerade versucht, es auf 0 zu setzen und es funktioniert nicht. -1 stürzt die Anwendung ab. Ich könnte einen einfacheren Workaround verwenden und maxLines auf 5000 setzen, aber das möchte ich nicht.

Irgendwelche Ideen, wie man das macht?

AKTUALISIERT

Nun, ich habe ein Problem gefunden... Ich habe auch das Ellipsize gesetzt... Ich werde einfach den folgenden Workaround verwenden:

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

questionDetail.setText(mCurrentQuestion.getQuestion());
questionDetail.setMaxLines(Integer.MAX_VALUE); //Wie im Android-Quellcode
questionDetail.setEllipsize(null);

0 Stimmen

89voto

alexgophermix Punkte 4004

Da es noch keine genehmigte Antwort gibt - der richtige Weg, die maxlines-Eigenschaft des TextView zurückzusetzen, ist:

textView.setMaxLines(Integer.MAX_VALUE);

Laut Kommentar von Valdemar und dieser Stackoverflow-Antwort. Die Verwendung von -1 führt zu einem ArrayIndexOutOfBoundsException.

Beachten Sie, dass nur die Einstellungen END und MARQEE von setEllipsize() respektiert werden, wenn maxlines >= 2 gemäß der Dokumentation:

Wenn setMaxLines(int) verwendet wurde, um zwei oder mehr Zeilen festzulegen, werden nur END und MARQUEE* unterstützt (andere Arten von Ellipsen werden nichts tun).

-2voto

bladeX Punkte 833

Um die maxLines für einen Text festzulegen, verwenden Sie mTextView.setMaxLines(0) oder Sie müssen die Höhe des Textes programmgesteuert messen und mit der Anzahl der maximalen Zeilen multiplizieren. Das Ergebnis sollte als Höhe des TextViews festgelegt werden.

-3voto

Paresh Mayani Punkte 125623

Wenn Sie nur eine Zeile haben möchten, warum verwenden Sie nicht:

    txtView.setSingleLine(true);

-6voto

inazaruk Punkte 73187

Die -1 sollte Ihre Anwendung nicht zum Absturz bringen. Dies ist tatsächlich das, was standardmäßig im TextView verwendet wird:

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

Dieses Code-Stück zeigt, dass wenn android:maxLines nicht angegeben ist, dann der Code -1 verwendet, um den Wert über die Funktion setMaxLines() festzulegen.


Ich habe auch eine Testanwendung erstellt, um meine Schlussfolgerungen zu überprüfen. Und sie funktioniert einwandfrei, ohne abzustürzen:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X