0

フローティング アクション ボタンを使用しています (サード パーツ ライブラリを使用せずに)

fab は mdpi および hdpi デバイスでは正常に表示されますが、ldpi デバイスでは独特の楕円形として表示されます

参考までに、ここにスクリーンショットを示します-

  1. これは、mdpi デバイスで正常にレンダリングされる fab です。

素晴らしいレンダリング

  1. これは、ldpi デバイスで楕円としてレンダリングされた fab です。

ここに画像の説明を入力

メイン レイアウトには、fab レイアウトを含めるための include 要素があります。fab レイアウトには、 drawable として背景が含まれています。background=@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.私のbasefragmentでは、ビルドがlollipopかどうかを確認してから、このクリッピングコードを使用しています

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 の Floating Action Button Library のようなライブラリを使用することをお勧めします。

お役に立てれば

于 2015-04-15T12:08:20.000 に答える
0

寸法を からspに変更してみてくださいdp。うまくいけば、それは問題を解決します。

そうでない場合は、FAB を別のレイアウト内に配置し、そのレイアウトにdp寸法を指定します。FAB はmatch_parentx2 を使用する必要があります。

于 2015-04-15T11:18:54.477 に答える