2013-01-24 7 views
13

次のコードは、Androidにカスタムボタンを表示するためのコードです。残念ながら、これらの異なる場所のすべてのパディング値は、Android 2.3の場合のみボタンがレンダリングされる方法に影響しますが、Android 4.Xでは、何も設定されません。どうして?ドロアブル背景付きのカスタムボタン:Android 4とAndroid 2.3の差異の埋め込み

レイアウト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> 

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

答えて

31

AndroidのHoloテーマは、system styles.xml resource for Holo.Widget.ButtonにminWidthとminHeightを設定し、非ホロボタンで使用されるルールに加えてルールも指定します。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" /> 
+3

この話の道徳は、Githubのスタイリング/コードをチェックして、デフォルト動作に関する手がかりを見つけることです。 –

+0

はい、持っています;) – caw

0

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

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

この場合、Androidでのバグかどうかは疑問です。 ビューにパディングが指定されていない場合は、バックグラウンドドロウブルのパディングが使用されます(ある場合) ビューのパディングが指定されている場合、バックグラウンドドロウアブルのパディングは無視され、ビューのパディングセットが使用されます。

ちょうどそれのために、小さなパッドではなく本当に大きなパッドを作成して、効果があるかどうか確認してみましたか?

+0

あなたが正しいかもしれません。 '@ string/button_caption'の値を知らず、マルコが見ているものを正確に見ることなく、推測することしかできません。私はそれがバグかもしれないことに同意するが、引き出し可能なパディングがそれを引き起こしていたなら私は非常に驚くだろう。そのパディング値は、背景の描画にのみ影響します。 –

+0

ありがとうございます!それはバグかもしれない、あなたは正しい。私はそれをチェックしなければならなかった - それは*ではない*。すべてがうまくいっていて、この問題の説明はDavidが書い​​たものです。 – caw

関連する問題