web-dev-qa-db-ja.com

ContextThemeWrapperがサポートライブラリグループに制限されるようになったのはなぜですか?

ContextThemeWrapperを使用して、スタイルを動的にImageButtonに適用し始めました。ベース 回答 私の他の質問への回答、および他への回答 類似質問

_ContextThemeWrapper wrapper = new ContextThemeWrapper(getContext(), mStyleRes);
mImageButton = new AppCompatImageButton(wrapper, null, 0);
_

しかし、最近、次のようなContextThemeWrapperコンストラクターでlintエラーが表示され始めました。

ContextThemeWrapperは、同じライブラリグループ内からのみ呼び出すことができます(groupId = com.Android.support)

クラスが@RestrictTo(LIBRARY_GROUP)注釈でマークされていることに気付きました。これにより、lintエラーが表示されます。しかし、whyに関する情報は見つかりません。これは_com.Android.support_ライブラリグループに制限されています。

私の知る限り、これはスタイル、テーマ、テーマオーバーレイをプログラムでViewに適用する唯一の方法です。デフォルトのスタイル属性をコンストラクターの3番目の引数として設定する以外。だから、なぜその使用がまったく制限されるのだろうと思っています。サポートライブラリの外部でクラスを使用する際に問題がありますか?気付いていない副作用がありますか?


唯一の 類似した質問 私が遭遇したのは、(現在修正されている)バグに関するものです。これにより、このリントエラーがonCreateのサブクラスのAppCompatActivityメソッドに表示されました。この発生はバグではなく、意図的な制限だとは思いません。背後にある理由を知りたいです。

注意する必要があります。 (現在)この制限は、実際にContextThemeWrapperを使用するコードに影響を与えないようです。コンパイルして正常に動作し、期待どおりに動作します。

25
Bryan

_Android.view.ContextThemeWrapper_ != _Android.support.v7.view.ContextThemeWrapper_。

サポートライブラリの1つには、@RestrictTo(LIBRARY_GROUP)アノテーションが付けられています。また、_@hide_もあります。これは、パブリックAPIを意図したものではありません。

最初のものは公開です。

57
ephemient