5

をとしてContext.getTheme()使用すると、通常はうまく機能しません。ApplicationContext

MyApplication.singletonInstance().getTheme().resolveAttribute(R.attr.actionBarDeleteIcon, typedValue, true);
// typedValue.resourceId will be 0x0, which is invalid

ただし、Activityコンテキストとして使用すると、うまく機能します

MyFragment.this.getActivity().getTheme().resolveAttribute(R.attr.actionBarDeleteIcon, typedValue, true);
// typedValue.resourceId is valid

なぜ属性を解決できないのだろうと思っていましたApplicationか?

マニフェストでは、特定のテーマ情報がApplicationレベルで見つかります。したがって、Applicationオブジェクトからテーマを取得することは理にかなっていると思いました。

<application
    android:theme="..."
4

1 に答える 1

5

CommonsWare によるこの回答に記載されているように、によって返されるオブジェクトgetApplicationContext()が完全なオブジェクトではないContextため、機能しません。

それは完全Contextではなく、すべてをサポートしてActivityいます。これでやろうとするさまざまなことはContext、主に GUI に関連して失敗します。

Context考えられる解決策の 1 つは、次のようにテーマを手動で設定することです。

getApplicationContext().getTheme().applyStyle(R.style.MyTheme, true);

ただし、この方法は Android 開発チームによって推奨されていません。正しい解決策はActivity、UI に関連するものに使用することgetTheme()です。

于 2013-11-22T19:14:40.610 に答える