私は持っています:
<stroke android:width="1px" android:color="#A6ACB1"/>
要素の下部(たとえば)からこの境界線を削除したいと思います。出来ますか?(Eclipseは私にのみ提案します:color、width、dashWidth、dashGap)。
私は持っています:
<stroke android:width="1px" android:color="#A6ACB1"/>
要素の下部(たとえば)からこの境界線を削除したいと思います。出来ますか?(Eclipseは私にのみ提案します:color、width、dashWidth、dashGap)。
これはちょっとしたハックinset
ですが、負の値のドローアブルを使用して1つ以上の境界線を削除することは可能です。シェイプをでラップしinset
、負android:insetTop
のandroid:insetBottom
、、、、android:insetLeft
またはandroid:insetRight
ストローク幅に等しい絶対値を適用します。
たとえば、4dp
ストロークのある長方形から下の境界線を削除するには、android:insetBottom
値を使用します-4dp
。
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetBottom="-4dp">
<shape android:shape="rectangle">
<solid android:color="#FFFFFF" />
<stroke android:width="4dp" android:color="#000000" />
<corners android:radius="4dp" />
</shape>
</inset>
これは、シェイプのコーナーの半径がストローク幅よりも小さい限り、うまく機能しているようです。それ以外の場合は、隣接する境界線の丸みを帯びた部分を完全に非表示にするために、インセットを適用するときに2つの値(半径)の大きい方を使用します。
私が理解している限り、それを行う簡単な方法はありません。ただし、境界線のあるアイテムと、境界線の幅に等しい境界線が必要なすべての辺からのオフセットがないアイテムでレイヤーリストを使用すると、それを実現できます。
ボーダレスボトムを表すxmlを作成しましょう。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Border -->
<item>
<shape>
<solid android:color="#f000"></solid>
</shape>
</item>
<!-- Body -->
<item android:left="2dip"
android:top="2dp"
android:right="2dp">
<shape>
<solid android:color="#ffafafaf"></solid>
</shape>
</item>
</layer-list>
ご覧のとおり、2番目のアイテムに最初のアイテムを下を除くすべての側面に2 dpずつ挿入するように指示しています(したがって、下に境界線のない結果が表示されます)。
つまり、これは基本的に境界線自体ではなく、ボタンの本体である2番目のアイテムで覆われている下からの形状です(ただし、破線や点線などが必要な場合は境界線を追加できます)。すべて同じドローアブルで:)
これは、アイテムが挿入されている値を変更することで、削除する任意の境界線に適用できます。たとえば、right
Bodyアイテムのinをに変更すると、挿入されbottom
ていない境界線であるため、欠落している境界線は正しい境界線になります。
これはxmlのトリックです。まず、レイヤーを特定の色(線の色)で塗りつぶす必要があります。次に、線を描きたい側から少し押しながら、別の色(背景色)で塗りつぶす必要があります。これが私のコードです:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- First we have to create the line color (Black: #000000 and
Set position to 0 from all sides, this will allow us
even to to determine border size in any side (top,
right, bottom, left) -->
<item android:top="0dp"
android:right="0dp"
android:left="0dp"
android:bottom="0dp">
<shape android:shape="rectangle">
<solid android:color="#000000"></solid>
</shape>
</item>
<!-- Here we fill the content with our color, and I will
push 1dp from the top so this size (top = 1dp) will
keep the previous color and it will look like the border
-->
<item android:top="1dp"
android:right="0dp"
android:left="0dp"
android:bottom="0dp">
<shape android:shape="rectangle">
<solid android:color="#f4f4f4"></solid>
</shape>
</item>
</layer-list>
https://i.stack.imgur.com/ifak8.jpg
ここにそれがどのように見えるか: