Android特定の側面のみにストロークを持つシェイプオブジェクトを作成できますか?
例えば、私が持っている:
<stroke
Android:width="3dip"
Android:color="#000000"
Android:dashWidth="10dip"
Android:dashGap="6dip" />
これはこのCSSに似ています:
border: 3px dashed black;
片側だけにストロークを設定するにはどうすればよいですか?これは私がCSSでそれを行う方法です:
border-left: 3px dashed black;
Android XML?
私はこれで良い解決策を達成しました:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<!-- This is the line -->
<item Android:top="-1dp" Android:right="-1dp" Android:left="-1dp">
<shape>
<solid Android:color="@Android:color/transparent" />
<stroke Android:width="1dp" Android:color="#ffffff" />
</shape>
</item>
</layer-list>
これは、透明な背景が必要な場合にうまく機能しますが、まだストロークの色は開いています(私の場合、一番下の行だけが必要です)。背景色が必要な場合は、Maraguesの回答のように、単色の色を追加できます。
編集1
場合によっては、高密度デバイスの場合、低いディップ値を使用すると、非常に細いまたは見えないストロークまたは距離で終わることがあります。これは、ListViewディバイダーを設定するときにも発生する場合があります。
最も簡単な回避策は、1dpではなく1pxの距離を使用することです。これにより、すべての密度で線が常に表示されます。 最良の解決策は、各密度の次元リソースを作成し、各デバイスに最適なサイズを取得することです。
編集2
楽しいですが、6年後にこれを使用しようとしましたが、Lollipopデバイスでは良い結果が得られません。
おそらく現在の解決策は9パッチを使用することです。 Androidは、この問題を簡単に解決できるはずです。
リストレイヤーを使用してこれを解決しました。2つの形状を組み合わせ、そのうちの1つは高さ1dpを下部に配置しました
optionscreen_bottomrectangle.xml:
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<!-- This is the line -->
<item>
<shape>
<solid Android:color="#535353" />
</shape>
</item>
<!-- This is the main color -->
<item Android:bottom="1dp">
<shape>
<solid Android:color="#252525" />
</shape>
</item>
</layer-list>
次に、layout/main.xmlファイルで
<TextView
Android:id="@+id/bottom_rectangle"
Android:background="@drawable/optionscreen_bottomrectangle"
Android:layout_width="fill_parent"
Android:layout_height="0dp"
Android:layout_below="@id/table_options"
Android:layout_above="@id/exit_bar"/>
これは、table_optionsとexit_barの間のギャップを背景で埋め、exit_barが1dp行を出力する直前です。これは私のためにトリックをしました、私はそれが他の誰かを助けることを望みます。
回答を編集して、レイヤーを正しい順序に配置します。 Thxアレックス!
私はこの質問がずっと前に投稿されたことを知っているので、この質問を投稿した人は答えを使用しませんが、それでも他人を助けるかもしれません。
<?xml version="1.0" encoding="UTF-8"?>
<!-- inset is used to remove border from top, it can remove border from any other side-->
<inset xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:insetTop="-2dp"
>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:id="@+id/rectangle">
<stroke Android:width="1dp" Android:color="#b7b7b7" />
<corners Android:bottomRightRadius="5dp" Android:bottomLeftRadius="5dp"/>
<solid Android:color="#454444"/>
</shape>
</inset>
inset
タグを使用して、削除するサイドボーダーに負の値を指定します。
可能な値は次のとおりです。
Android:insetTop="-1dp" Android:insetBottom="-1dp" Android:insetLeft="-1dp" Android:insetRight="-1dp"
別の方法では、代わりにパディングを使用して他の応答を受け取ります。この小さなスニペットは、上部と下部に境界線を作成します。
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<!-- This is the line -->
<item>
<shape>
<padding Android:left="0dp" Android:top="1dp" Android:right="0dp" Android:bottom="1dp"/>
<solid Android:color="#898989" />
</shape>
</item>
<!-- This is the main color -->
<item>
<shape>
<solid Android:color="#ffffff" />
</shape>
</item>
</layer-list>
レイヤーリストのドロアブルは上から下に描画するため、@ Maraguesの答えは逆です(リストの最後のアイテムが上に描画されることを意味します)。
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<!-- This is the line -->
<item>
<shape>
<solid Android:color="#535353" />
</shape>
</item>
<!-- This is the main color -->
<item Android:bottom="1dp">
<shape>
<solid Android:color="#252525" />
</shape>
</item>
</layer-list>
これにより、図形が線の色で効果的に塗りつぶされ、その上に背景色が描画され、最後の1dpが透けて見えるようになります。
次のコードを使用しました。
<?xml version="1.0" encoding="UTF-8"?>
<!-- inset is used to remove border from top, it can remove border from any other side-->
<inset xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:insetTop="-2dp" Android:insetLeft="-2dp" Android:insetRight="-2dp"
>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:id="@+id/rectangle">
<stroke Android:width="1dp" Android:color="@color/colorPrimary" />
<solid Android:color="#0000"/>
<padding Android:left="2dp" Android:top="2dp" Android:bottom="2dp" Android:right="2dp"/>
</shape>
</inset>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item>
<shape Android:shape="rectangle" >
<stroke Android:width="2dp"
Android:color="#BBBBBB" />
<solid Android:color="@Android:color/transparent" />
</shape>
</item>
<item Android:bottom="2dp" >
<shape Android:shape="rectangle" >
<stroke Android:width="2dp"
Android:color="@color/main_background_color" />
<solid Android:color="@Android:color/transparent" />
</shape>
</item>