13

次のコードは、Androidでカスタムボタンを表示するためのものです。残念ながら、これらのさまざまな場所でのすべてのパディング値は、Android 2.3でのみボタンがレンダリングされる方法に影響しますが、Android 4.Xでは効果がありません。つまり、ここで設定した内容に関係なく、パディングは常に同じです。なんで?

レイアウトXML:

<Button
    android:id="@+id/sample_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button_caption"
    android:padding="6dp"
    android:layout_marginBottom="6dp"
    android:layout_marginRight="6dp"
    style="@style/CustomButton"
    android:textSize="16sp" />

スタイル:

<style name="CustomButton">
    <item name="android:layout_gravity">center_horizontal</item>
    <item name="android:padding">6dp</item>
    <item name="android:background">@drawable/custom_button</item>
    <item name="android:textColor">#ffffff</item>
    <item name="android:gravity">center</item>
    <item name="android:textStyle">bold</item>
</style>

ドローアブル:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape>
            <solid
                android:color="#60ff0000" />
            <stroke
                android:width="1dp"
                android:color="#ffffff" />
            <corners
                android:radius="4dp" />
            <padding
                android:left="6dp"
                android:top="6dp"
                android:right="6dp"
                android:bottom="6dp" />
        </shape>
    </item>
    <item>
        <shape>
            <solid
                android:color="#90ff0000" />
            <stroke
                android:width="1dp"
                android:color="#ffffff" />
            <corners
                android:radius="4dp" />
            <padding
                android:left="6dp"
                android:top="6dp"
                android:right="6dp"
                android:bottom="6dp" />
        </shape>
    </item>
</selector>

これらすべてのパディング値を2などの小さな値に設定すると、Android 2.3.3ではほとんどパディングなしでボタンが表示されますが(おそらく正しい)、Android 4.Xではまだ非常に大きいパディングがあります(おそらく間違っています) 。誰かが理由を見ることができますか?

4

2 に答える 2

31

AndroidのHoloテーマは、システムstyles.xmlリソースにHolo.Widget.ButtonminWidthとminHeightを設定します。これらのリソースには、非holoボタンで使用されるルールに加えてルールが指定されますWidget.Button。ボタンのタイトルが小さい場合でも、Android4.2ではボタンは64x48dipを占めます。

<Button
    android:id="@+id/sample_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Z"
    android:padding="6dp"
    android:minHeight="1dp"
    android:minWidth="1dp"
    android:layout_marginBottom="6dp"
    android:layout_marginRight="6dp"
    style="@style/CustomButton"
    android:textSize="16sp" />
于 2013-02-04T19:53:20.980 に答える
0

デビッドの答えは確かに問題かもしれません。

ただし、最小の幅と高さが48 / 64dpの場合、実際のボタンがすでにその48/64 dpサイズで正しい場合を除いて、パディングを6dpから2pdに、またはその逆に変更しても大きな違いはないと思います。

もしそうなら、それはAndroidのバグかもしれないのではないかと思います。ビューのパディングが指定されていない場合は、背景のドローアブルのパディングが使用されます(存在する場合)。ビューのパディングが指定されている場合、背景のドローアブルのパディングは無視され、ビューに設定されているパディングが使用されます。

そのためだけに、パディングを小さくするのではなく本当に大きくして、それが効果があるかどうかを確認しようとしましたか?

于 2013-02-04T20:25:17.327 に答える