Как я могу определить подчеркнутый текст в макете Android xml
?
Можно ли подчеркнуть текст в макете Android?
Ответ 1
Это может быть достигнуто, если вы используете файл string resource, который поддерживает теги HTML, такие как <b></b>
, <i></i>
и <u></u>
.
<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);
Ответ 2
Вы можете попробовать с помощью
textview.setPaintFlags(textview.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
Ответ 3
Три способа подорвать текст в TextView.
setPaintFlags(); в TextView
1-й подход
Для подрыва текста в TextView вам нужно использовать SpannableString
String udata="Underlined Text";
SpannableString content = new SpannableString(udata);
content.setSpan(new UnderlineSpan(), 0, udata.length(), 0);//where first 0 shows the starting and udata.length() shows the ending span.if you want to span only part of it than you can change these values like 5,8 then it will underline part of it.
mTextView.setText(content);
Второй подход
Вы можете использовать метод SetPaintFlags для TextView, чтобы подчеркнуть текст TextView.
Например,
mTextView.setPaintFlags(mTextView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
mTextView.setText("This text will be underlined");
Вы можете ссылаться на константы класса Paint, если вы хотите нанести удар по тексту.
Третий подход
Использовать Html.fromHtml(htmlString);
String htmlString="<u>This text will be underlined</u>";
mTextView.setText(Html.fromHtml(htmlString));
Ответ 4
"Принимаемый" ответ выше работает НЕ (при попытке использовать строку типа textView.setText(Html.fromHtml(String.format(getString(...), ...)))
.
Как указано в документах , вы должны скрыть (html-сущность, закодированную) открывающую скобку внутренних тегов <
, например. результат должен выглядеть так:
<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), ...)));
Ответ 5
Содержимое файла 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"
/>
Ответ 6
Однострочное решение:
textview.setPaintFlags(textview.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
Ответ 7
Для Button и TextView это самый простой способ:
Кнопка:
Button button = (Button) findViewById(R.id.btton1);
button.setPaintFlags(button.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
Textview:
TextView textView = (TextView) findViewById(R.id.textview1);
textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
Ответ 8
Однострочное решение
myTextView.setText(Html.fromHtml("<p><u>I am Underlined text</u></p>"));
Это немного поздно, но может быть полезно для кого-то.
Ответ 9
Самый последний подход к рисованию подчеркнутого текста описан Romain Guy на носителе с доступным исходным кодом на GitHub. В этом примере приложения представлены две возможные реализации:
- Реализация на основе Path, которая требует уровня API 19
- Региональная реализация, которая требует уровня API 1
Ответ 10
В Kotlin можно использовать функцию расширения. Это можно использовать только из кода, а не из XML.
fun TextView.underline() {
paintFlags = paintFlags or Paint.UNDERLINE_TEXT_FLAG
}
Использование:
tv_change_number.underline()
tv_resend_otp.underline()
Ответ 11
Я знаю, что это поздний ответ, но я придумал решение, которое работает очень хорошо... Я взял ответ от Энтони Форлони для подчеркивания текста в коде и создал подкласс TextView, который обрабатывает это для вас. Затем вы можете просто использовать подкласс в XML, когда хотите иметь подчеркнутый TextView.
Вот класс, который я создал:
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, чтобы показать, что мой пример работает с изменением цвета, размера и стиля текста...
Надеюсь, это поможет!
Ответ 12
проверьте подчеркнутый стиль нажимаемой кнопки:
<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>
Результат:
Ответ 13
Более чистый способ вместо textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
метод заключается в использовании textView.getPaint().setUnderlineText(true);
И если позже вам потребуется отключить подчеркивание для этого представления, например, в повторно используемом представлении в RecyclerView, textView.getPaint().setUnderlineText(false);
Ответ 14
Просто используйте атрибут в файле строковых ресурсов, например.
<string name="example"><u>Example</u></string>
Ответ 15
Я использовал этот XML-объект для рисования, чтобы создать нижнюю границу, и применил его в качестве фона для моего текстового представления.
<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>
Ответ 16
Простое и гибкое решение в 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" />
Ответ 17
Блин, проще всего пользоваться
TextView tv = findViewById(R.id.tv);
tv.setText("some text");
Подчеркните весь TextView
setUnderLineText(tv, tv.getText().toString());
Подчеркните некоторую часть TextView
setUnderLineText(tv, "some");
Также поддержите потомки TextView, такие как EditText, Button, Checkbox
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);
}
}
}
Ответ 18
Другое решение заключается в создании пользовательского представления, расширяющего 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"
/>
Ответ 19
попробуйте этот код
в 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)));
Удачи!
Ответ 20
- Перейти к файлу ресурса strings.xml
- При необходимости добавьте строку в файл ресурсов с тегом подчеркивания HTML.
- Вызовите строковый идентификатор ресурса в вашем коде Java следующим образом:
sampleTextView.setText(R.string.sample_string);
- На выходе должно быть подчеркнуто слово "Stackoverflow".
Кроме того, следующий код не будет печатать подчеркивание:
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
Надеюсь, это поможет.
Ответ 21
Я упростил Самуилу ответ:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--/questions/13742/can-i-underline-text-in-an-android-layout/99245#99245-->
<item
android:left="-5dp"
android:right="-5dp"
android:top="-5dp">
<shape>
<stroke
android:width="1.5dp"
android:color="@color/colorAccent" />
</shape>
</item>
</layer-list>
Ответ 22
Ответ с наибольшим количеством голосов является правильным и самым простым. Однако иногда вы можете обнаружить, что не работает с одним шрифтом, но работает с другими (с какой проблемой я столкнулся при работе с китайским языком).
Решение заключается в том, чтобы не использовать "WRAP_CONTENT" только для вашего TextView, потому что нет места для рисования линии. Вы можете установить фиксированную высоту для вашего TextView или использовать android: paddingVertical с WRAP_CONTENT.
Ответ 23
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>
Обратите внимание на символ Escape в XML файле.
Ответ 24
У меня была проблема, когда я использую собственный шрифт, и подчеркивание, созданное с помощью трюка файла ресурса (<u>Underlined text</u>
), действительно работало, но Android удалось преобразовать подчеркивание в своего рода ударный желоб.
Я использовал этот ответ, чтобы нарисовать границу ниже текстового поля: fooobar.com/info/13759/.... Очевидно, что это не работает для частичного подчеркнутого текста или многострочного текста.