Как отключить TextView maxLines программно? - PullRequest
37 голосов
/ 22 июня 2011

Я испытываю трудности с программным сбросом атрибута maxLines для TextView.

Только что попытался установить значение 0, и оно не работает. -1 вылетает приложение. Я мог бы использовать более простой обходной путь и установить maxLines на 5000, но я не хочу этого делать.

Есть идеи, как это сделать?

ОБНОВЛЕНО

Ну, я нашел одну проблему ... Я также установил размер эллипса ... Я просто собираюсь использовать следующий обходной путь:

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

Ответы [ 4 ]

54 голосов
/ 20 декабря 2013

Поскольку еще нет утвержденного ответа - правильный способ сброса свойства maxlines TextView:

textView.setMaxLines(Integer.MAX_VALUE);

Согласно Valdemar комментарий и этот stackoverflow ответ .Использование -1 приведет к ArrayIndexOutOfBoundsException.

Имейте в виду, что только настройки END и MARQEE setEllipsize () будут соблюдаться для maxlines> = 2 в соответствии с документацией :

Если setMaxLines (int) был использован для установки двух или более строк, поддерживаются только END и MARQUEE * (другие типы с эллипсизацией ничего не сделают).

0 голосов
/ 22 июня 2011

Для установки maxLines для текста используйте mTextView.setMaxLines (0) или вам нужно программно измерить высоту текста и умножить на количество строк макс. Результат должен быть установлен как высота textView

0 голосов
/ 22 июня 2011

, если вы хотите иметь только одну строку, то почему бы вам не использовать:

    txtView.setSingleLine(true);
0 голосов
/ 22 июня 2011

-1 не должно вызывать сбой вашего приложения. Это на самом деле то, что используется внутри TextView по умолчанию:

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

Этот фрагмент кода показывает, что когда android:maxLines не указан, тогда код использует -1 для установки значения с помощью функции setMaxLines().


Я также сделал тестовое приложение, чтобы проверить свои выводы. И все работает без сбоев:

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);    
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...