如何以编程方式设置textView的样式?

时间:2013-02-22 08:50:49

标签: android styles textview android-styles

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

的东西
style="@android:style/TextAppearance.DeviceDefault.Small"

如果我有一个layout.xml文件,我将使用它。

8 个答案:

答案 0 :(得分:49)

您无法以编程方式设置视图的样式,但您可以执行textView.setTextAppearance(context, android.R.style.TextAppearance_Small);之类的操作。

答案 1 :(得分:27)

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

要解决此问题,您可以创建一个分配了样式的模板布局xml文件,例如在res/layout创建tvtemplate.xml中,如下所示:

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

答案 2 :(得分:6)

实际上,从API级别21开始,这是可能的。

TextView有4 parameter constructor

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

在这种情况下,不需要中间的两个参数。以下代码直接在活动中创建TextView,并仅定义其样式资源:

TextView myStyledTextView = new TextView(this, null, 0, R.style.my_style);

答案 3 :(得分:5)

试试这个

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

这可能不起作用尝试使用textview这样创建一个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);

答案 4 :(得分:4)

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

TextViewCompat.setTextAppearance(textView, android.R.style.TextAppearance_DeviceDefault_Small);

答案 5 :(得分:1)

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

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

答案 6 :(得分:0)

@Deprecated
public void setTextAppearance(Context context, @StyleRes int resId)

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

你可以使用安全版本:

if (Build.VERSION.SDK_INT < 23) {
    super.setTextAppearance(context, resId);
} else {
    super.setTextAppearance(resId);
}

答案 7 :(得分:0)

textView.setTextAppearance(context, android.R.style.TextAppearance_Small);

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

textView.setTextAppearance(android.R.style.TextAppearance_Small)