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

项目里有个全局浮动的按钮,感觉很适合用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中,覆写这两个值:

    
    40dp
    20dp

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

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

你可能感兴趣的:(Android FAB自定义按钮大小以及中间icon大小)