返回介绍

2. fab 的大小

发布于 2024-12-23 22:29:23 字数 1327 浏览 0 评论 0 收藏 0

再来看 fab 的大小,fab 有两种大小,一种是 NORMAL ,一种是 MINI ,实际大小分别是 56dp 和 40dp,其定义可以在 design 库的 values.xml 中看到。

fab 如何控制控件大小只有这两种规格呢(这样说不准确,事实上你可以通过设置 fab 的 layout_width / layout_height 指定为任意大小,但是我们最好按照 MD 规范来)?必然是通过复写 onMeasure 啦:

  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    //我们希望的大小
    final int preferredSize = getSizeDimension();
		 //最终测量的大小
    final int w = resolveAdjustedSize(preferredSize, widthMeasureSpec);
    final int h = resolveAdjustedSize(preferredSize, heightMeasureSpec);

    //取小值,保证最后绘制的是圆形
    final int d = Math.min(w, h);

    // We add the shadow's padding to the measured dimension
    setMeasuredDimension(
        d + mShadowPadding.left + mShadowPadding.right,
        d + mShadowPadding.top + mShadowPadding.bottom);
  }

其中 getSizeDimension 方法计算出来的是我们期望的大小:

final int getSizeDimension() {
    switch (mSize) {
      case SIZE_MINI:
        return getResources().getDimensionPixelSize(R.dimen.design_fab_size_mini);//40dp
      case SIZE_NORMAL:
      default:
        return getResources().getDimensionPixelSize(R.dimen.design_fab_size_normal);//56dp
     
     }
   }

但是最终的值还是得看我们设置的 LayoutParams。关于控件测量相关内容不在此文介绍范围内,大家可以自行 google。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文