Ширина текста Android возвращает 0, даже если представление уже создано - PullRequest
0 голосов
/ 28 августа 2018

У меня есть этот код:

      public AccountMenuBodyView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        LayoutInflater.from(context).inflate(R.layout.account_menu_body, this, true);
        myAccountView = findViewById(R.id.my_account);
      }

      @VisibleForTesting
      String setChipTextWithCorrectLength(String longDesc, String mediumDesc, String shortDesc, int clipWidth) {
        if (textWidthPixels(longDesc) > clipWidth) {
          if (textWidthPixels(mediumDesc) > clipWidth) {
            return shortDesc;
          } else {
            return mediumDesc;
          }
        }
        return longDesc;
      }


  public double textWidthPixels(String text) {
    Rect bounds = new Rect();
    Paint textPaint = myAccountView.getPaint();
    textPaint.getTextBounds(text, 0, text.length(), bounds);
    return bounds.width();
  }

так что инфлятор создаст mAccountView.

но когда я запускаю модульный тест, я вижу, textWidthPixels(..) возвращает 0

и bounds = Rect(0, 0 - 0, 0)

почему все это ноль?

тест:

  @Test
  public void clipWithMediumText() throws Exception {
    String clipText = accountMenuBodyView
        .setChipTextWithCorrectLength("very very very long text", "medium text", "short", 20);
    assertThat(clipText).isEqualTo("medium text");
  }
...