Android - 以编程方式设置 TextView TextStyle?

2022-08-31 05:12:17

有没有办法以编程方式设置的属性?似乎没有方法。textStyleTextViewsetTextStyle()

需要明确的是,我不是在谈论视图/小部件样式!我说的是以下内容:

<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 是 Attribute textStyle。

正如Shankar V所添加的,要保留先前设置的字体属性,您可以使用:

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

答案 2

假设您的值/样式上有一个名为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>

只需像往常一样在 XML 布局/your_layout.xml文件中创建 TextView,比方说:

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

它对我有用!它应用了颜色,大小,重力等。我已经在Android API级别从8到17的手机和平板电脑上使用它,没有任何问题。请注意,从Android 23开始,该方法已被弃用。上下文参数已被删除,因此最后一行需要是:

textViewTitle.setTextAppearance(R.style.RedHUGEText);

要支持所有API级别,请使用androidX TextViewCompat

TextViewCompat.setTextAppearance(textViewTitle, R.style.RedHUGEText)

记得。。。仅当文本的样式确实依赖于Java逻辑的条件,或者您正在使用代码“动态”构建UI时,这才有用...如果没有,最好只做:

<TextView android:id="@+id/text_view_title" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content 
    android:text="FOO" 
    style="@style/RedHUGEText" />

你总是可以按照自己的方式拥有它!


推荐