在android中以编程方式设置TextView TextAppearance

时间:2013-04-29 03:32:09

标签: android textview

我将实现一个LinearLayout,其中输入字段是根据数据库表的字段数以编程方式生成的。

不幸的是,当我尝试在textApperance中将属性textApperanceLarge设置为TextView时,它不起作用。以下是我的代码......

for (int i = 0; i < selectedProducts; i++) {

            premLayout[i] = new LinearLayout(this);
            premLayout[i].setLayoutParams(new LinearLayout.LayoutParams(
                    LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
            premLayout[i].setOrientation(LinearLayout.HORIZONTAL);
            premLayout[i].setGravity(Gravity.TOP);

            premTextView[i] = new TextView(this);
            premTextView[i].setLayoutParams(new LinearLayout.LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
                    2.0f));
            premTextView[i].setTextAppearance(this, android.R.attr.textAppearanceLarge);

            premTextView[i].setText(premiumChannels.get(i));
            premTextView[i].setId(i + 600);

            int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20, getResources().getDisplayMetrics());
            premTextView[i].setWidth(px);

            premLayout[i].addView(premTextView[i]);

2 个答案:

答案 0 :(得分:183)

像这样使用。它会起作用。

textView.setTextAppearance(this, android.R.style.TextAppearance_Large);

或者,从API 23开始,您不需要传递上下文。因此,您只需致电:

textView.setTextAppearance(android.R.style.TextAppearance_Large);

如果要支持API 23或更高版本以及较低版本,可以使用以下方法简化任务。仅当您已针对API 23或更高版本时,才使用以下方法。如果您的目标API小于23,则下面的代码会给出错误,因为新方法不可用。

public void setTextAppearance(Context context, int resId) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
        super.setTextAppearance(context, resId);
    } else {
        super.setTextAppearance(resId);
    }
}

答案 1 :(得分:7)

使用TextViewCompat.setTextAppearance()方法处理您的sdk版本检查。