web-dev-qa-db-ja.com

描画可能な背景のカスタムボタン:Android 4とAndroid 2.3

次のコードは、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(おそらく正しい)に表示されますが、パディングはまだ非常に大きいですon Android 4.X(おそらく間違っています)。誰かが理由を理解できますか?

13
caw

AndroidのHoloテーマは、 Holo.Widget.Button のシステムstyles.xmlリソースにminWidthとminHeightを設定します。これは、非holoボタンで使用されるルールに加えてルールを指定します Widget.Button 。ボタンのタイトルが小さい場合でも、ボタンはAndroid 4.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" />
31

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

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

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

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

0