2017-07-27 8 views
0

設定可能なテーマを持つアプリでは、全体のテーマに一致するようにapp:popupThemeを設定するにはどうすればよいですか?アプリの全体テーマに基づいて `app:popupTheme`を変更するには?

Android Studioのウィザードを使用してナビゲーションドロワー付きのアプリを作成しました。次に、このコードを変更して、実行時に暗いテーマと軽いテーマを選択するためのチェックボックスを追加し、アクティビティに対してsetThemeを呼び出しました。完全なコードはthis github repoにあります。 app/src/main/res/values/styles.xml

、Androidのメーカーは、次のように生成された:

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"/> 

このスタイルは、app/src/main/res/layout/app_bar_main.xmlで使用されるも、Androidのメーカーによって生成されます

<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    app:popupTheme="@style/AppTheme.PopupOverlay"/> 

app:popupTheme属性が "で使用されるスタイルを決定」と表示されます。ライトテーマを使用しているときには正しく表示されますが、実行時に暗いテーマに切り替えると、メニューの色が間違っています。

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Dark"/> 

はそれが暗いテーマに動作させるために、しかし、光テーマがアクティブである場合、メニューは間違っになります。私はこのように、AppTheme.PopupOverlayの親を変更することができます知っています。

暗いか明るいかにかかわらず、メニューの色付けをアプリケーションの全体的なテーマに動的に適応させる正しい方法は何ですか? app:popupThemeは動的に変更する必要がありますか? AppTheme.PopupOverlayの親は動的に変更する必要がありますか?他に何か?

答えて

1

これは、カスタムattrを使用することによって達成することができます。AppTheme.PopupOverlayに暗い同等を作成し、app/src/main/res/values/styles.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<attr name="popupOverlayStyle" format="reference"/> 
</resources> 
    1. は、カスタムattrapp/src/main/res/values/attrs.xmlを作成

      <style name="AppTheme.PopupOverlay.Dark" 
          parent="ThemeOverlay.AppCompat.Dark"/> 
      
    2. 各テーマで
    3. 0は、適切なポップアップスタイルにattrにカスタム設定項目を追加:app/src/main/res/layout/app_bar_main.xml

      <!-- in the light AppTheme --> 
      <item name="popupOverlayStyle">@style/AppTheme.PopupOverlay</item> 
      
      <!-- in the dark AppTheme --> 
      <item name="popupOverlayStyle">@style/AppTheme.PopupOverlay.Dark</item> 
      
    4. は、カスタムattr参照するようにapp:popupThemeを設定します。

      app:popupTheme="?popupOverlayStyle" 
      

    変更をアプリのテーマは自動的にどのスタイルが参照するかを調整します。

  • 関連する問題