이 활동에는 이미 창 장식에서 제공하는 작업 표시 줄이 있습니다.


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와 같은 것을 백 포트 할 수있는 방법입니다.
yarian

4
내 스타일에 해당 줄을 추가하면 앱이 다운됩니다 :(
rkmax

9
22.1 지원 라이브러리 이후 AppCompatActivity를 사용하는 경우 <item name = "windowNoTitle"> true </ item>도 추가하십시오. stackoverflow.com/a/29853299/1402525
Nick

4
매니페스트 파일의 애플리케이션 태그에 android : theme = "@ style / AppTheme"를 추가하는 것을 잊지 마십시오.
라이브 사랑

202

또 다른 쉬운 방법은 테마를 다음 Theme.AppCompat.Light.NoActionBar과 같은 자식으로 만드는 것입니다 .

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

이 방법도 시도했지만 여전히 오류가 발생했습니다. 내에 테마를 설정하기 전에 그러나 그 수 있었다 GooglePlayServiceActivity, 나는 기억 해달라고
tyczj

1
예, 이것이 제가 사용한 것입니다. 활동이 매니페스트에서이 테마를 사용하고 있는지 확인하십시오.
MrEngineer13

6
이 솔루션은 @Nadir Belhaj의 솔루션보다 더 우아하지만 둘 다 정확합니다.
voghDev

내가 인라인 XML 속성을 사용하여,이 더 나은 해답이라고 생각 (windowActionBar = 거짓)는 작동하지 않았다 - 나는 @tyczj과 동일한 오류가 발생했습니다
부거

이 경우 실제로 유용한 부모 인 Theme.AppCompat.Light.DarkActionBar를 사용할 수 없습니다.
f470071

125

한 줄을 추가 android:theme="@style/AppTheme.NoActionBar"activityAndroidManifest작업이 완료했습니다.


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

툴바를 작업 표시 줄로 사용하려면 먼저 장식 제공 작업 표시 줄을 비활성화하십시오.

가장 쉬운 방법은 테마를 확장하는 것입니다

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

이 코드는 나를 위해 일했습니다.


1
감사! <android.support.v7.widget.ToolbarXML 에 추가 하는 것을 잊었습니다 .
CoolMind

1
툴바 색상이 왜 비어 있는지 이해할 수 없었습니다. Couldnt는 그것을 녹색으로 바꾸는 방법을 알아내는 것 같습니다. 레이아웃 파일의 <android.support.v7.widget.Toolbar /> 내에 android : background = ""를 넣으면 바보 같은 느낌이 들었습니다. . 감사합니다
Andrew Irwin

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

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>

그게 다야. 작동합니다.


6

당신은 변경해야합니다

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

이 줄은 매니페스트에서 완벽하게 작동합니다.


5

프로젝트의 'style.xml'로 이동하여 windowActionBar를 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"를 사용하십시오.
Christina

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 (toolbar);"를 제거한다고 생각합니다. 툴바는 그대로 유지됩니다.
Harry .Naeem

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 : theme = "@ 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

두 가지 간단하고 빠른 솔루션이 있습니다

입술-> 값-> 스타일로 이동

더 쉽게이 비디오를 볼 수도 있습니다. 여기를 클릭하십시오.

해결책 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">

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.