Ich habe versucht, über mein Material zu navigieren, um Toolbar
anstelle der Aktionsleiste zu verwenden, bekomme aber immer wieder eine Fehlermeldung
Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tyczj.weddingalbum/com.xxx.xxx.MainActivity}: Java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2180)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2230)
at Android.app.ActivityThread.access$600(ActivityThread.Java:141)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1234)
at Android.os.Handler.dispatchMessage(Handler.Java:99)
at Android.os.Looper.loop(Looper.Java:137)
at Android.app.ActivityThread.main(ActivityThread.Java:5039)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:511)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:793)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:560)
at dalvik.system.NativeStart.main(Native Method)
Caused by: Java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
at Android.support.v7.app.ActionBarActivityDelegateBase.setSupportActionBar(ActionBarActivityDelegateBase.Java:165)
at Android.support.v7.app.ActionBarActivity.setSupportActionBar(ActionBarActivity.Java:92)
at com.xxx.xxx.MainActivity.onCreate(MainActivity.Java:113)
at Android.app.Activity.performCreate(Activity.Java:5104)
at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1080)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2144)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2230)
at Android.app.ActivityThread.access$600(ActivityThread.Java:141)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1234)
at Android.os.Handler.dispatchMessage(Handler.Java:99)
at Android.os.Looper.loop(Looper.Java:137)
at Android.app.ActivityThread.main(ActivityThread.Java:5039)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:511)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:793)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:560)
at dalvik.system.NativeStart.main(Native Method)
also habe ich in meinem Stil hinzugefügt, dass meine Aktivität keine Aktionsleiste hat
<style name="AppCompatTheme" parent="@style/Theme.AppCompat.Light">
<item name="Android:windowActionBar">false</item>
</style>
und das Thema bezieht sich auf Aktivitäten in meinem Manifest
<activity
Android:name=".MainActivity"
Android:windowSoftInputMode="adjustResize|stateHidden"
Android:theme="@style/AppCompatTheme" Android:screenOrientation="portrait"/>
MainActivity erweitert GooglePlayServiceActivity, sodass ich dort auch das Thema einstelle
<activity
Android:name=".GooglePlayServicesActivity"
Android:label="@string/title_activity_google_play_services"
Android:theme="@style/AppCompatTheme">
aber ich bekomme immer noch den fehler. Ich fordere auch nirgendwo eine Fensterfunktion an. irgendwelche ideen warum ich das noch bekomme?
Ich denke, du entwickelst für Android Lollipop, aber füge trotzdem diese Zeile hinzu:
<item name="windowActionBar">false</item>
zu Ihrer Themendeklaration in Ihrem app/src/main/res/values/styles.xml
.
Wenn Sie die Unterstützungsbibliothek AppCompatActivity
der Version 22.1 oder höher verwenden, fügen Sie außerdem folgende Zeile hinzu:
<item name="windowNoTitle">true</item>
Ihre Theme-Deklaration könnte nach all diesen Ergänzungen so aussehen:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
Eine andere einfache Möglichkeit besteht darin, Ihr Thema zu einem Kind von Theme.AppCompat.Light.NoActionBar
zu machen:
<style name="NoActionBarTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
</style>
Fügen Sie eine einzelne Zeile Android:theme="@style/AppTheme.NoActionBar"
zu activity
in AndroidManifest
hinzu, und fertig.
AndroidManifest.xml:
<activity Android:name=".activity.YourActivity"
Android:theme="@style/AppTheme.NoActionBar"><!-- ADD THIS LINE -->
styles.xml
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
Um die Symbolleiste als Aktionsleiste zu verwenden, deaktivieren Sie zunächst die vom Dekor bereitgestellte Aktionsleiste.
Am einfachsten ist es, Ihr Thema zu erweitern
Theme.AppCompat.NoActionBar
(oder seine leichte Variante).
Zweitens erstellen Sie eine Toolbar-Instanz, normalerweise über Ihr Layout-XML:
<Android.support.v7.widget.Toolbar
Android:id=”@+id/my_awesome_toolbar”
Android:layout_height=”wrap_content”
Android:layout_width=”match_parent”
Android:minHeight=”?attr/actionBarSize”
Android:background=”?attr/colorPrimary” />
Stellen Sie dann in Ihrer Aktivität oder Ihrem Fragment die Symbolleiste so ein, dass sie als Aktionsleiste fungiert:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.blah);
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);
}
Dieser Code hat bei mir funktioniert.
Wenn Sie einige Aktivitäten mit der Aktionsleiste kombinieren möchten und andere nicht, sollten Sie das Basisthema verwenden, bei dem die Aktionsleiste aktiviert ist, und dann ein Unterthema erstellen, das Sie für Aktivitäten verwenden möchten, für die keine Aktionsleiste erforderlich ist
Zum Beispiel können Sie einen Sub-Style wie diesen verwenden
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
Während das Basisthema erweitert sagen
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
und verwenden Sie dann das Nicht-Actionbar-Thema in der AndroidManifest-Datei im Aktivitäts-Tag say
<activity
Android:name="com.example.NonActionBarActivity"
Android:theme="@style/AppTheme.NoActionBar"
Sie müssen dies auf jede einzelne Aktivität anwenden, die keine Aktionsleiste benötigt. Wenn Ihr Projekt also weniger Aktionen in der Aktionsleiste erfordert als nicht, ist es besser, dies auf der Ebene des Basisthemas anzuwenden.
Ich hatte auch das gleiche Problem. Aber ich habe benutzt:
getSupportActionBar().hide();
vor
setContentView(R.layout.activity_main);
Jetzt funktioniert es.
Und wir können eine andere Option in Style.xml versuchen,
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
Fügen Sie dies in Ihrer Datei values / styles.xml hinzu
<style name="YourCustomTheme" parent="Theme.AppCompat.Light.NoActionBar">
</style>
<style name="AppBaseTheme" parent="YourCustomTheme">
</style>
<style name="AppTheme" parent="AppBaseTheme">
</style>
Fügen Sie den folgenden Code in die Dateien values-v11/styles.xml und values-v14/styles.xml ein
<style name="AppBaseTheme" parent="YourCustomTheme">
</style>
Das ist es. Es wird klappen.
Du musst dich ändern
<activity
Android:name=".YOUR ACTIVITY"
Android:theme="@style/AppTheme.NoActionBar" />
</application>`
diese Zeilen im Manifest. Es wird perfekt für mich funktionieren.
Wechseln Sie in die 'style.xml' Ihres Projekts und setzen Sie windowActionBar auf false
<style name="AppCompatTheme" parent="@style/Theme.AppCompat.Light">
<item name="Android:windowActionBar">false</item>
</style>
Ich hatte Symbolleiste in meiner XML hinzugefügt. Dann habe ich in meiner Aktivität diese Anweisung hinzugefügt:
setSupportActionBar(toolbar);
Das Entfernen hat bei mir funktioniert. Ich hoffe es hilft jemandem.
Fügen Sie diese zwei Zeilen in Ihr App-Design in style.xml ein: -
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
//Add this two line will fix your problem
<item name="windowNoTitle">true</item> <--1(this applies after 22.0.1 support library i think
<item name="windowActionBar">true</item> <--2
Wenn Sie den Fehler in dieser Zeile erhalten:
setSupportActionBar(...);
Sie müssen überprüfen, ob sich Ihre Aktivität auf ein Thema bezieht, das eine Symbolleiste enthält. Das AppTheme Ihrer Anwendung enthält möglicherweise bereits eine Symbolleiste, z
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
und Sie versuchen, eine zweite hinzuzufügen. Wenn Sie das AppTheme Ihrer Anwendung verwenden möchten, müssen Sie das Thema aus Ihrer Aktivität in der Datei manifest.xml entfernen.
Zum Beispiel:
<activity
Android:name=".ui.activities.SettingsActivity"
Android:theme="@style/AppTheme1" /> --> remove this theme
Wenn Sie die Aktivität Appcompact
verwenden, verwenden Sie diese drei Zeilen in Ihrem Thema.
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="Android:windowActionBarOverlay">false</item>
Einfach ausgedrückt, können Sie Folgendes tun:
if (Android.os.Build.VERSION.SDK_INT >= 21) {
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(getResources().getColor(R.color.colorPrimaryDark));
}
So habe ich das Problem gelöst. Füge folgenden Code in deinen AndroidMainfest.xml
ein
<activity Android:name=".YourClass"
Android:theme="@style/Theme.AppCompat.Light.NoActionBar">
</activity>
Verwenden Sie dies in Ihrem Anwendungs-Tag im Manifest oder in Ihrem Aktivitäts-Tag.
Android: theme = "@ style/AppTheme.NoActionBar"