次のコードは、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(おそらく間違っています)。誰かが理由を理解できますか?
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" />
デビッドの答えは確かに問題かもしれません。
ただし、最小の幅と高さが48/64dpの場合、実際のボタンがすでにその48/64 dpサイズで正しい場合を除いて、パディングを6dpから2pdに、またはその逆に変更しても大きな違いはないと思います。
もしそうなら、Androidのバグかもしれないのではないかと思います。ビューのパディングが指定されていない場合、背景のドローアブルのパディングが使用されます(存在する場合)。ビューのパディングが指定されている場合、背景のドローアブルのパディングは無視され、ビューに設定されたパディングが使用されます。
それだけのために、パディングを小さくするのではなく本当に大きくして、それが効果があるかどうかを確認しようとしましたか?