пользовательский вид Android с Dymanic MaxHeight - PullRequest
0 голосов
/ 26 июня 2019

У меня есть пользовательское представление Android (наследуется от MaterialCardView).Я хочу установить max_height динамически:

if the view wants height of  x < 648dp then set the max_height to be 648dp
if the view wants height of  x >= 648 then set the max_height to be 600dp 

Основываясь на этом сообщении , я переопределил onMeasure

       @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    ...
    int heightSize = MeasureSpec.getSize(heightMeasureSpec);
    int heightMode = MeasureSpec.getMode(heightMeasureSpec);
    int effectiveMaxHeight = getEffectiveMaxHeight(heightSize);
    switch (heightMode) {
      case MeasureSpec.AT_MOST:
        heightMeasureSpec =
            MeasureSpec.makeMeasureSpec(
                Math.min(heightSize, effectiveMaxHeight), MeasureSpec.AT_MOST);
        break;
      case MeasureSpec.UNSPECIFIED:
        heightMeasureSpec = MeasureSpec.makeMeasureSpec(effectiveMaxHeight, MeasureSpec.AT_MOST);
        break;
      case MeasureSpec.EXACTLY:
        heightMeasureSpec =
            MeasureSpec.makeMeasureSpec(
                Math.min(heightSize, effectiveMaxHeight), MeasureSpec.EXACTLY);
        break;
    }
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  }

  private int getEffectiveMaxHeight(int heightSize) {
    int extendedMaxHeight =
        getContext().getResources().getDimensionPixelSize(R.dimen.popover_extended_max_height);
    return (heightSize >= extendedMaxHeight)
        ? getContext().getResources().getDimensionPixelSize(R.dimen.popover_max_height)
        : extendedMaxHeight;
  }

Но, когда я отлаживаюЯ всегда вижу высоту 572dp с включенным представлением прокрутки.Неважно, как долго контент.

Я проверил, и представление прокрутки не имеет fixed height или max_height.

Что еще я должен проверить дважды?

...