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>
これは一種のハックですが、おそらくこれが最善の方法だと思います。高さに関係なく、破線は常に下になります。
<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つ(試したことはありません)は、独自の境界の外側に描画するビューの場合、負のマージンの境界線が表示される可能性があることです。
これはトリックです...
<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>
<?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>
この回答は、ここのようにEditText
の点線の下部境界線を表示したいGoogle検索者向けです
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" />
ネガティブなパディングやコウノトリは一切なく、簡単だと感じています。
<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>
私があなたを理解していれば、形を使う必要はないと思います。
次の画像に示すように見ている場合は、次のレイアウトを使用します。
<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>
次の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>
シンプルなソリューション:
描画可能ファイルを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"
/>
通常、同様のタスクのために-私はこのようなレイヤーリストドロウアブルを作成しました:
<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は白いソリッドで描画可能な単純な長方形です)
この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);
背景が透明な完全に透明な編集テキストです。
<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>
これは私にとって最もうまくいきました:
<?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>
下部にのみ線を表示します。ストロークの幅で好きなサイズに簡単に変更でき、それに応じて上、左、右も更新できます。