public void setTextAppearance(Context context,int resId) 在API级别1中添加
此方法在API级别23中已弃用。 请改用setTextAppearance(int)。
我的问题:为何被弃用?为什么它不再需要Context
?最重要的是,如何将setTextAppearance(int resId)
用于旧版本?
答案 0 :(得分:95)
您可以使用support / androidX库中的TextViewCompat
:
import android.support.v4.widget.TextViewCompat // for support-library
import androidx.core.widget.TextViewCompat // for androidX library
// ...
TextViewCompat.setTextAppearance(view, resId)
在内部,它从API上的视图(view.getContext()
)获取上下文< 23。
答案 1 :(得分:48)
如何在旧版本中使用setTextAppearance(int resId)
?
像这样使用:
if (Build.VERSION.SDK_INT < 23) {
super.setTextAppearance(context, resId);
} else {
super.setTextAppearance(resId);
}
为何被弃用?为什么它不再需要Context?
弃用的原因是无需传递context
。它使用View
提供的默认上下文。看下面的源代码。这应该解释一下。
public void setTextAppearance(@StyleRes int resId) {
setTextAppearance(mContext, resId);
}
这里的mContext
在View
类中定义。因此,您无需再将Context
传递给此方法。 TextView
将在创建过程中使用提供给它的上下文。这更有意义。
<强>更新强>
此功能是作为支持库的一部分添加的。因此,请使用TextView
[documentation]而不是TextViewCompat
。此外还引入了其他类,如ImageViewCompat
。
答案 2 :(得分:0)
以上答案是正确的-这也是另一种方式。在Kotlin中,我编写了一个扩展程序,如果您支持SDK 23
及以下和以上版本,则生活会更轻松。
fun TextView.setAppearance(context: Context, res: Int) {
if (Build.VERSION.SDK_INT < 23) {
setTextAppearance(context, res)
} else {
setTextAppearance(res)
}
}