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

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

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

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

像这样使用。 它会工作。

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

我正在开发与Visual Studio 2015和Xamarin。 我遇到了上面描述的TextView.SetTextAppearance问题(我正在构build我的应用程序以在API 22和23平台上运行)。 我尝试了扩展TextView类并覆盖SetTextAppearance ,但最终放弃了这种方法,而是select使用在#pragma warning disable 618 / #pragma warning restore 618包含的弃用TextView.SetTextAppearance(Context, int)来抑制编译警告。 构build成功,相同的apk在Android 5.1 / API 22和Android 6.0 / API 23设备上效果很好。