ActionBarCompat: java.lang.IllegalStateException: вам необходимо использовать Theme.AppCompat
Я получаю RuntimeException на Android 2.3.5, но я am, используя Theme.AppCompat(res/values /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>
Вот файл для значений-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
Извините, у меня также есть андроид: theme = "@style/Theme.Styled", определенный в AndroidManifest.xml.
Ответы
Ответ 1
Если вы расширяете ActionBarActivity в своей MainActivity, вам также придется изменить родительскую тему в значениях-v11.
Таким образом, style.xml в значениях-v11 будет -
<!-- 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>
EDIT: Я бы порекомендовал вам прекратить использование ActionBar и начать использовать макет AppBar, включенный в Android Design Support Library
Ответ 2
Чтобы просто добавить ActionBar Compat, ваша активность или приложение должны использовать тему @style/Theme.AppCompat в AndroidManifest.xml следующим образом:
<activity
...
android:theme="@style/Theme.AppCompat" />
Это добавит панель действий в действие (или все действия, если вы добавили эту тему в приложение)
Но обычно вам нужно настроить панель действий. Для этого вам нужно создать два стиля с родителем Theme.AppCompat, например, "@style/Theme.AppCompat.Light". Первый будет для api 11 >= (версии андроида со строкой в панели действий android), второй для api 7-10 (нет сборки в панели действий).
Давайте посмотрим на первый стиль. Он будет находиться в res/values-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. Он будет находиться в res/values /styles.xml, НО, потому что уровни api еще не знают о оригинальных элементах стиля панели задач Android, мы должны использовать один из них, предоставляемый библиотекой поддержки. Элементы управления ActionBar определяются точно так же, как и оригинальный 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>
Пожалуйста, отметьте, что даже если уровни api выше 10 уже имеют панель действий, вы все равно должны использовать стили AppCompat. Если вы этого не сделаете, у вас будет эта ошибка при запуске Acitvity на устройствах с Android 3.0 и выше:
java.lang.IllegalStateException: вам нужно использовать Theme.AppCompat тема (или потомок) с этой деятельностью.
Вот ссылка на эту оригинальную статью http://android-developers.blogspot.com/2013/08/actionbarcompat-and-io-2013-app-source.html, написанную Крисом Банесом.
P.S. Извините за мой английский
Ответ 3
Проверьте и убедитесь, что у вас нет другой папки значений, которая ссылается на theme.styled и не использует тему AppCompat
т.е. values-v11
папка
Ответ 4
Попробуйте это...
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>
Ответ 5
Ваш Activity
расширяется ActionBarActivity
, который требует применения AppCompat.theme
.
Измените ActionBarActivity
на Activity
или FragmentActivity
, это решит проблему.
Ответ 6
Просто сделайте это Build → Clean Project. Я думаю, что это решит вашу проблему.
Ответ 7
Мой манифест не ссылается ни на какие темы... он не должен иметь AFAIK
Конечно. Ничто не собирается магически применять Theme.Styled
к активности. Вам необходимо объявить, что ваша деятельность - или все ваше приложение - использует Theme.Styled
, например,:
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.Styled">
Ответ 8
Я просто передаю свое приложение из ActionBarSherlock в ActionBarCompat.
Попробуйте объявить старую тему следующим образом:
<style name="Theme.Event" parent="Theme.AppCompat">
Затем установите тему в вашем AndroidManifest.xml:
<application
android:debuggable="true"
android:name=".activity.MyApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.Event.Home"
>
Ответ 9
У меня был такой сбой на устройствах Samsung, хотя в действии использовался Theme.AppCompat.
Основная причина была связана со странной оптимизацией со стороны Samsung:
- if one activity of your app has theme not inherited from Theme.AppCompat
- and it has also `android:launchMode="singleTask"`
- then all the activities that are launched from it will share the same Theme
Мое решение просто удаляло android:launchMode="singleTask"
Ответ 10
Я столкнулся с этой ошибкой, когда пытался создать DialogBox, когда какое-то действие было предпринято внутри класса CustomAdapter.
Это не Activity, а класс Adapter.
После 36 часов усилий и поиска решений я придумал это.
Отправьте Activity как параметр во время вызова CustomAdapter.
CustomAdapter ca = new CustomAdapter(MyActivity.this,getApplicationContext(),records);
Определите переменные в пользовательском адаптере.
Activity parentActivity;
Context context;
Вызовите конструктор следующим образом.
public CustomAdapter(Activity parentActivity,Context context,List<Record> records){
this.parentActivity=parentActivity;
this.context=context;
this.records=records;
}
И, наконец, при создании диалогового окна внутри класса адаптера сделайте это так.
AlertDialog ad = new AlertDialog.Builder(parentActivity).setTitle("Your title");
and so on..
Надеюсь, это поможет вам.
Ответ 11
в моем случае я сделал собственное представление
я добавил к пользовательскому представлению конструктор
new RoomView(getAplicationContext());
правильный контекст - это активность, поэтому он изменил его на:
new RoomView(getActivity());
или
new RoomView(this);
Ответ 12
В моем представлении списка используется пользовательский адаптер, который расширяет ArrayAdapter.
в listiview у меня есть 2 кнопки одной из кнопок в качестве Custom AlertDialogBox.
Пример:
Действие parentActivity;
Конструктор для адаптера
`
public CustomAdapter(ArrayList<Contact> data, Activity parentActivity,Context context) {
super(context,R.layout.listdummy,data);
this.mContext = context;
this.parentActivity = parentActivity;
}
`
вызов адаптера из MainActivty
adapter = new CustomAdapter(dataModels,MainActivity.this,this);
Ответ 13
para resolver o meu problema, eu apenas adicionei na minha MainActivity ( "Theme = Чтобы решить мою проблему, я просто добавил ее в свой MainActivity (" Theme = "@style/MyTheme" ), где MyTheme - это имя моего тема
[Activity(Label = "Name Label", MainLauncher = true, Icon = "@drawable/icon", LaunchMode = LaunchMode.SingleTop, Theme = "@style/MyTheme")]