Android-Установить TextView TextStyle программно?

есть ли способ установить textStyle атрибут TextView программно? Кажется, нет setTextStyle() метод.

чтобы быть ясным, я не говорю о стилях просмотра / виджета! Я говорю о следующем:

<TextView
  android:id="@+id/my_text"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="Hello World"
  android:textStyle="bold" />

9 ответов


textview.setTypeface(Typeface.DEFAULT_BOLD);

setTypeface является атрибутом textStyle.

As Шанкар V добавил, чтобы сохранить ранее установленные атрибуты шрифта вы можете использовать:

textview.setTypeface(textview.getTypeface(), Typeface.BOLD);

предположим, у вас есть стиль RedHUGEText для ваших значений/стилей.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-макете / 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);

это сработало для меня! И он приложил цвет, размер, силу тяжести, etc. Я использовал его на телефонах и планшетах с уровнями 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" />

вы всегда можете сделать по-своему!

надеюсь, что это помогает!


искать setTextAppearance или setTextTypeface. Есть аналогичный вопрос по stackoverflow:как изменить стиль TextView во время выполнения


так много способов достичь этой задачи некоторые ниже: -

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"

этот вопрос задается во многих местах по-разному. Я изначально ответил на него здесь, но я чувствую, что это актуально и в этой теме (так как я закончил здесь когда я искал ответа).

нет одного решения этой проблемы, но это сработало для моего случая использования. Проблема в том, что конструктор "View(context, attrs, defStyle)" не ссылается на фактический стиль, он хочет атрибут. Итак, мы Уилл:

  1. определение атрибутов
  2. создать стиль, который вы хотите использовать
  3. применить стиль для этого атрибута на нашу тему
  4. создайте новые экземпляры нашего представления с этим атрибутом

In ' res / values / attrs.xml', определите новый атрибут:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="customTextViewStyle" format="reference"/>
    ...
</resources>    

в res / значения / стили.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>

In ' res / значения / темы.xml ' или "РЭС" /значения/стили.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.


это сработало для меня

textview.setTypeface(textview.getTypeface(), Typeface.BOLD);

или

textview.setTypeface(Typeface.DEFAULT_BOLD);

Ive решил его с помощью двух простых методов.

следуйте инструкциям.

мой существующий тип объявления:

<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>

мой код Android Java:

    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));

С уважением.


***** Котлин Версия *****

сохранить текущий шрифт в дополнение к стиль текста:

textView.apply {
    setTypeface(typeface, Typeface.NORMAL)
    // or
    setTypeface(typeface, Typeface.BOLD)
    // or
    setTypeface(typeface, Typeface.ITALIC)
    // or
    setTypeface(typeface, Typeface.BOLD_ITALIC)
}

взгляните на это.

эта функция в настоящее время не поддерживается.

как установить атрибут стиля программно в Android?