Как программно отключить TextView maxLines?
Мне сложно перепрограммировать атрибут maxLines
TextView
программно.
Просто попробовал установку 0
, и он не работает. -1
сбой приложения. Я мог бы использовать более простой способ обхода и установить maxLines
на 5000
, но я не хочу этого делать.
Любые идеи, как это сделать?
ОБНОВЛЕНО
Ну, я нашел одну проблему. Я также установил Ellipsize... Я просто использую следующее обходное решение:
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);
Ответы
Ответ 1
Поскольку еще нет одобренного ответа - правильный способ reset свойства maxlines TextView:
textView.setMaxLines(Integer.MAX_VALUE);
По Valdemar комментарий и этот fooobar.com/questions/138719/.... Использование -1 приведет к ArrayIndexOutOfBoundsException
.
Помните, что только значения параметров END
и MARQEE
setEllipsize() будут соблюдаться для maxlines >= 2 в соответствии с документацией:
Если setMaxLines (int) используется для установки двух или более строк, END и MARQUEE * поддерживаются только (другие типы эллипсинга не будут делать что-нибудь).
Ответ 2
-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);
}
}
Ответ 3
Для установки maxLines для текста используйте mTextView.setMaxLines(0) или вам необходимо программно измерить текст высоты и умножить на число макс. строк
Результат должен быть установлен как высота textView
Ответ 4
Если вы хотите иметь только одну строку, то почему бы вам не использовать:
txtView.setSingleLine(true);