美文网首页
Android FAB自定义按钮大小以及中间icon大小

Android FAB自定义按钮大小以及中间icon大小

作者: Dragon_Boat | 来源:发表于2017-03-21 17:26 被阅读1367次

项目里有个全局浮动的按钮,感觉很适合用FAB,说不定以后还能配合嵌套滚动走一发(其实是偷懒不想写hide(),show()的动画).

Fab其实是Google为Material Design规范设计的一个控件,所以遵循了标准的设计规范,这同时意味着其可定制性自然就小了很多。
比如:Fab的Size大小只有建议的:mini,normal,auto可以选择,而其中居中的icon,更是没办法直接通过属性指定调整。

有问题,看源码

很容易从构造函数入手,查看到如下代码:

mMaxImageSize = (int) getResources().getDimension(R.dimen.design_fab_image_size);

 private int getSizeDimension(@Size final int size) {
 final Resources res = getResources();
        switch (size) {
            case SIZE_AUTO:
                // If we're set to auto, grab the size from resources and refresh
                final int width = ConfigurationHelper.getScreenWidthDp(res);
                final int height = ConfigurationHelper.getScreenHeightDp(res);
                return Math.max(width, height) < AUTO_MINI_LARGEST_SCREEN_WIDTH
                        ? getSizeDimension(SIZE_MINI)
                        : getSizeDimension(SIZE_NORMAL);
            case SIZE_MINI:
                return res.getDimensionPixelSize(R.dimen.design_fab_size_mini);
            case SIZE_NORMAL:
            default:
                return res.getDimensionPixelSize(R.dimen.design_fab_size_normal);
        }

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
final int preferredSize = getSizeDimension();
mImagePadding = (preferredSize - mMaxImageSize) / 2;

可以看到,fab的大小实际上最终是从dimen文件中读取,而内部中心icon距离两边的padding则是由mMaxImageSize这个变量确定,其值会从R.dimen.design_fab_image_size中读取,所以,如果想改变Fab的大小,我们那需要做的是,在dimen中,覆写这两个值:

    <!-- 重定义fab大小-->
    <dimen name="design_fab_size_normal" tools:override="true">40dp</dimen>
    <dimen name="design_fab_image_size" tools:override="true">20dp</dimen>

tools:override="true" 表示覆盖系统已有的值。

这个方法的弊端在于,Google如果改动了属性名称,则自定义大小就会失败。因此,最好还是遵循设计规范来使用FAB

相关文章

网友评论

      本文标题:Android FAB自定义按钮大小以及中间icon大小

      本文链接:https://www.haomeiwen.com/subject/bzywwttx.html