У цій активності вже є панель дій, що надається декором вікна


497

Намагаюся переміститись над своїми речами, щоб використовувати Toolbarзамість панелі дій, але я все одно отримую помилку

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)

тож я додав у своєму стилі для своєї діяльності, щоб не було панелі дій

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

і тема стосується діяльності в моєму маніфесті

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

MainActivity розширює GooglePlayServiceActivity, тому я теж задаю тему

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

але я все одно отримую помилку. Я також ніде не запитую функцію вікна. якісь ідеї, чому я все-таки отримую це?

Відповіді:


835

Я думаю, ви розробляєте для Android Lollipop, але все одно включіть цю лінію:

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

до вашої декларації теми всередині вашого app/src/main/res/values/styles.xml.

Крім того, якщо ви використовуєте AppCompatActivityбібліотеку підтримки версії 22.1 або новішої, додайте цей рядок:

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

Ваша декларація теми може виглядати приблизно так після всіх цих доповнень:

<!-- 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
це windowActionBarне те саме, що android:windowActionBar?
tyczj

65
Так, але речі AppCompat дивляться на атрибут простору імен додатків, а не на андроїд. Це дає змогу вказати атрибут навіть на платформах, які його спочатку не мали. Це дозволяє підтримувати репортаж таких речей, як colorPrimary.
ярян

4
Коли я додав цей рядок у своїх стилях, програма
вибилася з ладу

9
Крім того, додати <пункт ім'я = "windowNoTitle»> True </ елемент> Якщо ви використовуєте AppCompatActivity після підтримки 22,1 бібліотеки stackoverflow.com/a/29853299/1402525
Нік

4
Не забудьте додати: android: theme = "@ style / AppTheme" до тегу програми у файл маніфесту.
live-love

202

Ще один простий спосіб - зробити так, щоб ваша тема була такою, як дитина Theme.AppCompat.Light.NoActionBar:

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

Я також спробував цей метод, але я все-таки отримав помилку. Однак це могло бути, перш ніж я встановив свою тему GooglePlayServiceActivity, я не пам’ятаю
tyczj

1
Так, це я використовував. Просто переконайтеся, що ця активність використовує цю тему в маніфесті
MrEngineer13

6
Я вважаю це рішення більш елегантним, ніж рішення @Nadir Belhaj, хоча вони обидва є правильними.
voghDev

Я думаю, що це краща відповідь: використання вбудованого атрибута XML (windowActionBar = false) не спрацював - я отримав таку ж помилку, що і @tyczj
Booger

У такому випадку ви не можете використовувати Theme.AppCompat.Light.DarkActionBar, який насправді є корисним батьком.
f470071

125

Додати один рядок , android:theme="@style/AppTheme.NoActionBar"щоб activityв AndroidManifestі ви зробили.


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

Щоб використовувати панель інструментів як панель дій, спочатку вимкніть панель дій, що надається декором.

Найпростіший спосіб - це поширити свою тему

Тема.AppCompat.NoActionBar

(або його легкий варіант).

По-друге, створіть екземпляр Панелі інструментів, як правило, через ваш 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” />

Потім у розділі "Діяльність" або "Фрагмент" встановіть Панель інструментів як "Дія":

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

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

Цей код працював на мене.


1
Дякую! Я забув додати <android.support.v7.widget.Toolbarдо XML.
CoolMind

1
Я не міг зрозуміти, чому колір моєї панелі інструментів був просто порожнім. Не можу зрозуміти, як змінити його на зелений. Мені здається дурним, як все, що мені довелося зробити, було поставити android: background = "" в <android.support.v7.widget.Toolbar /> у файл макета, і це вдалося! . Спасибі
Ендрю Ірвін

22

Якщо ви хочете поєднати деякі дії з панеллю дій, а інші - ні, вам слід використовувати базову тему, щоб увімкнено панель дій, а потім створити підтему, яку ви будете використовувати для дій, які не потребують панелі дій

Наприклад, ви можете використовувати такий під стиль

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

Поки базова тема розширюється, скажімо

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

а потім скористайтеся темою панелі дій, що не використовується у файлі AndroidManifest у тезі активності

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

Ви повинні застосувати це до кожної окремої діяльності, яка не потребує панелі дій, тому якщо ваш проект вимагає меншої кількості дій в рядку дій, ніж не, то краще застосувати це на рівні базової теми


12

Я також зіткнувся з тією ж проблемою. Але я використав:

getSupportActionBar().hide();

раніше

setContentView(R.layout.activity_main);

Зараз це працює.

І ми можемо спробувати інший варіант у 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

Додайте це до своїх значень / styles.xml

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

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

</style>

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

</style>

І додайте наступний код у ваші значення-v11 / styles.xml та values-v14 / styles.xml

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

</style>

Це воно. Це спрацює.


6

Вам потрібно змінити

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

ці рядки в маніфесті. Мені це ідеально підійде.


5

Перейдіть до ‘style.xml’ свого проекту та перетворіть вікно ActionAar на false

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

13
Як ти допомагаєш іншим, коли твоя відповідь не відповідає правилам на моє запитання
tyczj

Замість використання "Theme.AppCompat.Light" використовуйте "Theme.AppCompat.Light.NoActionBar"
Крістіна

4

Додайте цей два рядки в тему програми, розташовану у 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

У мою xml було додано панель інструментів. Потім у своїй діяльності я додав це твердження:

setSupportActionBar(toolbar);

Видалення цього спрацювало для мене. Я сподіваюся, що це комусь допоможе.


Що робити, якщо я не хочу його видаляти? Тобто є речі, які використовують панель інструментів.
Sreekanth Karumanaghat

Я не впевнений у цьому, але я думаю, видаливши цей "setSupportActionBar (панель інструментів);" панель інструментів залишиться там.
Гаррі .Наєм

4

Якщо ви отримаєте помилку в цьому рядку:

setSupportActionBar(...);

Вам потрібно перевірити, чи стосується ваша діяльність тема, яка містить панель інструментів. AppTheme вашої програми вже може містити панель інструментів, наприклад

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

і ви намагаєтесь додати друге. Якщо ви хочете використовувати AppTheme програми, вам потрібно видалити тему зі своєї діяльності у файлі manifest.xml.

Наприклад:

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

4

Використовуйте це всередині тегу додатка в маніфесті або всередині тегу "Активність".

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


3

Якщо ви використовуєте Appcompactактивність, використовуйте ці три рядки у своїй темі.

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

2

Простіше кажучи, ви можете зробити наступне:

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

Ось як я вирішив проблему. Додайте код нижче у свійAndroidMainfest.xml

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

1
ідеально! Дякую, що поділились.
Sandeep Yohans

1

Або просто змініть @ Style / AppTheme

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

Це працює для мене!


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

Є два простих і швидких рішення

перейдіть до res -> значень -> стилів

ВИ також можете переглянути це відео для більшої легкості КЛАЦНУТИ ТУТ

Рішення 1:

Ви можете видалити панель дій, замінивши

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

до

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

Рішення2:

Просто додайте ці рядки

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

Отже, ваш файл стилю виглядає приблизно так

`

<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

Я вирішив це, видаливши цей рядок:

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

від активності властивостей у Manifest file


-2

Просто кажу parent="Theme.AppCompat.NoActionBar" введіть файл style.xml

Подібно до - <style parent="Theme.AppCompat.NoActionBar" name="AppTheme.NoActionBar">

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.