在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设备上效果很好。