Androidレイアウトのxml
ファイルに underlined textを定義する方法を教えてください。
<b></b>
、<i></i>
、<u></u>
などのHTMLタグをサポートする 文字列resource xmlファイルを使用している場合は、これを実現できます。
<resources>
<string name="your_string_here">This is an <u>underline</u>.</string>
</resources>
コードから何かを強調したい場合は、
TextView textView = (TextView) view.findViewById(R.id.textview);
SpannableString content = new SpannableString("Content");
content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
textView.setText(content);
あなたが試すことができます
textview.setPaintFlags(textview.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
上記の "受け入れられた"答えはNOTを働きます(あなたがtextView.setText(Html.fromHtml(String.format(getString(...), ...)))
のような文字列を使おうとするとき)。
documentations で述べたように、内部タグの左大括弧を<
でエスケープする必要があります。結果は次のようになります。
<resource>
<string name="your_string_here">This is an <u>underline</u>.</string>
</resources>
それからあなたのコードであなたはテキストを設定することができます:
TextView textView = (TextView) view.findViewById(R.id.textview);
textView.setText(Html.fromHtml(String.format(getString(R.string.my_string), ...)));
1行ソリューション
textview.setPaintFlags(textview.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
Strings.xmlファイルの内容:
<resource>
<string name="my_text">This is an <u>underline</u>.</string>
</resources>
レイアウトxmlファイルは、次に示すように、textviewの以下のプロパティで上記の文字列リソースを使用します。
<TextView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:gravity="center_horizontal"
Android:text="@string/my_text"
Android:selectAllOnFocus="false"
Android:linksClickable="false"
Android:autoLink="all"
/>
ButtonとTextViewの場合、これが最も簡単な方法です。
ボタン:
Button button = (Button) findViewById(R.id.btton1);
button.setPaintFlags(button.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
テキストビュー:
TextView textView = (TextView) findViewById(R.id.textview1);
textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
myTextView.setText(Html.fromHtml("<p><u>I am Underlined text</u></p>"));
少し遅れていますが、誰かに役立つかもしれません。
私はこれが遅い答えであることを知っています、しかし私はかなりうまくいく解決策を思いつきました...私はコードのテキストに下線を引くためにAnthony Forloneyから答えを取り、あなたのためにそれを扱うTextViewのサブクラスを作成しました。それでは、下線付きのTextViewを使いたいときはいつでもXMLのサブクラスを使うことができます。
これが私が作成したクラスです:
import Android.content.Context;
import Android.text.Editable;
import Android.text.SpannableString;
import Android.text.TextWatcher;
import Android.text.style.UnderlineSpan;
import Android.util.AttributeSet;
import Android.widget.TextView;
/**
* Created with IntelliJ IDEA.
* User: Justin
* Date: 9/11/13
* Time: 1:10 AM
*/
public class UnderlineTextView extends TextView
{
private boolean m_modifyingText = false;
public UnderlineTextView(Context context)
{
super(context);
init();
}
public UnderlineTextView(Context context, AttributeSet attrs)
{
super(context, attrs);
init();
}
public UnderlineTextView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
init();
}
private void init()
{
addTextChangedListener(new TextWatcher()
{
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
//Do nothing here... we don't care
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
//Do nothing here... we don't care
}
@Override
public void afterTextChanged(Editable s)
{
if (m_modifyingText)
return;
underlineText();
}
});
underlineText();
}
private void underlineText()
{
if (m_modifyingText)
return;
m_modifyingText = true;
SpannableString content = new SpannableString(getText());
content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
setText(content);
m_modifyingText = false;
}
}
今... XMLで下線付きのテキストビューを作成したいときはいつでも、あなたはただ以下をするだけです:
<com.your.package.name.UnderlineTextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal"
Android:gravity="center"
Android:text="This text is underlined"
Android:textColor="@color/blue_light"
Android:textSize="12sp"
Android:textStyle="italic"/>
このXMLスニペットに追加のオプションを追加して、私の例がテキストの色、サイズ、およびスタイルを変更することで機能することを示します。
お役に立てれば!
Kotlinでは 拡張機能 を使うことができます。これはコードからのみ使用でき、xmlからは使用できません。
fun TextView.underline() {
paintFlags = paintFlags or Paint.UNDERLINE_TEXT_FLAG
}
使用法:
tv_change_number.underline()
tv_resend_otp.underline()
下線付きのクリック可能なボタンスタイルをチェックしてください。
<TextView
Android:id="@+id/btn_some_name"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/btn_add_contact"
Android:textAllCaps="false"
Android:textColor="#57a0d4"
style="@style/Widget.AppCompat.Button.Borderless.Colored" />
strings.xml:
<string name="btn_add_contact"><u>Add new contact</u></string>
結果:
よりクリーンな方法textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
メソッドはtextView.getPaint().setUnderlineText(true);
を使うことです
また、RecyclerViewの再利用ビューのように、後でそのビューの下線をオフにする必要がある場合は、textView.getPaint().setUnderlineText(false);
文字列リソースファイルの属性を使用してください。
<string name="example"><u>Example</u></string>
TextView tv = findViewById(R.id.tv);
tv.setText("some text");
TextView全体に下線を引く
setUnderLineText(tv, tv.getText().toString());
TextViewの一部に下線を引く
setUnderLineText(tv, "some");
EditText、Button、CheckboxなどのTextViewの子もサポートします。
public void setUnderLineText(TextView tv, String textToUnderLine) {
String tvt = tv.getText().toString();
int ofe = tvt.indexOf(textToUnderLine, 0);
UnderlineSpan underlineSpan = new UnderlineSpan();
SpannableString wordToSpan = new SpannableString(tv.getText());
for (int ofs = 0; ofs < tvt.length() && ofe != -1; ofs = ofe + 1) {
ofe = tvt.indexOf(textToUnderLine, ofs);
if (ofe == -1)
break;
else {
wordToSpan.setSpan(underlineSpan, ofe, ofe + textToUnderLine.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(wordToSpan, TextView.BufferType.SPANNABLE);
}
}
}
クリック可能な下線付きテキストを作成する、またはTextViewの複数の部分に下線を付けるには、ここで回答を確認してください
このxml drawableを使用して下罫線を作成し、そのdrawableをテキストビューの背景として適用しました
<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:top="-5dp" Android:right="-5dp" Android:left="-5dp">
<shape>
<solid Android:color="@Android:color/transparent" />
<stroke
Android:width="1.5dp"
Android:color="@color/pure_white" />
</shape>
</item>
</layer-list>
sampleTextView.setText(R.string.sample_string);
さらに、次のコードは下線を印刷しません。
String sampleString = getString(R.string.sample_string);
sampleTextView.setText(sampleString);
代わりに、次のコードを使用してリッチテキスト形式を保持してください。
CharSequence sampleString = getText(R.string.sample_string);
sampleTextView.setText(sampleString);
「文字列を取得するには、getString(int)またはgetText(int)を使用できます。getText(int)は、文字列に適用されているリッチテキストスタイルを保持します。」 Androidのドキュメント.
ドキュメントを参照してください: https://developer.Android.com/guide/topics/resources/string-resource.html
これが役に立つことを願っています。
このコードを試してください
xMLで
<resource>
<string name="my_text"><![CDATA[This is an <u>underline</u>]]></string>
</resources>
コード内
TextView textView = (TextView) view.findViewById(R.id.textview);
textView.setText(Html.fromHtml(getString(R.string.my_text)));
がんばろう!
Xmlのシンプルで柔軟な解決策:
<View
Android:layout_width="match_parent"
Android:layout_height="3sp"
Android:layout_alignLeft="@+id/your_text_view_need_underline"
Android:layout_alignRight="@+id/your_text_view_need_underline"
Android:layout_below="@+id/your_text_view_need_underline"
Android:background="@color/your_color" />
単純化した サミュエル の答え:
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<!--https://stackoverflow.com/a/40706098/4726718-->
<item
Android:left="-5dp"
Android:right="-5dp"
Android:top="-5dp">
<shape>
<stroke
Android:width="1.5dp"
Android:color="@color/colorAccent" />
</shape>
</item>
</layer-list>
別の解決策は、以下に示すようにTextViewを拡張するカスタムビューを作成することです。
public class UnderLineTextView extends TextView {
public UnderLineTextView(Context context) {
super(context);
this.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
}
public UnderLineTextView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
this.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
}
}
そして以下のようにxmlに追加するだけです。
<yourpackage.UnderLineTextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="underline text"
/>
トップ投票の答えは、最も簡単で正しいものです。しかし、あるフォントではうまく動かず、他のフォントではうまく動かないことがあるかもしれません(中国語を扱うときに私が遭遇した問題です)。
解決策はあなたのTextViewだけのために "WRAP_CONTENT"を使わないでください、なぜなら線を引くための余分なスペースがないからです。 TextViewに固定の高さを設定するか、またはWRAP_CONTENTでAndroid:paddingVerticalを使用します。
HtmlCompat.fromHtml(
String.format(context.getString(R.string.set_target_with_underline)),
HtmlCompat.FROM_HTML_MODE_LEGACY)
<string name="set_target_with_underline"><u>Set Target<u> </string>
Xmlファイルのエスケープ記号に注意してください