ActionBarCompat : java.lang.IllegalStateException : Theme.AppCompat를 사용해야합니다.

나는 안드로이드 2.3.5에서의 RuntimeException을 얻고있다하지만 난 하고 Theme.AppCompat (고해상도 / 값 / themes.xml)를 사용하여. 이것은 전화입니다 : http://www.gsmarena.com/samsung_galaxy_y_s5360-4117.php

 <!-- res/values/themes.xml -->
 <?xml version="1.0" encoding="utf-8"?>
 <resources>

     <style name="Theme.Styled" parent="@style/Theme.AppCompat">
         <item name="actionBarStyle">@style/QueryActionBar</item>
         <item name="android:actionBarStyle">@style/QueryActionBar</item>
     </style>

     <style name="QueryActionBar" parent="@style/Widget.AppCompat.ActionBar">
         <item name="background">@color/blueback</item>
         <item name="android:background">@color/blueback</item>
         <item name="backgroundSplit">@color/blueback</item>
         <item name="android:backgroundSplit">@color/blueback</item>
     </style>

 </resources>

다음은 values-v11에 대한 파일입니다.

 <!-- res/values-v11/themes.xml -->
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
    <style name="QueryTheme" parent="@android:style/Theme.Holo">
    <!-- Any customizations for your app running on devices with Theme.Holo here -->
    </style>
 </resources>

여기에 오류가 있습니다.

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.txt2lrn.www/com.txt2lrn.www.LandingActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
 at android.app.ActivityThread.access$1500(ActivityThread.java:117)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
 at android.os.Handler.dispatchMessage(Handler.java:99)
 at android.os.Looper.loop(Looper.java:130)
 at android.app.ActivityThread.main(ActivityThread.java:3687)
 at java.lang.reflect.Method.invokeNative(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:507)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
 at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
 at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:102)
 at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:98)
 at com.txt2lrn.www.LandingActivity.onCreate(LandingActivity.java:95)
 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
 ... 11 more

죄송합니다. AndroidManifest.xml에 android : theme = “@ style / Theme.Styled”도 정의되어 있습니다.



답변

MainActivity에서 ActionBarActivity를 확장하는 경우 values-v11에서도 상위 테마를 변경해야합니다.
따라서 values-v11의 style.xml은 다음과 같습니다.

 <!-- res/values-v11/themes.xml -->
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
    <style name="QueryTheme" parent="@style/Theme.AppCompat">
    <!-- Any customizations for your app running on devices with Theme.Holo here -->
    </style>
 </resources>

편집 : ActionBar 사용을 중지하고 Android 디자인 지원 라이브러리에 포함 된 AppBar 레이아웃을 사용하는 것이 좋습니다.


답변

ActionBar Compat를 추가하려면 활동 또는 애플리케이션이 다음과 같이 AndroidManifest.xml에서 @ style / Theme.AppCompat 테마를 사용해야합니다.

   <activity
        ...
        android:theme="@style/Theme.AppCompat" />

그러면 활동에 액션 바가 추가됩니다 (또는이 테마를 애플리케이션에 추가 한 경우 모든 활동).


그러나 일반적으로 작업 표시 줄을 사용자 정의해야합니다. 이렇게하려면 “@ style / Theme.AppCompat.Light”와 같이 Theme.AppCompat 부모를 사용하여 두 가지 스타일을 만들어야합니다. 첫 번째는 api 11> = (안드로이드 액션 바에 빌드 된 안드로이드 버전), 두 번째는 api 7-10 (액션 바에 빌드 없음)을위한 것입니다.

첫 번째 스타일을 살펴 보겠습니다. 그것은에 위치 할 고해상도 / 값-V11 / styles.xml . 다음과 같이 표시됩니다.

<style name="Theme.Styled" parent="@style/Theme.AppCompat.Light">
    <!-- Setting values in the android namespace affects API levels 11+ -->
    <item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
</style>

<style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
    <!-- Setting values in the android namespace affects API levels 11+ -->
    <item name="android:background">@drawable/ab_custom_solid_styled</item>
    <item name="android:backgroundStacked"
      >@drawable/ab_custom_stacked_solid_styled</item>
    <item name="android:backgroundSplit"
      >@drawable/ab_custom_bottom_solid_styled</item>
</style>

그리고 api 7-10에 대해 동일한 스타일이 필요합니다. 그것은에 위치 할 고해상도 / 값 / styles.xml 하지만 API 수준이 아직 원래의 안드로이드 액션 바 스타일의 항목에 대해 알고하지 않기 때문에, 우리는 지원 라이브러리에서 제공되는 선택 사항 중 하나를 사용해야합니다. ActionBar Compat 항목은 원래 Android처럼 정의되지만 앞에 “android :”부분이 없습니다.

<style name="Theme.Styled" parent="@style/Theme.AppCompat.Light">
    <!-- Setting values in the default namespace affects API levels 7-11 -->
    <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
</style>

<style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
    <!-- Setting values in the default namespace affects API levels 7-11 -->
    <item name="background">@drawable/ab_custom_solid_styled</item>
    <item name="backgroundStacked">@drawable/ab_custom_stacked_solid_styled</item>
    <item name="backgroundSplit">@drawable/ab_custom_bottom_solid_styled</item>
</style>

10보다 높은 API 레벨에 이미 액션 바가 있더라도 AppCompat 스타일을 사용해야한다는 점을 표시하십시오. 그렇지 않으면 Android 3.0 이상이 설치된 기기에서 Acitvity를 시작할 때 다음 오류가 발생합니다.

java.lang.IllegalStateException :이 활동에 Theme.AppCompat 테마 (또는 하위 항목)를 사용해야합니다.

다음은 Chris Banes가 작성한 이 원본 기사 http://android-developers.blogspot.com/2013/08/actionbarcompat-and-io-2013-app-source.html 링크 입니다.

추신 : 내 영어 죄송합니다


답변

theme.styled를 참조하고 AppCompat 테마를 사용하지 않는 다른 값 폴더가 없는지 확인하고 확인하십시오.

values-v11폴더


답변

이 시도…

styles.xml

<resources>
 <style name="Theme.AppCompat.Light.NoActionBar" parent="@style/Theme.AppCompat.Light">
    <item name="android:windowNoTitle">true</item>
 </style>
</resources>

AndroidManifest.xml

   <activity
        android:name="com.example.Home"
        android:label="@string/app_name"
        android:theme="@style/Theme.AppCompat.Light.NoActionBar"
        >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>


답변

귀하의 Activity확장 ActionBarActivityAppCompat.theme적용 되어야합니다 . 에서 변경 ActionBarActivityActivity하거나 FragmentActivity이 문제를 해결합니다.


답변

빌드-> 프로젝트 정리를 수행하십시오. 나는 이것이 당신의 문제를 해결할 것이라고 생각합니다.


답변

내 매니페스트가 테마를 참조하지 않습니다 … AFAIK가 필요하지 않습니다.

물론입니다. Theme.Styled활동 에 마법처럼 적용 되는 것은 없습니다 . 활동 또는 전체 애플리케이션이를 사용 Theme.Styled하고 있음을 선언해야합니다 . 예 :

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/Theme.Styled">