it-swarm.com.ru

В этом действии уже есть панель действий, предоставляемая декором окна

Попытка переместить мои вещи, чтобы использовать 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">

но я все еще получаю ошибку. Я также нигде не запрашиваю оконную функцию. есть идеи, почему я до сих пор это понимаю?

451
tyczj

Я думаю, что вы разрабатываете для 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>
749
Nadir Belhaj

Другой простой способ - сделать вашу тему дочерней по отношению к Theme.AppCompat.Light.NoActionBar, например так:

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

Добавьте одну строку 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>
112
Volodymyr Kulyk

Чтобы использовать панель инструментов в качестве панели действий, сначала отключите предоставленную декором панель действий.

Самый простой способ - расширить тему

Theme.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);
}

Этот код работал для меня.

51
V_J

Если вы хотите объединить некоторые действия с панелью действий, а другие нет, вам следует использовать базовую тему с включенной панелью действий, а затем создать подтему, которую вы собираетесь использовать в действиях, для которых не требуется панель действий.

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

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

вы должны применить это к каждому отдельному действию, которому не нужна панель действий, поэтому, если вашему проекту требуется меньше действий на панели действий, чем не, тогда лучше применить это на уровне базовой темы

19
Nasz Njoka Sr.

Я также столкнулся с той же проблемой. Но я использовал:

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

Добавьте это в ваши values ​​/ styles.xml

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

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

</style>

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

</style>

И добавьте следующий код в ваши values-v11/styles.xml и values-v14/styles.xml

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

</style>

Это оно. Это будет работать.

8
Prabhakaran

Вам нужно изменить

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

эти строки в манифесте. Это будет отлично работать для меня.

6
S HemaNandhini

Перейдите в style.xml вашего проекта и установите windowActionBar в false

<style name="AppCompatTheme" parent="@style/Theme.AppCompat.Light">
        <item name="Android:windowActionBar">false</item>
</style>
5
Asim Krishna Das

Мне добавили панель инструментов в мой XML. Затем в своей деятельности я добавил это утверждение:

setSupportActionBar(toolbar);

Удаление этого сработало для меня. Надеюсь, это кому-нибудь поможет.

4
Harry .Naeem

Добавьте эти две строки в тему вашего приложения, расположенную в 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
Kailash Dabhi

Если вы используете Appcompact Activity, используйте эти три строки в своей теме.

<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="Android:windowActionBarOverlay">false</item>
2
Syed Hamza Hassan

Вот так я решил проблему. Добавьте следующий код в свой AndroidMainfest.xml

<activity Android:name=".YourClass"
            Android:theme="@style/Theme.AppCompat.Light.NoActionBar">
 </activity>
2
John Joe

Если вы получили ошибку в этой строке:

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
2
live-love

Проще говоря, вы можете сделать следующее: -

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

    }
1
yash sachdeva

Используйте это внутри тега приложения в манифесте или внутри тега Activity.

Android: тема = "@ стиль/AppTheme.NoActionBar"

0
Anirban