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?

tyczj
sumber

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>
Nadir Belhaj
sumber
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>
Tn. Insinyur13
sumber
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>
Volodymyr Kulyk
sumber
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.

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

Nasz Njoka Sr.
sumber
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>
Thirumalvalavan
sumber
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.

Prabhakaran
sumber
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.

S HemaNandhini
sumber
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>
Asim Roy
sumber
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

Kailash Dabhi
sumber
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.

Harry .Naeem
sumber
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
cinta hidup
sumber
4

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

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

Anirban
sumber
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>
Syed Hamza Hassan
sumber
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));

    }
yash sachdeva
sumber
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>
John Joe
sumber
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!

Gaurav Bhagat
sumber
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
Chinecherem Tina
sumber
-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>

`

Muhammad Ali
sumber
-2

Saya menyelesaikannya dengan menghapus baris ini:

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

dari properti aktivitas di Manifest file

Flowra
sumber
-2

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

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

Ny. Ibrahim
sumber