0

我正在使用浮动操作按钮(不使用第三方库)

fab 在 mdpi 和 hdpi 设备上看起来很好,但在 ldpi 设备上显示为独特的椭圆形

以下是截图供参考 -

  1. 这是 mdpi 设备上的 fab 渲染

工厂渲染很好

  1. 这是在 ldpi 设备上呈现为椭圆形的 fab

在此处输入图像描述

主布局有一个包含元素以包含 fab 布局。fab 布局包括一个作为可绘制对象的背景。背景=@drawable/fab_drawable

A. res/drawable中的fab_drawable.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:top="8px">
    <layer-list>
        <item>
            <shape android:shape="oval">
                <solid android:color="#14000000"/>
                <padding
                    android:bottom="1px"
                    android:left="0px"
                    android:right="1px"
                    android:top="1px"
                    />
            </shape>
        </item>
        <item>
            <shape android:shape="oval">
                <solid android:color="#15000000"/>
                <padding
                    android:bottom="1px"
                    android:left="0px"
                    android:right="1px"
                    android:top="1px"
                    />
            </shape>
        </item>
        <item>
            <shape android:shape="oval">
                <solid android:color="#16000000"/>
                <padding
                    android:bottom="1px"
                    android:left="0px"
                    android:right="1px"
                    android:top="1px"
                    />
            </shape>
        </item>
        <item>
            <shape android:shape="oval">
                <solid android:color="#17000000"/>
                <padding
                    android:bottom="1px"
                    android:left="0px"
                    android:right="1px"
                    android:top="1px"
                    />
            </shape>
        </item>
    </layer-list>
</item>
<item android:id="@+id/fab_drawable_shape">
    <shape android:shape="oval" >
        <solid android:color="#404952" />
    </shape>
</item>
<item android:drawable="@drawable/onboarding_selector"/>

B. drawable-v21 中的 fab_drawable.xml

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?android:colorControlHighlight" >

<item>
    <shape android:shape="oval" >
        <solid android:color="?android:colorAccent" />
    </shape>
</item>

C. 在我的基本片段中,我正在检查构建是否是棒棒糖,然后使用此剪辑代码

ViewOutlineProvider fabOutlineProvider = new ViewOutlineProvider() {

            @Override
            public void getOutline(View view, Outline outline) {
                int diameter = getResources().getDimensionPixelSize(
                        R.dimen.fab_diameter);
                outline.setOval(0, 0, diameter, diameter);
            }
        };

        mComposeFabButtonView.setOutlineProvider(fabOutlineProvider);
        mComposeFabButtonView.setClipToOutline(true);

D. 所有设备的晶圆按钮直径尺寸均为 60sp

4

3 回答 3

1

我通过将图层列表项中的填充细节设置为所有边的 1 dp 来解决渲染问题

这是代码 -

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:top="8dp">
    <layer-list>
        <item>
            <shape android:shape="oval">
                <solid android:color="#14000000"/>
                <padding
                    android:bottom="1dp" <--- Here are the changes
                    android:left="1dp"   <---
                    android:right="1dp"  <---
                    android:top="1dp"    <---
                    />
            </shape>
        </item>
        <item>
            <shape android:shape="oval">
                <solid android:color="#15000000"/>
                <padding
                    android:bottom="1dp"
                    android:left="1dp"
                    android:right="1dp"
                    android:top="1dp"
                    />
            </shape>
        </item>
        <item>
            <shape android:shape="oval">
                <solid android:color="#16000000"/>
                <padding
                    android:bottom="1dp"
                    android:left="1dp"
                    android:right="1dp"
                    android:top="1dp"
                    />
            </shape>
        </item>
        <item>
            <shape android:shape="oval">
                <solid android:color="#17000000"/>
                <padding
                    android:bottom="1dp"
                    android:left="1dp"
                    android:right="1dp"
                    android:top="1dp"
                    />
            </shape>
        </item>
    </layer-list>
</item>
<item android:id="@+id/fab_drawable_shape">
    <shape android:shape="oval" >
        <solid android:color="#404952" />
    </shape>
</item>
<item android:drawable="@drawable/onboarding_selector"/>

于 2015-04-15T11:32:49.687 回答
0

SP用于定义字体大小,因为如果用户启用了大文本选项,它会更改大小。用于所有其他目的dp。有关更多信息,请参阅Android 上的“px”、“dp”、“dip”和“sp”有什么区别?

此外,最好使用像Makovkastar's Floating Action Button Library这样的库。

希望这可以帮助

于 2015-04-15T12:08:20.000 回答
0

尝试将尺寸从 更改spdp。希望它能解决问题。

如果不是,则将 FAB 放在单独的布局中,并为该布局提供dp尺寸。FAB 应该使用match_parentx2。

于 2015-04-15T11:18:54.477 回答