在API级别23

时间:2015-11-07 10:48:17

标签: android deprecated

  

public void setTextAppearance(Context context,int resId)   在API级别1中添加   
  此方法在API级别23中已弃用。   请改用setTextAppearance(int)。

我的问题:为何被弃用?为什么它不再需要Context?最重要的是,如何将setTextAppearance(int resId)用于旧版本?

3 个答案:

答案 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。

Source for TextViewCompat

Source for TextView (API23)

答案 1 :(得分:48)

  1. 如何在旧版本中使用setTextAppearance(int resId)

    像这样使用:

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

    更多信息:https://stackoverflow.com/a/33393762/4747587

  2. 为何被弃用?为什么它不再需要Context?

    弃用的原因是无需传递context。它使用View提供的默认上下文。看下面的源代码。这应该解释一下。

    public void setTextAppearance(@StyleRes int resId) {
         setTextAppearance(mContext, resId);
    }
    

    这里的mContextView类中定义。因此,您无需再将Context传递给此方法。 TextView将在创建过程中使用提供给它的上下文。这更有意义。

  3. <强>更新

    此功能是作为支持库的一部分添加的。因此,请使用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)
        }
    }