Androidスキルの-setSupportActionBar(toolbar)の件
20166 ワード
Androidのテーマ(
ここでは、デフォルトのAppトピックが
何が原因ですか.MainActivityインタフェースの起動に失敗しました.理由は
どうしてこんなことになったの?プログラムは表面だけを見ることができなくて、異常に
上記の設定を見て、
ActionBarのテーマを持っていないので、どうやって新しいActionBarを追加してもいいです!もちろん、グローバルにカスタムActionBarを使用する場合は、
theme
)が多くなるにつれて、どのように使うか、どのように使うか、どのように使うか、どのように効果があるかをはっきり覚えて、短い時間で非常に熟練してマスターできるわけではありません.では、テーマの中のActionBar
について、今日はここで出会った衝突記録を作ります.Empty Activity
のAppプロジェクトを作成する場合、デフォルトで生成されるAndroidManifest.xml
の内容は次のとおりです.<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="xxx.xxx.xxx">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
ここでは、デフォルトのAppトピックが
android:theme="@style/AppTheme"
であることに気づくべきです.では、今日の問題が来ました.かつてあるプロジェクトがシステムが持つActionbarが需要に合わないことを嫌っていたことを思い出すと、再定義は避けられず、Actionbarを再定義する際にAPIインタフェースsetSupportActionBar(@Nullable Toolbar toolbar)
を使用したため、異常なクラッシュを引き起こしたE/AndroidRuntime: FATAL EXCEPTION: main
Process: com.itsdf07.app.mvp, PID: 26401
"java.lang.RuntimeException: Unable to start activity ComponentInfo{com.itsdf07.app.mvp/com.itsdf07.app.mvp.main.MainActivity}: 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:3194)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3302)
at android.app.ActivityThread.-wrap12(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1891)
at android.os.Handler.dispatchMessage(Handler.java:108)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7425)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
"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:204)
at android.support.v7.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:129)
at com.itsdf07.app.mvp.main.MainActivity.onCreate(MainActivity.java:26)
at android.app.Activity.performCreate(Activity.java:7372)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3147)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3302)
at android.app.ActivityThread.-wrap12(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1891)
at android.os.Handler.dispatchMessage(Handler.java:108)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7425)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
何が原因ですか.MainActivityインタフェースの起動に失敗しました.理由は
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.
このActivity(つまり起動するMainActivity)はすでにwindow decorによってaction barが提供されており、windowのFEATURE_SUPPORT_ACTION_BARを繰り返し要求する必要はなく、トピックのwindowActionBarプロパティをfalseに設定することで代替することができる.どうしてこんなことになったの?プログラムは表面だけを見ることができなくて、異常に
theme
に言及した以上、私達は更にparentのテーマに原因を位置決めする必要があって、いつも原因を発見することができます <style name="Base.V7.Theme.AppCompat.Light" parent="Platform.AppCompat.Light">
<item name="windowNoTitle">false</item>
"- ">true
"
<item name="windowActionBarOverlay">false</item>
<item name="windowActionModeOverlay">false</item>
<item name="actionBarPopupTheme">@null</item>
......
</style>
上記の設定を見て、
- true
を発見しました.つまり、現在使用されているテーマは実際にActionBarを持っているということです.そうすれば、既存のActionBarに基づいてActionBarを追加し、
を追加し、原因を突き止める問題を並べることができます.それは問題ではありません.次のトピックでは、この競合を解決できます. <style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
ActionBarのテーマを持っていないので、どうやって新しいActionBarを追加してもいいです!もちろん、グローバルにカスタムActionBarを使用する場合は、
AndroidManifest.xml
のapplication
の下にあるtheme
をそのまま無ActionBarに設定すればよい.