15

私は持っています:

<stroke android:width="1px" android:color="#A6ACB1"/>

要素の下部(たとえば)からこの境界線を削除したいと思います。出来ますか?(Eclipseは私にのみ提案します:color、width、dashWidth、dashGap)。

4

3 に答える 3

29

これはちょっとしたハックinsetですが、負の値のドローアブルを使用して1つ以上の境界線を削除することは可能です。シェイプをでラップしinset、負android:insetTopandroid: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つの値(半径)の大きい方を使用します。

于 2015-01-03T21:21:03.070 に答える
27

私が理解している限り、それを行う簡単な方法はありません。ただし、境界線のあるアイテムと、境界線の幅に等しい境界線が必要なすべての辺からのオフセットがないアイテムでレイヤーリストを使用すると、それを実現できます。

ボーダレスボトムを表す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番目のアイテムで覆われている下からの形状です(ただし、破線や点線などが必要な場合は境界線を追加できます)。すべて同じドローアブルで:)

これは、アイテムが挿入されている値を変更することで、削除する任意の境界線に適用できます。たとえば、rightBodyアイテムのinをに変更すると、挿入されbottomていない境界線であるため、欠落している境界線は正しい境界線になります。

于 2012-05-13T10:47:06.680 に答える
1

これは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

ここにそれがどのように見えるか:

ここに画像の説明を入力してください

于 2018-02-02T16:08:28.757 に答える