как изменить текст, если Ellipsized в Android TextView - PullRequest
0 голосов
/ 12 сентября 2018

Я видел это сообщение о том, как проверить, имеет ли текст размер эллипса.

Я хочу программно изменить текст, если он ellipsized.

однако, если я использую обратный вызов в textView.post(), изменение текста будет отображаться в пользовательском интерфейсе пользователя или вызывать проблемы с производительностью.

дополнительный комментарий:

Я пытался измерить ширину текста и ширину просмотра в treeObserver.preDraw(), но при отладке я вижу случай, когда обе ширины равны и, тем не менее, текст заменяется, когда он не усекается.

замена условия на textWidth < viewWidth приводит к тому, что несколько случаев non-ellipsized текста по-прежнему заменяются более коротким.

final ViewTreeObserver[] viewTreeObserver = {myAccountView.getViewTreeObserver()};
viewTreeObserver[0].addOnPreDrawListener(
    new OnPreDrawListener() {
      @Override
      public boolean onPreDraw() {
        int chipWidth =
            myAccountView.getMeasuredWidth()
                - myAccountView.getPaddingLeft()
                - myAccountView.getPaddingRight();
        if (chipWidth > 0) {
          myAccountView.setText(
              setChipTextWithCorrectLength(
                  getContext().getString(R.string.desc_long_length),
                  getContext().getString(R.string.desc_meduim_length),
                  getContext().getString(R.string.short_length),
                  chipWidth));
          viewTreeObserver[0] = myAccountView.getViewTreeObserver();
          if (viewTreeObserver[0].isAlive()) {
            viewTreeObserver[0].removeOnPreDrawListener(this);
          }
        }
        return true;
      }
    });
...