Android FABカスタムボタンサイズおよび中間iconサイズ

1927 ワード

プロジェクトにはグローバルフローティングのボタンがあり、FABが似合うような気がします.
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でこの2つの値を上書きする必要があります.
    
    40dp
    20dp
tools:override="true"は、オーバーライドシステムの既存の値を表す.
この方法の弊害は,Googleが属性名を変更するとカスタムサイズが失敗することである.そのため、設計規範に従ってFABを使用することが望ましい