web-dev-qa-db-ja.com

XMLのドローアブルで重力「ボトム」を機能させる方法

私は単純な目的を持っています。 FrameLayoutに明るい灰色の背景が必要で、その下に黒い分割線があります(地下のみで、周囲全体ではありません)。これまでのところ私はこれを持っています:

<?xml version="1.0" encoding="utf-8"?>
   <layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android"> 
   <item>
    <shape Android:shape="rectangle" Android:gravity="center">
        <solid Android:color="#EEEEEE" />   
    </shape>
   </item>
   <item>
   <shape Android:shape="line" Android:gravity="bottom" >
       <stroke Android:width="1dip" Android:color="#010101"/>
   </shape>
   </item>
   </layer-list>

ただし、中心を通る線を描画します。つまり、gravity = 'bottom'ビットを無視します。どうすればこれを修正できますか?

編集:この質問は非常に古いです。選択した回答は、現在のAPIなどと一致している場合と一致していない場合があります。監視されなくなったこの質問に追加するのではなく、独自の質問を開始することをお勧めします。

15
ac_

これには9パッチのイメージを使用することをお勧めします-これがその仕事をするはずの例です:

Example nine-patch image

(それは小さいですが、そこにあります!)

これをドローアブルフォルダに配置し、FrameLayoutの背景を設定すると、目的の結果が得られるはずです。コンテンツは灰色の領域に入り、#010101ピクセルは水平方向に引き伸ばされて下部に線を形成します。 .9.png拡張子を保持して、9パッチとしてロードされるようにしてください。

それがあなたを助けることを願っています

4
kingraam

私もこれに苦労しました。基本的に、下部に境界線を作成するには、予想とは逆の方向に考える必要があります。境界線の色の長方形から始めます。その上に、下からオフセットして実際の色を描画します。私はこれを使用します:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >

    <!-- CREATE A RECTANGLE WITH YOUR BORDER COLOR -->
    <item>
        <shape Android:shape="rectangle" >
            <solid Android:color="#fff"/>
        </shape>
    </item>

    <!-- NOW DEFINE THE NORMAL COLOR-->
    <item Android:bottom="BOTTOM_BORDER_THICKNESS E.G. 4dp">
        <shape Android:shape="rectangle" >
            <solid Android:color="#ccc"/>
        </shape>
    </item>
</layer-list>

または、 Juan Pablo Saraceno 提案されたように:

<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" > 
    <item> 
        <color Android:color="YOUR_BORDER_COLOR" /> 
    </item> 
    <item Android:top="YOUR_BORDER_THICKNESS"> 
        <color Android:color="YOUR_BG_COLOR" /> 
    </item> 
</layer-list>
28
Entreco

残念ながら、ドローアブルに対して重力を機能させる方法は見つかりませんでしたが、必要なものを実現する方法を見つけました純粋なxmlを使用

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item
        Android:top="-2dp"
        Android:left="-2dp"
        Android:right="0dp"
        Android:bottom="1dp"
        >
        <shape Android:shape="rectangle">
            <solid Android:color="#EEEEEE"/>
            <stroke Android:width="1dp" Android:color="#010101"/>
        </shape>
    </item>
</layer-list>

幸運を:)

17
Igor Zubchenok

これはうまくいきます!

<item>
      <bitmap
         Android:gravity="left|bottom"
         Android:src="@drawable/myDrawable" />
 </item>
3
M. Usman Khan
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >

    <item>
        <shape Android:shape="rectangle" >
            <solid Android:color="@color/Black" />
        </shape>
    </item>
    <item Android:bottom="5dp">
        <shape Android:shape="rectangle" >
            <solid Android:color="@color/White" />
        </shape>
    </item>

</layer-list>
1
NeilDA

まあ、それはかなり古い質問ですが、実際の質問(gravityを機能させる方法)に答える答えはないようですので、ここに実際の例があります:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">

    <item>
        <color Android:color="#2196F3"/>        <!-- Background color -->
    </item>

    <item Android:gravity="bottom">
        <shape>
            <size Android:height="10dp" />      <!-- I would suggest 1dp -->
            <solid Android:color="#F50057" />   <!-- Line color -->
        </shape>
    </item>
</layer-list>

類推により、重力leftまたはrightを使用する場合は、属性heightwidthに変更します。

1
Michał Baran

私はそれがかなり古い質問であることを知っていますが、与えられた答えは私にとってはうまくいきませんでした。重力特性の作業を行うには、描画可能なアイテムにサイズタグを追加するだけで済みます。

したがって、以下は期待どおりに機能します。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item
        Android:gravity="center">
        <shape Android:shape="rectangle">
            <solid Android:color="#EEEEEE" />
        </shape>
    </item>
    <item
        Android:gravity="bottom">
        <shape Android:shape="line">
            <size Android:height="2dp"/>
            <stroke Android:width="1dip" Android:color="#010101"/>
        </shape>
    </item>
</layer-list>

ps。この機能はAPIレベル23で追加されました https://developer.Android.com/reference/Android/graphics/drawable/LayerDrawable#setLayerGravity%28int,%20int%29

0
MertNYuksel