コード例 #1
0
ファイル: MDRootLayout.java プロジェクト: cuishenghu/hewuzhe
  @Override
  protected void onLayout(boolean changed, final int l, int t, final int r, int b) {
    if (isVisible(mTitleBar)) {
      int height = mTitleBar.getMeasuredHeight();
      mTitleBar.layout(l, t, r, t + height);
      t += height;
    } else if (!mNoTitleNoPadding && mUseFullPadding) {
      t += mNoTitlePaddingFull;
    }

    if (isVisible(mContent)) mContent.layout(l, t, r, t + mContent.getMeasuredHeight());

    if (mIsStacked) {
      b -= mButtonPaddingFull;
      for (MDButton mButton : mButtons) {
        if (isVisible(mButton)) {
          mButton.layout(l, b - mButton.getMeasuredHeight(), r, b);
          b -= mButton.getMeasuredHeight();
        }
      }
    } else {
      int barTop;
      int barBottom = b;
      if (mUseFullPadding) barBottom -= mButtonPaddingFull;
      barTop = barBottom - mButtonBarHeight;
      /* START:
        Neutral   Negative  Positive

        CENTER:
        Negative  Neutral   Positive

        END:
        Positive  Negative  Neutral

        (With no Positive, Negative takes it's place except for CENTER)
      */
      int offset = mButtonHorizontalEdgeMargin;

      /* Used with CENTER gravity */
      int neutralLeft = -1;
      int neutralRight = -1;

      if (isVisible(mButtons[INDEX_POSITIVE])) {
        int bl, br;
        if (mButtonGravity == GravityEnum.END) {
          bl = l + offset;
          br = bl + mButtons[INDEX_POSITIVE].getMeasuredWidth();
        } else {
            /* START || CENTER */
          br = r - offset;
          bl = br - mButtons[INDEX_POSITIVE].getMeasuredWidth();
          neutralRight = bl;
        }
        mButtons[INDEX_POSITIVE].layout(bl, barTop, br, barBottom);
        offset += mButtons[INDEX_POSITIVE].getMeasuredWidth();
      }

      if (isVisible(mButtons[INDEX_NEGATIVE])) {
        int bl, br;
        if (mButtonGravity == GravityEnum.END) {
          bl = l + offset;
          br = bl + mButtons[INDEX_NEGATIVE].getMeasuredWidth();
        } else if (mButtonGravity == GravityEnum.START) {
          br = r - offset;
          bl = br - mButtons[INDEX_NEGATIVE].getMeasuredWidth();
        } else {
            /* CENTER */
          bl = l + mButtonHorizontalEdgeMargin;
          br = bl + mButtons[INDEX_NEGATIVE].getMeasuredWidth();
          neutralLeft = br;
        }
        mButtons[INDEX_NEGATIVE].layout(bl, barTop, br, barBottom);
      }

      if (isVisible(mButtons[INDEX_NEUTRAL])) {
        int bl, br;
        if (mButtonGravity == GravityEnum.END) {
          br = r - mButtonHorizontalEdgeMargin;
          bl = br - mButtons[INDEX_NEUTRAL].getMeasuredWidth();
        } else if (mButtonGravity == GravityEnum.START) {
          bl = l + mButtonHorizontalEdgeMargin;
          br = bl + mButtons[INDEX_NEUTRAL].getMeasuredWidth();
        } else {
            /* CENTER */
          if (neutralLeft == -1 && neutralRight != -1) {
            neutralLeft = neutralRight - mButtons[INDEX_NEUTRAL].getMeasuredWidth();
          } else if (neutralRight == -1 && neutralLeft != -1) {
            neutralRight = neutralLeft + mButtons[INDEX_NEUTRAL].getMeasuredWidth();
          } else if (neutralRight == -1) {
            neutralLeft = (r - l) / 2 - mButtons[INDEX_NEUTRAL].getMeasuredWidth() / 2;
            neutralRight = neutralLeft + mButtons[INDEX_NEUTRAL].getMeasuredWidth();
          }
          bl = neutralLeft;
          br = neutralRight;
        }

        mButtons[INDEX_NEUTRAL].layout(bl, barTop, br, barBottom);
      }
    }

    setUpDividersVisibility(mContent, true, true);
  }
コード例 #2
0
ファイル: MDRootLayout.java プロジェクト: cuishenghu/hewuzhe
 public void setButtonStackedGravity(GravityEnum gravity) {
   for (MDButton mButton : mButtons) {
     if (mButton != null) mButton.setStackedGravity(gravity);
   }
 }
コード例 #3
0
ファイル: MDRootLayout.java プロジェクト: cuishenghu/hewuzhe
  @Override
  public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int width = MeasureSpec.getSize(widthMeasureSpec);
    int height = MeasureSpec.getSize(heightMeasureSpec);

    mUseFullPadding = true;
    boolean hasButtons = false;

    final boolean stacked;
    if (!mForceStack) {
      int buttonsWidth = 0;
      for (MDButton button : mButtons) {
        if (button != null && isVisible(button)) {
          button.setStacked(false, false);
          measureChild(button, widthMeasureSpec, heightMeasureSpec);
          buttonsWidth += button.getMeasuredWidth();
          hasButtons = true;
        }
      }

      int buttonBarPadding =
          getContext().getResources().getDimensionPixelSize(R.dimen.md_neutral_button_margin);
      final int buttonFrameWidth = width - 2 * buttonBarPadding;
      stacked = buttonsWidth > buttonFrameWidth;
    } else {
      stacked = true;
    }

    int stackedHeight = 0;
    mIsStacked = stacked;
    if (stacked) {
      for (MDButton button : mButtons) {
        if (button != null && isVisible(button)) {
          button.setStacked(true, false);
          measureChild(button, widthMeasureSpec, heightMeasureSpec);
          stackedHeight += button.getMeasuredHeight();
          hasButtons = true;
        }
      }
    }

    int availableHeight = height;
    int fullPadding = 0;
    int minPadding = 0;
    if (hasButtons) {
      if (mIsStacked) {
        availableHeight -= stackedHeight;
        fullPadding += 2 * mButtonPaddingFull;
        minPadding += 2 * mButtonPaddingFull;
      } else {
        availableHeight -= mButtonBarHeight;
        fullPadding += 2 * mButtonPaddingFull;
        /* No minPadding */
      }
    } else {
      /* Content has 8dp, we add 16dp and get 24dp, the frame margin */
      fullPadding += 2 * mButtonPaddingFull;
    }

    if (isVisible(mTitleBar)) {
      mTitleBar.measure(
          MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.UNSPECIFIED);
      availableHeight -= mTitleBar.getMeasuredHeight();
    } else if (!mNoTitleNoPadding) {
      fullPadding += mNoTitlePaddingFull;
    }

    if (isVisible(mContent)) {
      mContent.measure(
          MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
          MeasureSpec.makeMeasureSpec(availableHeight - minPadding, MeasureSpec.AT_MOST));

      if (mContent.getMeasuredHeight() <= availableHeight - fullPadding) {
        if (!mReducePaddingNoTitleNoButtons || isVisible(mTitleBar) || hasButtons) {
          mUseFullPadding = true;
          availableHeight -= mContent.getMeasuredHeight() + fullPadding;
        } else {
          mUseFullPadding = false;
          availableHeight -= mContent.getMeasuredHeight() + minPadding;
        }
      } else {
        mUseFullPadding = false;
        availableHeight = 0;
      }
    }

    setMeasuredDimension(width, height - availableHeight);
  }