Как я могу всегда вставлять текст в однострочный TextView? [Дубликат]

Глядя на другие ответы, кажется, что есть много вещей, которые могут вызвать эту ошибку. Вот еще один.

Если у вас

  • есть пользовательский вид
  • , добавлено свойство @IBInspectable
  • , а затем удалено его

Тогда вы также можете получить ошибку, аналогичную

Не удалось установить (xxx) пользовательское проверенное свойство в [Свой пользовательский вид] ...: этот класс не ключевое значение, кодирующее для ключа [xxx].

Решение состоит в том, чтобы удалить старое свойство.

Откройте инспектор удостоверений для своего класса, выберите имя свойства в разделе «Определенные пользователем атрибуты времени выполнения» и нажмите кнопку «минус» (-).

743
задан Nathan Fig 19 May 2015 в 03:03
поделиться

32 ответа

На самом деле решение находится в классе DialogTitle в Google ... хотя оно не так эффективно, как принятое, оно намного проще и легко адаптируется.

public class SingleLineTextView extends TextView {

  public SingleLineTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    setSingleLine();
    setEllipsize(TruncateAt.END);
  }

  public SingleLineTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    setSingleLine();
    setEllipsize(TruncateAt.END);
  }

  public SingleLineTextView(Context context) {
    super(context);
    setSingleLine();
    setEllipsize(TruncateAt.END);
  }

  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    final Layout layout = getLayout();
    if (layout != null) {
      final int lineCount = layout.getLineCount();
      if (lineCount > 0) {
        final int ellipsisCount = layout.getEllipsisCount(lineCount - 1);
        if (ellipsisCount > 0) {

          final float textSize = getTextSize();

          // textSize is already expressed in pixels
          setTextSize(TypedValue.COMPLEX_UNIT_PX, (textSize - 1));

          super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
      }
    }
  }

}
40
ответ дан Idolon 21 August 2018 в 04:31
поделиться
  • 1
    Интересно, почему это еще не было? Это, конечно, взлом по натуре, но очень простое решение. Для приложения, которое выкладывает только несколько прокручиваемых SimpleLineTextViews, это самый простой способ. Отличная находка! – Tom 24 January 2013 в 21:19
  • 2
    Не работает. Пробовал это на Android 4.1 – AndroidDev 30 July 2013 в 11:38
  • 3
    @SergioCarneiro nice find, но super.onMeasure(widthMeasureSpec, heightMeasureSpec); не вызывает рекурсии, но measure(widthMeasureSpec, heightMeasureSpec);. Поэтому я изменил на «меру (widthMeasureSpec, heightMeasureSpec); & quot; и это работает. Я только что протестировал на Android 4.4 (Nexus 5) и Android 4.0.4 (Samsung SII-LTE), и он отлично справился с обоими из них (я даже использовал собственный японский шрифт OTF). Захватите мое исправление здесь: gist.github.com/mrleolink/0dfeef749da1b854a44b – Leo 30 June 2014 в 13:06
  • 4
    лучший ответ. используя версию LeoLink, она хорошо работает на моих эмуляторах 2.3 и 4.0 и реальных устройствах. если они используются в списке, не забудьте вызвать requestLayout () после установки текста. – adbie 20 January 2015 в 12:41
  • 5
    Я имею forked версию @LeoLink, она использует maxLines и requestLayout() на setText, как сказал @adbie. FixedLineTextView - & gt; gist.github.com/Kevinrob/09742d9069e4e4e4ab66 – Kevin Robatel 24 April 2015 в 07:57
1
ответ дан gadolf 31 October 2018 в 23:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: