Aktivitas ini sudah memiliki panel tindakan yang disediakan oleh dekorasi jendela


497

Mencoba memindahkan barang-barang saya untuk digunakan Toolbarsebagai ganti bilah tindakan, tetapi saya terus mendapatkan pesan kesalahan

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)

jadi saya menambahkan gaya saya agar aktivitas saya tidak memiliki actionbar

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

dan tema ini berlaku untuk kegiatan di manifes saya

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

MainActivity memperluas GooglePlayServiceActivity jadi saya juga mengatur tema di sana

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

tapi saya masih mendapatkan kesalahan. Saya juga tidak meminta fitur jendela di mana pun. ada ide mengapa saya masih mendapatkan ini?

Jawaban:


836

Saya pikir Anda sedang mengembangkan untuk Android Lollipop, tetapi tetap sertakan baris ini:

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

ke deklarasi tema Anda di dalam app/src/main/res/values/styles.xml.

Juga, jika Anda menggunakan AppCompatActivityperpustakaan dukungan versi 22.1 atau lebih tinggi, tambahkan baris ini:

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

Deklarasi tema Anda mungkin terlihat seperti ini setelah semua tambahan ini:

<!-- 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
adalah windowActionBartidak sama dengan android:windowActionBar?
tyczj

65
Memang, tetapi hal-hal AppCompat melihat atribut namespace aplikasi bukan yang android. Ini memungkinkan untuk menentukan atribut bahkan di platform yang awalnya tidak memilikinya. Begitulah memungkinkan untuk mendukung hal-hal seperti colorPrimary.
Yarian

5
Ketika saya menambahkan baris itu dalam gaya saya, aplikasi crash :(
rkmax

9
Juga tambahkan <item name = "windowNoTitle"> true </item> Jika Anda menggunakan AppCompatActivity setelah 22.1 pustaka dukungan stackoverflow.com/a/29853299/1402525
Nick

4
Jangan lupa untuk menambahkan: android: theme = "@ style / AppTheme" ke tag aplikasi dalam file manifes.
live-love

202

Cara mudah lainnya adalah menjadikan tema Anda seperti anak kecil Theme.AppCompat.Light.NoActionBar:

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

Saya mencoba metode ini juga, tetapi saya masih mendapatkan kesalahan. Namun itu bisa saja sebelum saya mengatur tema untuk saya GooglePlayServiceActivity, saya tidak ingat
tyczj

1
Ya, inilah yang saya gunakan. Pastikan bahwa aktivitas tersebut menggunakan tema ini di manifes
MrEngineer13

6
Saya menemukan solusi ini lebih elegan daripada @Nadir Belhaj, meskipun keduanya benar.
voghDev

Saya pikir ini adalah jawaban yang lebih baik, menggunakan atribut inline XML (windowActionBar = false) tidak berfungsi - saya mendapat kesalahan yang sama dengan @tyczj
Booger

Dalam hal ini Anda tidak dapat menggunakan Theme.AppCompat.Light.DarkActionBar yang sebenarnya adalah induk yang berguna.
f470071

125

Tambahkan satu baris android:theme="@style/AppTheme.NoActionBar"ke activitydalam AndroidManifestdan Anda selesai.


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

Untuk menggunakan Bilah Alat sebagai Bilah Tindakan, pertama-tama nonaktifkan Bilah Tindakan yang disediakan dekorasi.

Cara termudah adalah memperluas tema Anda

Theme.AppCompat.NoActionBar

(atau varian cahayanya).

Kedua, buat instance Toolbar, biasanya melalui layout XML Anda:

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

Kemudian di Aktivitas atau Fragmen Anda, atur Bilah Alat untuk bertindak sebagai Bilah Tindakan Anda:

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

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

Kode ini bekerja untuk saya.


1
Terima kasih! Saya lupa menambahkan <android.support.v7.widget.Toolbarke XML.
CoolMind

1
Saya tidak tahu mengapa warna bilah alat saya kosong. Sepertinya tidak tahu cara mengubahnya menjadi hijau. Saya merasa konyol karena yang harus saya lakukan adalah meletakkan android: background = "" di dalam <android.support.v7.widget.Toolbar /> di file tata letak dan itu berhasil! . Terima kasih
Andrew Irwin

22

Jika Anda ingin menggabungkan beberapa aktivitas dengan actionbar dan yang lainnya tidak, Anda harus menggunakan tema dasar yang mengaktifkan actionbar dan kemudian membuat sub tema yang akan Anda gunakan pada aktivitas yang tidak memerlukan actionbar.

Misalnya Anda dapat menggunakan sub gaya seperti ini

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

Sementara tema dasar meluas katakan

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

dan kemudian gunakan tema non actionbar di File AndroidManifest dalam tag aktivitas katakan

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

Anda harus menerapkan ini pada setiap aktivitas individual yang tidak memerlukan bilah tindakan jadi jika proyek Anda membutuhkan lebih sedikit aktivitas bilah tindakan daripada yang tidak, maka lebih baik untuk menerapkan ini pada tingkat tema dasar


12

Saya juga menghadapi masalah yang sama. Tapi saya menggunakan:

getSupportActionBar().hide();

sebelum

setContentView(R.layout.activity_main);

Sekarang sudah berfungsi.

Dan kita dapat mencoba opsi lain di Style.xml ,

<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

Tambahkan ini di nilai / styles.xml Anda

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

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

</style>

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

</style>

Dan tambahkan kode berikut di values-v11 / styles.xml Anda dan values-v14 / styles.xml

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

</style>

Itu dia. Itu akan berhasil.


6

Anda perlu berubah

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

garis-garis ini dalam manifes. Ini akan bekerja dengan baik untuk saya.


5

Buka 'style.xml' proyek Anda dan buat windowActionBar menjadi false

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

13
Bagaimana Anda membantu orang lain ketika jawaban Anda salah dalam menjawab pertanyaan saya
tyczj

Alih-alih menggunakan "Theme.AppCompat.Light", gunakan "Theme.AppCompat.Light.NoActionBar"
Christina

4

Tambahkan dua baris ini di tema aplikasi Anda yang terletak di style.xml: -

 <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

Toolbar saya sudah ditambahkan di xml saya. Kemudian dalam aktivitas saya, saya menambahkan pernyataan ini:

setSupportActionBar(toolbar);

Menghapus ini berhasil untuk saya. Saya harap ini membantu seseorang.


Bagaimana jika saya tidak ingin menghapusnya? Itu ada hal-hal yang menggunakan toolbar.
Sreekanth Karumanaghat

Saya tidak yakin tentang itu, tetapi saya rasa menghapus ini "setSupportActionBar (toolbar);" toolbar akan tetap di sana.
Harry .Naeem

4

Jika Anda mendapatkan kesalahan pada baris ini:

setSupportActionBar(...);

Anda perlu memeriksa apakah aktivitas Anda merujuk ke tema yang berisi bilah alat. AppTheme aplikasi Anda mungkin sudah mengandung bilah alat, seperti

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

dan Anda mencoba menambahkan yang kedua. Jika Anda ingin menggunakan AppTheme aplikasi Anda, Anda perlu menghapus tema dari aktivitas Anda, di file manifest.xml.

Sebagai contoh:

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

4

Gunakan ini di dalam tag aplikasi Anda dalam manifes atau di dalam tag Aktivitas Anda.

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


3

Jika Anda menggunakan AppcompactAktivitas, gunakan tiga baris ini dalam tema Anda.

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

2

Sederhananya, Anda dapat melakukan hal berikut: -

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

Inilah cara saya memecahkan masalah. Tambahkan kode di bawah ini diAndroidMainfest.xml

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

1
sempurna! Terima kasih telah berbagi.
Sandeep Yohans

1

Atau Cukup ubah @ Style / AppTheme

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

Ini bekerja untuk saya!


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

Ada dua solusi sederhana dan cepat

pergi ke res -> values ​​-> styles

ANDA juga dapat menonton video ini untuk kemudahan lainnya. KLIK DI SINI

Solusi 1:

Anda dapat menghapus bilah tindakan dengan mengganti

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

untuk

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

Solusi2:

Cukup tambahkan baris ini

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

Jadi sekarang file gaya Anda terlihat seperti ini

`

<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

Saya menyelesaikannya dengan menghapus baris ini:

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

dari properti aktivitas di Manifest file


-2

Taruh saja parent="Theme.AppCompat.NoActionBar" dalam file style.xml Anda

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.