TextViewの背景としてドロアブルを使用して、テキストの下に分割線を配置しています。このdrawable-xmlでそれを達成しました:
<?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="#FFDDDDDD" />
<gradient
Android:angle="0"
Android:startColor="#FFAAAAAA"
Android:endColor="#FFEEEEEE"
/>
</shape>
</item>
<item Android:bottom="2dp">
<shape
Android:shape="rectangle">
<solid Android:color="#FF000000" />
</shape>
</item>
</layer-list>
ただし、このメソッドは、黒い長方形の上に色付きの長方形を描画します。黒は透明ではないため、図形の下部に黒い四角形のない線のみを作成したいと思います。どうすればそれを達成できますか?
一般的に、フォーカス、プレスなどの状態を持つデフォルトの背景色をオーバーライドするため、絶対に必要でない限り、背景をできるだけ混乱させないようにします。必要なだけ厚い。例えば:
<View
Android:background="#FF000000"
Android:layout_height="2dp"
Android:layout_width="fill_parent"/>
これは私が私の一番下に行を取得した方法です。ストロークを描画しますが、アイテムを上下に移動して、上下にストロークが表示されないようにします。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:top="-8dp" Android:left="-8dp" Android:right="-8dp">
<shape>
<solid Android:color="#2b7996"/>
<stroke Android:color="#33b5e5" Android:width="6dp"/>
</shape>
</item>
</layer-list>
私はそれがより良い解決策だと思う:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item Android:gravity="bottom">
<shape>
<size Android:height="1dp" />
<solid Android:color="#000000" />
</shape>
</item>
</layer-list>
通常、同様のタスクのために-私はこのようなレイヤーリストドローアブルを作成しました:
<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 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">
<shape>
<solid Android:color="@Android:color/transparent"/>
<stroke Android:color="@color/white" Android:width="5dp"/>
</shape>
</item>
<item Android:top="-5dp" Android:bottom="-5dp" Android:right="-5dp">
<shape>
<solid Android:color="@Android:color/transparent"/>
<stroke Android:color="@color/colorPrimaryDark" Android:width="5dp"/>
</shape>
</item>
<item Android:bottom="-5dp" Android:left="-5dp" Android:right="-5dp">
<shape>
<solid Android:color="@Android:color/transparent"/>
<stroke Android:color="@color/colorPrimaryDark" Android:width="5dp"/>
</shape>
</item>
<item Android:top="-5dp" Android:left="-5dp" Android:bottom="-5dp">
<shape>
<solid Android:color="@Android:color/transparent"/>
<stroke Android:color="@color/colorPrimaryDark" Android:width="5dp"/>
</shape>
</item>
<item Android:bottom="2dp" Android:left="5dp" Android:right="5dp" Android:top="5dp">
<shape>
<solid Android:color="@color/colorPrimary"/>
<corners Android:bottomRightRadius="0dp"
Android:bottomLeftRadius="0dp"
Android:topLeftRadius="0dp"
Android:topRightRadius="0dp" />
</shape>
</item>
</layer-list>
簡単な解決策は、TextViewを拡張してから、onDrawをオーバーライドすることです。
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
Paint.setColor(ContextCompat.getColor(getContext(),R.color.colorTextUnderLine));
Paint.setStrokeWidth(10);
canvas.drawLine(0.0f,canvas.getHeight(),canvas.getWidth(),canvas.getHeight(),
Paint);
}