テキストビューでテキストに下線を引く方法を知っています。しかし、いくつかの異なる色でテキストに下線を引くにはどうすればよいですか?下線は次のようにして行うことができます:
TextView t = (TextView) findViewById(R.id.textview);
t.setPaintFlags(t.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
t.setText("Underline Text");
テキストの色が黒で、同じ色に青の下線を引きたいとしましょう。前もって感謝します。
私は同じ問題を抱えており、EditText
でこれを行うための他の投稿を読んでいるときに Layout クラスに遭遇しました。キャンバスで下線を手動で描くことで、これを実現するために必要なすべてを提供します。
最初に、XMLレイアウトファイルで簡単にカスタマイズできるようにカスタム属性を定義しました
<declare-styleable name="UnderlinedTextView" >
<attr name="underlineWidth" format="dimension" />
<attr name="underlineColor" format="color" />
</declare-styleable>
そしてカスタムTextView
クラス
public class UnderlinedTextView extends AppCompatTextView {
private Rect mRect;
private Paint mPaint;
private float mStrokeWidth;
public UnderlinedTextView(Context context) {
this(context, null, 0);
}
public UnderlinedTextView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public UnderlinedTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs, defStyleAttr);
}
private void init(Context context, AttributeSet attributeSet, int defStyle) {
float density = context.getResources().getDisplayMetrics().density;
TypedArray typedArray = context.obtainStyledAttributes(attributeSet, R.styleable.UnderlinedTextView, defStyle, 0);
int underlineColor = typedArray.getColor(R.styleable.UnderlinedTextView_underlineColor, 0xFFFF0000);
mStrokeWidth = typedArray.getDimension(R.styleable.UnderlinedTextView_underlineWidth, density * 2);
typedArray.recycle();
mRect = new Rect();
mPaint = new Paint();
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setColor(underlineColor);
mPaint.setStrokeWidth(mStrokeWidth);
}
public int getUnderLineColor() {
return mPaint.getColor();
}
public void setUnderLineColor(int mColor) {
mPaint.setColor(mColor);
invalidate();
}
public float getUnderlineWidth() {
return mStrokeWidth;
}
public void setUnderlineWidth(float mStrokeWidth) {
this.mStrokeWidth = mStrokeWidth;
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
int count = getLineCount();
final Layout layout = getLayout();
float x_start, x_stop, x_diff;
int firstCharInLine, lastCharInLine;
for (int i = 0; i < count; i++) {
int baseline = getLineBounds(i, mRect);
firstCharInLine = layout.getLineStart(i);
lastCharInLine = layout.getLineEnd(i);
x_start = layout.getPrimaryHorizontal(firstCharInLine);
x_diff = layout.getPrimaryHorizontal(firstCharInLine + 1) - x_start;
x_stop = layout.getPrimaryHorizontal(lastCharInLine - 1) + x_diff;
canvas.drawLine(x_start, baseline + mStrokeWidth, x_stop, baseline + mStrokeWidth, mPaint);
}
super.onDraw(canvas);
}
}
使い方は簡単です
<some.package.UnderlinedTextView
Android:id="@+id/tvTest"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_alignParentBottom="true"
Android:layout_marginBottom="10dp"
Android:layout_marginLeft="20dp"
Android:layout_marginRight="20dp"
Android:gravity="center"
Android:text="This is a demo text"
Android:textSize="16sp"
app:underlineColor="#ffc112ef"
app:underlineWidth="3dp"/>
最終結果
以下のように試すことができます:
String styledText = "<u><font color='red'>Underline Text</font></u>."; textView.setText(Html.fromHtml(styledText), TextView.BufferType.SPANNABLE);
あなたがXMLのファンなら。私の解決策を見てください:
セレクターselector_edittext_white.xml
をドローアブルフォルダーに作成します
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:bottom="-15dp">
<rotate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:fromDegrees="0"
Android:pivotX="0.5"
Android:pivotY="0.5"
Android:toDegrees="0">
<shape Android:shape="line">
<stroke
Android:width="0.5dp"
Android:color="@Android:color/white" />
</shape>
</rotate>
</item>
</layer-list>
次に、EditTextを設定します
Android:background="@drawable/selector_edittext_white"
上記の設定では、下線の色はwhiteであり、上記のAndroid:bottom
を変更することで移動できます "-15dp"。消えてしまった場合は、このようにEditTextの下マージンを設定してみてください
Android:layout_marginBottom="5dp"
imee.setText(Html.fromHtml("<font color=#9e4c4e> <u>" + ime + "</u> </font>"));
avtorr.setText(Html.fromHtml("<font color=#90494f> <u>" + avtorr + "</u> </font>"));
最善の解決策は、HTMLを使用することです。