Android - программный набор TextView TextStyle?
Можно ли программно установить атрибут textStyle
для TextView
? Не существует метода setTextStyle()
.
Чтобы быть ясным, я не говорю о стилях View/Widget! Я говорю о следующем:
<TextView
android:id="@+id/my_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello World"
android:textStyle="bold" />
Ответы
Ответ 1
textview.setTypeface(Typeface.DEFAULT_BOLD);
setTypeface - это атрибут textStyle.
Как добавил Shankar V, чтобы сохранить ранее установленные атрибуты шрифта, вы можете использовать:
textview.setTypeface(textview.getTypeface(), Typeface.BOLD);
Ответ 2
Скажем, у вас есть стиль RedHUGEText для ваших значений /styles.xml:
<style name="RedHUGEText" parent="@android:style/Widget.TextView">
<item name="android:textSize">@dimen/text_size_huge</item>
<item name="android:textColor">@color/red</item>
<item name="android:textStyle">bold</item>
</style>
Просто создайте свой TextView как обычно в файле XML layout/your_layout.xml, скажем:
<TextView android:id="@+id/text_view_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content
android:text="FOO" />
И в коде java вашей активности вы выполните следующее:
TextView textViewTitle = (TextView) findViewById(R.id.text_view_title);
textViewTitle.setTextAppearance(this, R.style.RedHUGEText);
Это сработало для меня! И он применял цвет, размер, гравитацию и т.д. Я использовал его на телефонах и планшетах с уровнями API Android от 8 до 17 без проблем.
Помните... это полезно, только если стиль текста действительно зависит от состояния вашей логики Java или вы создаете пользовательский интерфейс "на лету" с кодом... если это не так, это лучше просто:
<TextView android:id="@+id/text_view_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content
android:text="FOO"
style="@style/RedHUGEText" />
Вы всегда можете сделать это по-своему!
Надеюсь, что это поможет!
Ответ 3
Найдите setTextAppearance
или также setTextTypeface
. Существует аналогичный вопрос о stackoverflow: Как изменить стиль TextView во время выполнения
Ответ 4
Для решения этой задачи существует несколько способов: -
1.
String text_view_str = "<b>Bolded text</b>, <i>italic text</i>, even <u>underlined</u>!";
TextView tv = (TextView)findViewById(R.id.ur_text_view_id);
tv.setText(Html.fromHtml(text_view_str));
2.
tv.setTypeface(null, Typeface.BOLD);
tv.setTypeface(null, Typeface.ITALIC);
tv.setTypeface(null, Typeface.BOLD_ITALIC);
tv.setTypeface(null, Typeface.NORMAL);
3.
SpannableString spannablecontent=new SpannableString(o.content.toString());
spannablecontent.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC),
0,spannablecontent.length(), 0);
// set Text here
tt.setText(spannablecontent);
4.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="boldText">
<item name="android:textStyle">bold|italic</item>
<item name="android:textColor">#FFFFFF</item>
</style>
<style name="normalText">
<item name="android:textStyle">normal</item>
<item name="android:textColor">#C0C0C0</item>
</style>
</resources>
tv.setTextAppearance(getApplicationContext(), R.style.boldText);
или если вы хотите через xml
android:textStyle="normal"
android:textStyle="normal|bold"
android:textStyle="normal|italic"
android:textStyle="bold"
android:textStyle="bold|italic"
Ответ 5
Этот вопрос задается во многих местах по-разному. Я первоначально ответил на это здесь, но я чувствую, что это актуально и в этой теме (так как я закончил здесь, когда я искал ответ).
Нет ни одного решения этой проблемы, но это сработало для моего использования. Проблема заключается в том, что конструктор "View (context, attrs, defStyle)" не ссылается на фактический стиль, он хочет получить атрибут. Итак, мы будем:
- Определить атрибут
- Создайте стиль, который вы хотите использовать
- Применить стиль для этого атрибута в нашей теме
- Создайте новые экземпляры нашего представления с этим атрибутом
В 'res/values /attrs.xml' определите новый атрибут:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="customTextViewStyle" format="reference"/>
...
</resources>
В res/values /styles.xml "Я собираюсь создать стиль, который я хочу использовать в своем пользовательском TextView
<style name="CustomTextView">
<item name="android:textSize">18sp</item>
<item name="android:textColor">@color/white</item>
<item name="android:paddingLeft">14dp</item>
</style>
В 'res/values /themes.xml' или 'res/values /styles.xml' измените тему для вашего приложения/действия и добавьте следующий стиль:
<resources>
<style name="AppBaseTheme" parent="android:Theme.Light">
<item name="@attr/customTextViewStyle">@style/CustomTextView</item>
</style>
...
</resources>
Наконец, в вашем пользовательском TextView вы можете теперь использовать конструктор с атрибутом, и он получит ваш стиль
public class CustomTextView extends TextView {
public CustomTextView(Context context) {
super(context, null, R.attr.customTextView);
}
}
Стоит отметить, что я неоднократно использовал customTextView в разных вариантах и разных местах, но отнюдь не требуется, чтобы имя представления соответствовало стилю или атрибуту или чему-либо еще. Кроме того, этот метод должен работать с любым пользовательским представлением, а не только с TextViews.
Ответ 6
Это сработало для меня
textview.setTypeface(textview.getTypeface(), Typeface.BOLD);
или
textview.setTypeface(Typeface.DEFAULT_BOLD);
Ответ 7
• Kotlin Version
Чтобы сохранить текущий шрифт в дополнение к стилю текста:
textView.apply {
setTypeface(typeface, Typeface.NORMAL)
// or
setTypeface(typeface, Typeface.BOLD)
// or
setTypeface(typeface, Typeface.ITALIC)
// or
setTypeface(typeface, Typeface.BOLD_ITALIC)
}
Ответ 8
Я разрешил это с помощью двух простых методов.
Следуйте объяснениям.
Мое существующее объявление стиля:
<style name="SearchInfoText">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textSize">24sp</item>
<item name="android:textColor">@color/Church_Grey</item>
<item name="android:shadowColor">@color/Shadow_Church</item>
<item name="android:shadowRadius">3</item>
<item name="android:shadowDx">1</item>
<item name="android:shadowDy">1</item>
</style>
Мой код Java для Android:
TextView locationName = new TextView(getSupportActivity());
locationName.setId(IdGenerator.generateViewId());
locationName.setText(location.getName());
locationName.setLayoutParams(super.centerHorizontal());
locationName.setTextSize(24f);
locationName.setPadding(0, 0, 0, 15);
locationName.setTextColor(getResources().getColor(R.color.Church_Grey));
locationName.setShadowLayer(3, 1, 1, getResources().getColor(R.color.Shadow_Church));
С уважением.
Ответ 9
Как уже упоминалось здесь, эта функция не поддерживается.