42

我正在以编程方式创建一个 textView。有没有办法可以设置这个 textView 的样式?类似的东西

style="@android:style/TextAppearance.DeviceDefault.Small"

如果我有layout.xml文件,我会使用它。

4

8 回答 8

71

您不能以编程方式设置视图的样式,但您可以执行类似textView.setTextAppearance(context, android.R.style.TextAppearance_Small);.

于 2013-02-22T08:55:03.053 回答
33

目前无法以编程方式设置视图的样式。

为了解决这个问题,您可以创建一个分配了样式的模板布局 xml 文件,例如在res/layoutcreate tvtemplate.xmlas 中具有以下内容:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="This is a template"
        style="@android:style/TextAppearance.DeviceDefault.Small" />

然后膨胀这个来实例化你的新TextView:

TextView myText = (TextView)getLayoutInflater().inflate(R.layout.tvtemplate, null);
于 2013-02-22T08:53:40.670 回答
15

实际上,这在 API 级别 21 中是可能的。

TextView 有一个4 参数构造函数

TextView (Context context, 
          AttributeSet attrs, 
          int defStyleAttr, 
          int defStyleRes)

在这种情况下,中间两个参数不是必需的。下面的代码直接在一个activity中创建了一个TextView,并且只定义了它的样式资源:

TextView myStyledTextView = new TextView(this, null, 0, R.style.my_style);
于 2017-06-03T14:37:18.177 回答
8

兼容版本(由于 api 23 中的弃用):

TextViewCompat.setTextAppearance(textView, android.R.style.TextAppearance_DeviceDefault_Small);
于 2018-05-07T16:52:09.313 回答
6

试试这个

textview.setTextAppearance(context, R.style.yourstyle);

这可能不起作用尝试使用这样的文本视图创建 xml

textviewstyle.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        style="@android:style/TextAppearance.DeviceDefault.Small" />

要获得所需的样式,请膨胀包含 textview 的 xml

TextView myText = (TextView)getLayoutInflater().inflate(R.layout.tvstyle, null);
于 2013-02-22T08:57:24.893 回答
1

对于在运行时(在代码中)生成的视图,您可以将样式传递给构造函数:View(Context, AttributeSet, int)

在其他情况下,您必须调用 varios 方法来更改外观

于 2013-02-22T08:55:45.010 回答
0
@Deprecated
public void setTextAppearance(Context context, @StyleRes int resId)

自 Android SDK 23 起,此方法已弃用。

您可以使用安全版本:

if (Build.VERSION.SDK_INT < 23) {
    super.setTextAppearance(context, resId);
} else {
    super.setTextAppearance(resId);
}
于 2018-01-17T07:54:13.100 回答
0
textView.setTextAppearance(context, android.R.style.TextAppearance_Small);

在 java 中已被弃用,因此在没有上下文的情况下使用 kotlin

textView.setTextAppearance(android.R.style.TextAppearance_Small)
于 2021-05-16T15:31:42.283 回答