私は単純な目的を持っています。 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などと一致している場合と一致していない場合があります。監視されなくなったこの質問に追加するのではなく、独自の質問を開始することをお勧めします。
これには9パッチのイメージを使用することをお勧めします-これがその仕事をするはずの例です:
(それは小さいですが、そこにあります!)
これをドローアブルフォルダに配置し、FrameLayoutの背景を設定すると、目的の結果が得られるはずです。コンテンツは灰色の領域に入り、#010101ピクセルは水平方向に引き伸ばされて下部に線を形成します。 .9.png拡張子を保持して、9パッチとしてロードされるようにしてください。
それがあなたを助けることを願っています
私もこれに苦労しました。基本的に、下部に境界線を作成するには、予想とは逆の方向に考える必要があります。境界線の色の長方形から始めます。その上に、下からオフセットして実際の色を描画します。私はこれを使用します:
<?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>
残念ながら、ドローアブルに対して重力を機能させる方法は見つかりませんでしたが、必要なものを実現する方法を見つけました純粋な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>
幸運を:)
これはうまくいきます!
<item>
<bitmap
Android:gravity="left|bottom"
Android:src="@drawable/myDrawable" />
</item>
<?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>
まあ、それはかなり古い質問ですが、実際の質問(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
を使用する場合は、属性height
をwidth
に変更します。
私はそれがかなり古い質問であることを知っていますが、与えられた答えは私にとってはうまくいきませんでした。重力特性の作業を行うには、描画可能なアイテムにサイズタグを追加するだけで済みます。
したがって、以下は期待どおりに機能します。
<?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