Bu Faaliyetin zaten pencere dekoru tarafından sağlanan bir işlem çubuğu var


497

Toolbarİşlem çubuğu yerine kullanmak için öğelerimin üzerinde gezmeye çalışıyorum ama hata mesajı alıyorum

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)

bu yüzden aktivitemin eylem çubuğu olmaması için tarzımı ekledim

<style name="AppCompatTheme" parent="@style/Theme.AppCompat.Light">
        <item name="android:windowActionBar">false</item>
</style>

ve tema bildirimimdeki aktiviteler için de geçerli

<activity
        android:name=".MainActivity"
        android:windowSoftInputMode="adjustResize|stateHidden"
        android:theme="@style/AppCompatTheme" android:screenOrientation="portrait"/>

MainActivity GooglePlayServiceActivity'yi genişletiyor, bu yüzden temayı da orada ayarladım

<activity
       android:name=".GooglePlayServicesActivity"
       android:label="@string/title_activity_google_play_services"
       android:theme="@style/AppCompatTheme">

ama yine de hatayı alıyorum. Ayrıca hiçbir yerde pencere özelliği istemiyorum. bunu neden hala aldığım hakkında bir fikrin var mı?

Yanıtlar:


836

Android Lollipop için geliştirdiğinizi düşünüyorum, ancak yine de bu satırı ekleyin:

<item name="windowActionBar">false</item> 

içindeki tema bildiriminize app/src/main/res/values/styles.xml .

Ayrıca, AppCompatActivity22.1 veya daha sonraki bir sürümün destek kitaplığını kullanıyorsanız şu satırı ekleyin:

<item name="windowNoTitle">true</item>

Tüm bu eklemelerden sonra tema beyanınız şöyle görünebilir:

<!-- 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>

18
ile windowActionBaraynı değil android:windowActionBarmi?
tyczj

65
Öyle, ama AppCompat şeyler android değil uygulama ad alanı özniteliğine bakar. Bu, niteliği başlangıçta bulunmayan platformlarda bile belirtmeyi mümkün kılar. ColorPrimary gibi şeylerin backportingine bu şekilde izin verir.
yarian

4
Stillerime bu satırı eklediğimde uygulama çöküyor :(
rkmax

9
Ayrıca <item name = "windowNoTitle"> true </item> 22.1 destek uygulamasından sonra AppCompatActivity kullanıyorsanız, stackoverflow.com/a/29853299/1402525
Nick

4
Manifest dosyasındaki uygulama etiketine: android: theme = "@ style / AppTheme" eklemeyi unutmayın.
canlı aşk

202

Başka bir kolay yol, temanızı böyle bir çocuk haline getirmektir Theme.AppCompat.Light.NoActionBar:

<style name="NoActionBarTheme" parent="Theme.AppCompat.Light.NoActionBar">
     ...
</style>

Ben de bu yöntemi denedim ama yine de hata var. Ancak bu temayı benim için ayarlamadan önce olabilir, GooglePlayServiceActivityhatırlamıyorum
tyczj

1
Evet, bunu kullanıyorum. Sadece etkinliğin manifestte bu temayı kullandığından emin olun
MrEngineer13

6
Bu çözümü @Nadir Belhaj'ınkinden daha zarif buluyorum, ancak ikisi de doğru.
voghDev

Bence bu daha iyi cevap, satır içi XML özniteliği (windowActionBar = false) kullanarak işe yaramadı - @tyczj
Booger ile

Bu durumda, aslında kullanışlı bir ebeveyn olan Theme.AppCompat.Light.DarkActionBar öğesini kullanamazsınız.
f470071

125

Tek satır ekleyin android:theme="@style/AppTheme.NoActionBar"için activityde AndroidManifestve yaptığın.


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>

52

Araç Çubuğunu İşlem Çubuğu olarak kullanmak için önce dekor tarafından sağlanan İşlem Çubuğunu devre dışı bırakın.

En kolay yol, temanızın

Theme.AppCompat.NoActionBar

(veya hafif varyantı).

İkinci olarak, genellikle düzen XML'iniz aracılığıyla bir Araç Çubuğu örneği oluşturun:

<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” />

Ardından Etkinlik veya Parçanızda Araç Çubuğunu İşlem Çubuğunuz olarak davranacak şekilde ayarlayın:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.blah);

    Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
    setSupportActionBar(toolbar);
}

Bu kod benim için çalıştı.


1
Teşekkürler! <android.support.v7.widget.ToolbarXML'e eklemeyi unuttum .
CoolMind

1
Araç çubuğu rengimin neden sadece boş olduğunu anlayamadım. Yeşil olarak nasıl değiştirileceğini anlayamadım. Yapmam gereken tek şey, android: background = "" düzen dosyasında <android.support.v7.widget.Toolbar /> içine koymak oldu ve bunu başardı! . Teşekkürler
Andrew Irwin

22

Bazı etkinlikleri eylem çubuğu ile birleştirmek istemezseniz, temel temayı eylem çubuğu etkinleştirilmiş olarak kullanmalı ve ardından eylem çubuğu gerektirmeyen etkinliklerde kullanacağınız bir alt tema oluşturmalısınız

Örneğin, böyle bir alt stil kullanabilirsiniz

             <style name="AppTheme.NoActionBar">
               <item name="windowActionBar">false</item>
               <item name="windowNoTitle">true</item>
            </style>

Temel tema genişlerken

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

ve ardından AndroidManifest Dosyasındaki actionbar temasını kullanın.

   <activity
        android:name="com.example.NonActionBarActivity"
        android:theme="@style/AppTheme.NoActionBar"

bunu eylem çubuğuna ihtiyaç duymayan her bir etkinliğe uygulamanız gerekir, bu nedenle projenizde olmayandan daha az eylem çubuğu etkinliği gerekiyorsa, bunu temel tema düzeyinde uygulamak daha iyidir


12

Aynı problemle de karşılaştım. Ama kullandım:

getSupportActionBar().hide();

önce

setContentView(R.layout.activity_main);

Şimdi çalışıyor.

Ve Style.xml'de başka bir seçenek deneyebiliriz ,

<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>

8

Bunu değerlerinize / styles.xml dosyasına ekleyin

<style name="YourCustomTheme" parent="Theme.AppCompat.Light.NoActionBar">
</style>

<style name="AppBaseTheme" parent="YourCustomTheme">

</style>

<style name="AppTheme" parent="AppBaseTheme">

</style>

Ve aşağıdaki kodu v11 / styles.xml ve değerleri-v14 / styles.xml değerlerinize ekleyin

<style name="AppBaseTheme" parent="YourCustomTheme">

</style>

Bu kadar. Çalışacak.


6

Değiştirmen gerek

  <activity
        android:name=".YOUR ACTIVITY"
        android:theme="@style/AppTheme.NoActionBar" />
</application>`

benim için mükemmel bir şekilde çalışacak.


5

Projenizin 'style.xml' dosyasına gidin ve windowActionBar öğesini false olarak ayarlayın

<style name="AppCompatTheme" parent="@style/Theme.AppCompat.Light">
        <item name="android:windowActionBar">false</item>
</style>

13
Soruma ilişkin düzenlemelerde cevabınız doğru olmadığında başkalarına nasıl yardımcı oluyorsunuz
tyczj

"Theme.AppCompat.Light" kullanmak yerine "Theme.AppCompat.Light.NoActionBar" kullanın
Christina

4

Bu iki satırı style.xml dosyasında bulunan uygulama temanıza ekleyin: -

 <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


4

Benim xml araç çubuğu ekledim. Sonra benim aktivitede bu ifadeyi ekliyordu:

setSupportActionBar(toolbar);

Bunu kaldırmak benim için çalıştı. Umarım birine yardımcı olur.


Ya kaldırmak istemezsem? Araç çubuğunu kullanan şeyler var.
Sreekanth Karumanaghat

Bu konuda emin değilim, ama bu "setSupportActionBar (araç çubuğu);" araç çubuğu orada kalacaktır.
Harry .Naeem

4

Bu satırda hatayı alırsanız:

setSupportActionBar(...);

Etkinliğinizin araç çubuğu içeren bir temayı gösterip göstermediğini kontrol etmeniz gerekir. Uygulamanızın AppTheme öğesi zaten bir araç çubuğu içeriyor olabilir. Örneğin,

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

ve ikincisini eklemeye çalışıyorsunuz. Uygulamanızın AppTheme'ini kullanmak istiyorsanız, temayı manifest.xml dosyasında etkinliğinizden kaldırmanız gerekir.

Örneğin:

<activity
    android:name=".ui.activities.SettingsActivity"
    android:theme="@style/AppTheme1" /> --> remove this theme

4

Bunu manifest'te uygulama etiketinizin içinde veya Etkinlik etiketinizin içinde kullanın.

android: theme = "@ stil / AppTheme.NoActionBar"


3

Eğer kullanıyorsanız AppcompactEtkinliği, tema şu üç satırı kullanın.

<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowActionBarOverlay">false</item>

2

Basitçe söylemek gerekirse, aşağıdakileri yapabilirsiniz: -

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));

    }

2

Sorunu bu şekilde çözdüm. Aşağıdaki koduAndroidMainfest.xml

<activity android:name=".YourClass"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar">
 </activity>

1
mükemmel! Paylaşım için teşekkürler.
Sandeep Yohans

1

Veya @ Style / AppTheme öğesini basitçe değiştirin

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">

Bu benim için çalışıyor!


0
 <style name="AppCompatTheme" parent="@style/Theme.AppCompat.Light">
            <item name="android:windowActionBar">false</item>
    </style>

    Change this to NoActionBar 

        <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
            <!-- Customize your theme here. -->

        </style>

    This one worked for me

-1

İki basit ve hızlı çözüm var

res -> değerler -> stillere git

Ayrıca daha fazla kolaylık için bu videoyu da izleyebilirsiniz. BURAYA TIKLAYIN

Çözüm 1:

Eylem çubuğunu değiştirerek kaldırabilirsiniz

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

için

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

Solution2:

Bu satırları ekleyin

<item name="windowActionBar">false</item> <item name="windowNoTitle">true</item>

Şimdi stil dosyanız böyle görünüyor

'

<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>

'


-2

Bu satırı kaldırarak çözdüm:

android:theme="@style/Theme.MyCompatTheme"

faaliyet özelliklerinden Manifest file


-2

Sadece koy parent="Theme.AppCompat.NoActionBar" style.xml dosyanızı

Sevmek - <style parent="Theme.AppCompat.NoActionBar" name="AppTheme.NoActionBar">

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.