2016-10-11 5 views
1

私は、これらの設定でプロジェクトをAndroidのメーカー2.2.1を使用しています:ボタンにアンドロイド:背景を設定すると、L/Rパディングが失われるのはなぜですか?

compileSdkVersion 24 
buildToolsVersion "24.0.2" 
minSdkVersion 16 
targetSdkVersion 24 

私はボタンの背景を変更するためにGUIを使用する場合は、レイアウトにこれを追加します。

android:background="@color/colorPrimary" 

その後、 4.4仮想デバイス(MicrosoftのAndroidエミュレータ、AMDシステムを使用しているため、高速エミュレータが必要なため)またはAndroid 6.0.1のSamsung Galaxy S6でこのアプリケーションを実行すると、ボタンの色が正しく表示されますが、左と右のパディングがあり、テキストはボタンの左右の端に右に移動します。

backgroundTintだけを設定した場合、ボタンには仮想デバイス上の正しいパディングがありますが、正しい色はありません。しかし、S6では、正しい色とパディングがあります。

これはどこかのバグのようですが、どこですか?それはコード生成にありますか、これはAndroid 4.4のバグですか?

私は、Android Studioは、それはそれは、これらのソリューションのいくつかのような複雑であるかどうか、両方のプラットフォームのレベルで正しい動作させるために必要なものは何でもやるべきだと思う:

Standard Android Button with a different color

またはより簡潔なもの。

私のstyles.xmlファイルは示しています

<resources> 

    <!-- Base application theme. --> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
     <!-- Customize your theme here. --> 
     <item name="colorPrimary">@color/colorPrimary</item> 
     <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
     <item name="colorAccent">@color/colorAccent</item> 
    </style> 

</resources> 

と私のAndroidManifestのテーマ設定は次のとおりです。これは、どこかのバグのように思える

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme" 

答えて

1

、しかし?

右ここに:コード生成にそれ

android:background="@color/colorPrimary" 

ですかこれは、Android 4.4のバグですか?

いいえ、あなたの代替背景です。それは、内在的な詰め物がなく、StateListDrawableに包まれていない色です。

Buttonウィジェットのストックバックグラウンドは、バックグラウンド自体の一部として(例えば、バックグラウンド用に使用される9パッチPNGの透明なピクセルを介して)ある程度パディングされています。実際の背景自体はStateListDrawableであり、Buttonの状態に基づいて適用するためのいくつかの他の描画可能なリソースの1つを選択します(通常、押され、集中、無効など)。

Buttonの背景を置き換えるには、まず自分のStateListDrawableを使用する必要があります。そうしないと、Buttonはクリックイベントやその他の状態の変化(視覚障害者など)に視覚的に反応するようには見えません。次に、あなたの状態の背景にいくつかのパディングを組み込むか、または適切と思われるように、Buttonウィジェット自体にパディングを配置することができます。

私はAndroidのメーカーは、それが両方のプラットフォームのレベルで正しい動作させるために必要なものは何でもやるべきだと思う

のAndroid Studioは、あなたが何をしているか知っていることを前提としています。 Buttonのバックグラウンドにはこの種のパディングがあり、ユーザーには意味をなさないものが必要だと固くて速い要求はありません(「なぜ、このボタンは私がそれをタップすると視覚的に反応しますか? ")。開発者doを実行するシナリオでは、セグメント化されたリストコントロールの複合ウィジェットの実装のように、Buttonウィジェットにはパディングがありません。

個人的に、私はButtonバックグラウンドでいくつかの固有のパディングを持ってするという決定は残念だと思います。しかし、これがAndroid 1.0で実装された方法であり、Googleは新しいテーマでも、おそらく後方互換性のためにアプローチを維持することを選択しました。

私だけbackgroundTintを設定すると、ボタンが正しい色

仮想デバイス上の正しいパディングを持っていますが、ではない私はappcompat-v7backgroundTintでプレイしていません。そこにバグがある可能性があります。あなたは、その特定の懸念事項についてより具体的な助けを得るために、完全な例とスクリーンショットに別々の質問を投稿することを検討するかもしれません。

+0

ところで、私が提出された[機能リクエスト](http://code.google.com/p/android/issues/detail?id=224980)に背景として色を適用する場合リントを持つことを警告 'ボタン。確かに、これはあなたの「あなたのパディングがどこに行くの?ボタンの背景が普通の色ではないことを指摘するのに役立つでしょう。 – CommonsWare

+0

私が見つかりました: android.support.v7.widget.AppCompatButton : http://stackoverflow.com/questions/32335232/button-backgroundtint-not-working-with-appcompat-v23 し、それを変更します with: app:backgroundTint = "@ color/colorPrimary" すべて正常に動作します。 – Mark

+0

私はちょうどこれをまたいだしました: https://code.google.com/p/android/issues/detail?id=203872 これはいつもうまくいかないでしょうか? – Mark