web-dev-qa-db-ja.com

APIレベル23で廃止されたsetTextAppearance

public void setTextAppearance(コンテキストコンテキスト、int resId)APIレベル1で追加
このメソッドはAPIレベル23で廃止されました。代わりにsetTextAppearance(int)を使用してください。

私の質問:なぜ廃止されたのですか? Contextがもう必要ないのはなぜですか?そして最も重要なのは、古いバージョンでsetTextAppearance(int resId)を使用する方法ですか?

43

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 <23のビュー(view.getContext())からコンテキストを取得します。

TextViewCompatのソース

TextView(API23)のソース

101
RustamG
  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は、作成中に提供されたコンテキストを使用します。それは理にかなっています。

[〜#〜] update [〜#〜]

この機能は、サポートライブラリの一部として追加されます。したがって、TextViewの代わりに、TextViewCompat[documentation] を使用します。 ImageViewCompatのように、これと共に導入された他のクラスもあります。

48
Henry