パディングはXMLレイアウトの<shape>には影響しません


92

<shape>XMLファイル/レイアウト内で宣言されたものにパディングを設定しようとしています。しかし、私が設定したものは何でも、パディングに関連する変更はありません。他のプロパティを変更すると、UIへの影響が表示されます。ただし、パディングでは機能しません。これが発生する可能性のある考えられる理由についてアドバイスをいただけますか?

これが私がスタイリングしようとしているXMLシェイプです:

 <shape xmlns:android="http://schemas.android.com/apk/res/android" 
      android:shape="rectangle">

    <stroke android:width="1dp" 
            android:color="#ffffff" 
            android:dashWidth="2dp"/>

    <solid android:color="@color/button_white_cover"/>

    <corners android:radius="11dp"/>

    <padding android:left="1dp" 
             android:top="20dp"
             android:right="20dp" 
             android:bottom="2dp"/>
 </shape>

回答:


113

私はついにパディングの問題を解決しました。

したがって、ここでのパディングは形状に影響を与えません。これの代わりに、それを使用する他のドローアブルにパディングを適用する必要があります。だから、私はその形を使ったドローアブルを持っていて、そこで私は次のことをします:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@drawable/shape_below"/>
   <item android:top="10px" android:right="10px" android:drawable="@drawable/shape_cover"/>
</layer-list>

したがって、2番目の<item>要素でわかるように、パディング(上部と右側)を設定します。そしてこの後、すべてが機能します。

ありがとう。


こんにちは、私はこの解決策を問題に適用する方法を理解していません。形状を使用するボタンがあり、adnroid:topとandroid:rightの設定は効果がありません。これをどのように解決しますか?ありがとう。
アイスクリーム2010年

2
Lyubomyrが言っていることは、私にとってはうまくいくこのようなことをすることだと思いますが、コーナーは常に不透明な白い背景になり、表示の問題が発生します(コメントのフォーマットについては申し訳ありません!):<layer-list xmlns:android = " schemas.android.com/apk/res/android "> <item> <shape android:shape =" rectangle "> <size android:width =" 0dp "android:height =" 45dp "android:color =" @ android:色/透明 "/> </ shape> </ item> <item android:top =" 0dp "android:right =" 0dp "android:bottom =" 0dp "android:left =" 0dp "android:drawable =" @ drawable / button_blue_shape "/> </ layer-list>
DustinB 2011

また、トピックから外れていますが、役立つ場合があります。使用するドローアブルが単なる色である場合は、android:drawable = "@ color / divider"のように書くこともできます。しかし、これは古いデバイスでは壊れます。2.2でテストしたところ、壊れていました。どのレベルで受け入れられるようになったのかわからない。
Pijusn 2013年

実際に<item>は、子のドローアブルを受け入れます(ただし、明示的に文書化されていません)。これが、単一のxml内でこの動作を実現する方法です。
Alex Cohn 2015年

3
この答えは7年後でも正しいようです。いったい何の<shape><padding> ために
デビッドロード

75

いくつかのコメントがほのめかしているように、最良のアプローチは<shape><item>要素でラップし、代わりにそこにパディングを設定することです。ただし、以下のリンクで詳しく説明されている利用可能な他のオプションがあります。例えば

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:left="8dp"
        android:right="8dp"
        android:top="8dp"
        android:bottom="8dp">

        <shape android:shape="rectangle">
            ...
        </shape>
    </item>
</layer-list>

必要に応じて、レイヤーリストを使用する代わりに、次の描画可能なタイプのいずれかを使用できます。

  • レイヤーリスト
  • セレクタ
  • レベルリスト
  • 遷移

利用可能なドローアブルタイプの詳細については、このAndroidドキュメントを参照してください

出典:


ええ、あなたは言及しませんでした<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
user924 2017

@ user924あなたの主張が何であるかわかりません。目的に
かなう

3
エディションなしでコピーして実行できる例を示す方が良いということですが、この場合、<item>は解決されません(<layer-list>内にある必要があるため)
user924 2017

2
@ user924問題を指摘し、回答の改善にご協力いただき、ありがとうございます。コードサンプルを更新し、利用可能な
ドローアブル

22

はめ込みを試すことができます:

<?xml version="1.0" encoding="UTF-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetBottom="2dp"
    android:insetLeft="1dp"
    android:insetRight="20dp"
    android:insetTop="20dp">

    <shape android:shape="rectangle">

        <stroke
            android:width="1dp"
            android:color="#ffffff"
            android:dashWidth="2dp" />

        <solid android:color="@color/button_white_cover" />

        <corners android:radius="11dp" />
    </shape>

</inset>

22

Lyobomyrによる答えは機能しますが、これは同じソリューションが適用されますが、新しいドローアブルを作成するオーバーヘッドがないため、ファイルの乱雑さが最小限に抑えられます。

https://stackoverflow.com/a/3588976/578746

上記のSO回答のanonによるanwserのコピー/貼り付け:

<item android:left="6dp"
      android:right="6dp">

    <shape android:shape="rectangle">
        <gradient android:startColor="#ccd0d3"
                  android:centerColor="#b6babd"
                  android:endColor="#ccd0d3"
                  android:height="1px"
                  android:angle="0"/>
    </shape>
</item>


1
この回答をありがとうYahel、ただしリンクのみの回答を投稿しないことを忘れないでください。リンクの内容が変更されたり無効になったりする可能性があるため、回答には常に必要なすべての情報を入力してください。
TheIT 2016年

答えを編集
Yahel 2018

9

私はこの問題を次のように解決しました:

<shape android:shape="oval"  >
    <stroke android:width="4dp" android:color="@android:color/transparent" />
    <solid android:color="@color/colorAccent" />
</shape>

それに透明なストロークを追加しました。


賢いですが、これはハックだと思います:-/
dell1 1619
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.