web-dev-qa-db-ja.com

android下部ストロークのある形状

Android図形を作成して、下部のみにストローク(破線)を持たせる必要があります。次のことを試してみると、ストロークは中心を通る形状を二分します。誰もそれを正しくする方法を知っていますか?ストロークはボトムライン/ボーダーである必要があります。 TextViewの背景として図形を使用しています。なぜそれが必要なのか気にしないでください。

<?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="#1bd4f6" />
        </shape>
    </item>

    <item>
        <shape Android:shape="line" >
            <padding Android:bottom="1dp" />

            <stroke
                Android:dashGap="10px"
                Android:dashWidth="10px"
                Android:width="1dp"
                Android:color="#ababb2" />
        </shape>
    </item>

</layer-list>
100
Cote Mounyo

これは一種のハックですが、おそらくこれが最善の方法だと思います。高さに関係なく、破線は常に下になります。

<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">

    <item>
        <shape Android:shape="rectangle" >
            <solid Android:color="#1bd4f6" />
        </shape>
    </item>

    <item Android:top="-2dp" Android:right="-2dp" Android:left="-2dp">
        <shape>
            <solid Android:color="@Android:color/transparent" />
            <stroke
                Android:dashGap="10px"
                Android:dashWidth="10px"
                Android:width="1dp"
                Android:color="#ababb2" />
        </shape>
    </item>

</layer-list>

説明:

2番目の形状は、破線の輪郭を持つ透明な長方形です。境界線を下部にのみ表示するためのキーは、反対側を設定する負のマージンにあります。これらの負の余白は、それらの側の描画領域の外側に破線を「押し」、底部に沿った線のみを残します。潜在的な副作用の1つ(試したことはありません)は、独自の境界の外側に描画するビューの場合、負のマージンの境界線が表示される可能性があることです。

287
Krylez

これはトリックです...

<item >
    <shape Android:shape="rectangle">
        <solid Android:color="#YOUR_BOTTOM_LINE_COLOR"/>
    </shape>
</item>

<item Android:bottom="1.5dp">
    <shape Android:shape="rectangle">
        <solid Android:color="#YOUR_BG_COLOR"/>
    </shape>
</item>
43
Jongz Puangput
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item
        Android:top="-6dp"
        Android:left="-6dp"
        Android:right="-6dp"
        Android:bottom="0dp">

        <shape Android:shape="rectangle">
            <solid Android:color="#88FFFF00"/>
            <stroke
                Android:width="5dp"
                Android:color="#FF000000"/>
        </shape>
    </item>
</layer-list>
37
Anonan

この回答は、ここのようにEditTextの点線の下部境界線を表示したいGoogle検索者向けです

sample

drawableフォルダー内にdotted.xmlを作成し、これらを貼り付けます

<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item
        Android:bottom="1dp"
        Android:left="-2dp"
        Android:right="-2dp"
        Android:top="-2dp">
        <shape Android:shape="rectangle">
            <stroke
                Android:width="0.5dp"
                Android:color="@Android:color/black" />    
            <solid Android:color="#ffffff" />
            <stroke
                Android:width="1dp"
                Android:color="#030310"
                Android:dashGap="5dp"
                Android:dashWidth="5dp" />
            <padding
                Android:bottom="5dp"
                Android:left="5dp"
                Android:right="5dp"
                Android:top="5dp" />
        </shape>
    </item>
</layer-list>

次に、作成したAndroid:background属性をdotted.xmlに設定するだけです。 EditTextは次のようになります。

<EditText
    Android:id="@+id/editText"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:text="Some Text"
    Android:background="@drawable/dotted" />
15
Shree Krishna

ネガティブなパディングやコウノトリは一切なく、簡単だと感じています。

<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">

    <item Android:drawable="@color/main_bg_color"/>
    <item Android:gravity="bottom">
        <shape Android:shape="rectangle">
            <size Android:height="5dp"/>
            <solid Android:color="@color/bottom_bar_color"/>
        </shape>
    </item>
</layer-list>
10
Simon K. Gerges

私があなたを理解していれば、形を使う必要はないと思います。

次の画像に示すように見ている場合は、次のレイアウトを使用します。

enter image description here

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent" >

<RelativeLayout
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_centerInParent="true"
    Android:background="#1bd4f6"
    Android:paddingBottom="4dp" >

    <TextView
        Android:layout_width="200dp"
        Android:layout_height="wrap_content"
        Android:background="#ababb2"
        Android:padding="5dp"
        Android:text="Hello Android" />
 </RelativeLayout>

 </RelativeLayout>

編集

これらのプロパティで遊ぶと結果が得られます

    Android:top="dimension"
    Android:right="dimension"
    Android:bottom="dimension"
    Android:left="dimension"

このようにしてみて

<?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="#1bd4f6" />
    </shape>
</item>

<item Android:top="20px"
    Android:left="0px">
    <shape Android:shape="line"  >
        <padding Android:bottom="1dp" />

        <stroke
            Android:dashGap="10px"
            Android:dashWidth="10px"
            Android:width="1dp"
            Android:color="#ababb2" />
    </shape>
</item>

</layer-list>
7
Ketan Ahir

次のxml drawableコードを試してください:

    <layer-list>
        <item Android:top="-2dp" Android:right="-2dp" Android:left="-2dp">
            <shape>
                <solid Android:color="@Android:color/transparent" />
                <stroke
                    Android:width="1dp"
                    Android:color="#fff" />
            </shape>
        </item>
    </layer-list>
7

シンプルなソリューション:

描画可能ファイルをedittext_stroke.xmlとして描画可能フォルダーに作成します。以下のコードを追加します。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shape="line"
   >
    <stroke
        Android:width="1dp"
        Android:color="@Android:color/white" >
    </stroke>
</shape>

レイアウトファイルで、drawableをedittextに追加します。

Android:drawableBottom = "@ drawable/edittext_stroke"

<EditText
      Android:textColor="@Android:color/white"
      Android:layout_width="match_parent"
      Android:layout_height="wrap_content"
      Android:drawableBottom="@drawable/edittext_stroke"
      />
5
adhi

通常、同様のタスクのために-私はこのようなレイヤーリストドロウアブルを作成しました:

<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item>
        <shape Android:shape="rectangle">
        <solid Android:color="@color/underlineColor"/>
        </shape>
    </item>
<item Android:bottom="3dp">
    <shape Android:shape="rectangle">
        <solid Android:color="@color/buttonColor"/>
    </shape>
</item>

最初にunderlineColorで四角形を描画し、次にこの上に実際のbuttonColorでbottomPaddingを適用して別の四角形を描画するという考え方です。常に機能します。

しかし、buttonColorを透明にする必要がある場合、上記のドロアブルを使用できませんでした。もう一つ解決策を見つけました

<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item>
    <shape Android:shape="rectangle">
        <solid Android:color="@Android:color/transparent"/>
    </shape>
</item>

<item Android:drawable="@drawable/white_box" Android:gravity="bottom"     Android:height="2dp"/>
</layer-list>

(ここでわかるように、mainButtonColorは透明で、white_boxは白いソリッドで描画可能な単純な長方形です)

4
Lanitka

このxmlを使用して、選択した色を変更します。

<item>
    <layer-list>
        <item>
            <shape>
                <solid Android:color="@color/gray_500" />

            </shape>
        </item>
        <!-- CONTENT LAYER -->
        <item Android:bottom="2dp" >
            <shape>
                <solid Android:color="#ffffff" />
            </shape>
        </item>
    </layer-list>
</item>

プログラムで必要な場合

public static Drawable getStorkLineDrawable(@ColorInt int colorStrok, int    iSize, int left, int top, int right, int bottom)

{
    GradientDrawable gradientDrawable = new GradientDrawable();
    gradientDrawable.setShape(GradientDrawable.RECTANGLE);
    gradientDrawable.setStroke(iSize, colorStrok);
    LayerDrawable layerDrawable = new LayerDrawable(new Drawable[]{gradientDrawable});
    layerDrawable.setLayerInset(0, left, top, right, bottom);
    return layerDrawable;
}

このメソッドを次のように呼び出します

  Drawable yourLineDrawable=  getStorkLineDrawable(yourColor, iSize, -iSize, -iSize, -iSize, 0);
1
sourav pandit

背景が透明な完全に透明な編集テキストです。

<item>
    <shape Android:shape="rectangle" >
        <solid Android:color="@color/transparent" />
    </shape>
</item>

<item Android:top="-3dp" Android:right="-3dp" Android:left="-3dp">
    <shape>
        <solid Android:color="@Android:color/transparent" />
        <stroke

            Android:width="2dp"
            Android:color="@color/bottomline" />
    </shape>
</item>
0
Samet öztoprak

これは私にとって最もうまくいきました:

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

下部にのみ線を表示します。ストロークの幅で好きなサイズに簡単に変更でき、それに応じて上、左、右も更新できます。

0
Sileria