2016-10-11 19 views
1

マイライブラリプロジェクトのアクティビティにツールバーを追加しています。マイライブラリAndroidManifestで、私はこのテーマ使用しています -ライブラリモジュールにツールバーを追加する

<style name="NoobAppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
     <!-- Customize your theme here. --> 
     <item name="colorPrimary">@color/colorPrimary</item> 
     <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
     <item name="colorAccent">@color/colorAccent</item> 
     <item name="toolbarStyle">@style/Widget.AppCompat.Toolbar</item> 
</style> 

をしかし、それが原因AppThemeの紛争にマニフェスト合併でいくつかの問題を与えていたことから、私はこれに私のアプリモジュールのAndroidManifestを変え追加 -

<application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme" 
     tools:replace="android:theme"> <!-- This line solves the merger issue --> 

アクティビティ用のライブラリテーマが親テーマとしてまだTheme.AppCompat.Light.DarkActionBarを使用しているアプリケーションモジュールに置き換えられているので、デフォルトのActionBarはまだそこにあります。また、ツールバーをライブラリアクティビティのActionBarとして設定しようとすると次の行を使用してください -

私は例外には影響を与えません

this.requestWindowFeature(Window.FEATURE_NO_TITLE); 

呼び出して試してみました

--------- beginning of crash 
10-12 02:54:32.171 28558-28558/noob.com.noobfilechooser E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: noob.com.noobfilechooser, PID: 28558 
                      java.lang.RuntimeException: Unable to start activity ComponentInfo{noob.com.noobfilechooser/com.noob.noobfilechooser.NoobFileActivity}: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead. 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2434) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494) 
                       at android.app.ActivityThread.access$900(ActivityThread.java:153) 
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1347) 
                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                       at android.os.Looper.loop(Looper.java:148) 
                       at android.app.ActivityThread.main(ActivityThread.java:5451) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                      Caused by: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead. 
                       at android.support.v7.app.AppCompatDelegateImplV9.setSupportActionBar(AppCompatDelegateImplV9.java:199) 
                       at android.support.v7.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:130) 
                       at com.noob.noobfilechooser.NoobFileActivity.onCreate(NoobFileActivity.java:60) 
                       at android.app.Activity.performCreate(Activity.java:6323) 
                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)  
                       at android.app.ActivityThread.access$900(ActivityThread.java:153)  
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1347)  
                       at android.os.Handler.dispatchMessage(Handler.java:102)  
                       at android.os.Looper.loop(Looper.java:148)  
                       at android.app.ActivityThread.main(ActivityThread.java:5451)  
                       at java.lang.reflect.Method.invoke(Native Method)  
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  

から

setSupportActionBar(mToolbar); 

私は次の例外を取得しています。ライブラリアクティビティでツールバーを使用するためにできることはありますか?

+0

ログから この活動は、すでにウィンドウの装飾によって提供されるアクションバーがあります。あなたのテーマでは、Window.FEATURE_SUPPORT_ACTION_BARを要求せず、代わりにツールバーを使用するようにwindowActionBarをfalseに設定してください。 – zombie

+0

@zombieログを読むことができます。私は自分のアプリケーションモジュールでテーマを変更することができますが、自分のアプリのツールバーを使用するかどうかを私のライブラリのユーザーが決定できるようにしたいと思います。 – noob

+0

このヘルプはあります http://stackoverflow.com/a/26515159/6689101 – zombie

答えて

1

OK、それは本当に愚かでした。ライブラリマニフェストのアプリケーション要素にテーマを設定していましたが、代わりにアクティビティに設定する必要がありました。

正しい方法

<application 
     android:allowBackup="true" 
     android:label="@string/app_name" 
     android:supportsRtl="true"> 
     <activity android:theme="@style/NoobAppTheme" 
      android:name=".NoobFileActivity"> 
     </activity> 
</application> 

間違った方法

<application 
     android:allowBackup="true" 
     android:label="@string/app_name" 
     android:theme="@style/NoobAppTheme" 
     android:supportsRtl="true"> 
     <activity android:name=".NoobFileActivity"> 
     </activity> 
</application> 
関連する問題