Unity, theme.AppCompat не работает. Невозможно вызвать действие, которое расширяет AppCompatActivity [duplicate]

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

$test = "variable";
echo "Hello Mr $test"; // the output would be: Hello Mr variable
echo 'Hello Mr $test'; // the output would be: Hello Mr $test

Здесь двойная кавычка анализирует значение и одинарную кавычку рассматривается как строковое значение (без разбора переменной $ test.)

782
задан Kara 26 August 2014 в 17:22
поделиться

30 ответов

Причина, по которой вы сталкиваетесь с этой проблемой, связана с тем, что действие, которое вы пытаетесь применить к теме диалога, распространяется ActionBarActivity, которое требует применения темы AppCompat.

Обновление: расширение AppCompatActivity также будет иметь эту проблему

. В этом случае измените наследование Java с ActionBarActivity на Activity и оставьте тему диалога в манифесте как это значение не Theme.AppCompat


. Общее правило заключается в том, что если вы хотите, чтобы ваш код поддерживал старые версии Android, он должен иметь тему AppCompat, а код Java должен расширяться AppCompatActivity. Если у вас есть * деятельность, которая не нуждается в этой поддержке, например, вы заботитесь только о последних версиях и функциях Android, вы можете применить к ней любую тему, но код Java должен распространять простой старый Activity.


ПРИМЕЧАНИЕ. Если изменение AppCompatActivity (или подкласса ActionBarActivity) на Activity также должно изменить различные вызовы с «поддержкой» на соответствующий вызов без "поддержка". Итак, вместо getSupportFragmentManager вызовите getFragmentManager.

978
ответ дан Bobbake4 24 August 2018 в 04:56
поделиться

Just Do

new AlertDialog.Builder(this)

Вместо

new AlertDialog.Builder(getApplicationContext())
4
ответ дан Ali Akram 24 August 2018 в 04:56
поделиться

В моем случае у меня нет файлов-значений -21 в каталоге res. Затем я создал его и добавил в него следующие коды:

  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
16
ответ дан Ali Gürelli 24 August 2018 в 04:56
поделиться

Это когда вам нужен AlertDialog в фрагменте

            AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());
            adb.setTitle("My alert Dialogue \n");
            adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                  //some code

            } });
            adb.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                 dialog.dismiss();

                } });
            adb.show();
6
ответ дан Avinash_ks 24 August 2018 в 04:56
поделиться

У меня возникла такая же проблема. Потому что я создавал пользовательский навигационный ящик. Но я забыл упомянуть тему в моем манифесте, подобном этому

android: theme = "@ style / Theme.AppCompat.NoActionBar"

Как только я добавил выше тему к моему манифесту он разрешил проблему.

3
ответ дан Azhar osws 24 August 2018 в 04:56
поделиться

для меня было решением использовать ContextThemeWrapper:

private FloatingActionButton getFAB() {
Context context = new android.support.v7.view.ContextThemeWrapper(getContext(), R.style.AppTheme);
FloatingActionButton fab = new FloatingActionButton(context);
return fab;}

из Android - Как программно создать FAB?

7
ответ дан Community 24 August 2018 в 04:56
поделиться

Вы пришли к этому, потому что хотите применить Material Design в своем стиле темы в предыдущих версиях sdk до 21. ActionBarActivity требует AppTheme, поэтому, если вы также хотите предотвратить собственную настройку вашего AppTheme, только у вас есть для изменения в ваших styles.xml (до sdk 21), чтобы этот способ мог наследовать тему приложения.

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">

для этого:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
5
ответ дан danigonlinea 24 August 2018 в 04:56
поделиться

В моем опыте проблема была в контексте, где я показал свой диалог. Внутри нажатия кнопки я создаю AlertDialog следующим образом:

builder = new AlertDialog.Builder(getApplicationContext());

Но контекст был неправильным и вызвал ошибку. Я изменил его с помощью контекста приложения следующим образом:

В разделе объявления:

Context mContext;

в методе onCreate

mContext = this;

И, наконец, в коде, где мне нужен AlertDialog:

start_stop = (Button) findViewById(R.id.start_stop);
start_stop.setOnClickListener( new View.OnClickListener()
     {
                @Override
                public void onClick(View v)
                {
                    if (!is_running)
                    {
                        builder = new AlertDialog.Builder(mContext);
                        builder.setMessage("MYTEXT")
                                .setCancelable(false)
                                .setPositiveButton("SI", new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                    Task_Started = false;
                                    startTask();
                                    }
                                })
                                .setNegativeButton("NO",
                                        new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                        dialog.cancel();
                                    }
                                });
                        AlertDialog alert = builder.create();
                        alert.show();
                    }
            }
        }

Это решение для меня.

4
ответ дан Dante 24 August 2018 в 04:56
поделиться

Это сработало для меня, я просто изменил:

final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());

на это:

final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
62
ответ дан Darush 24 August 2018 в 04:56
поделиться

Все, что вам нужно сделать, это добавить android:theme="@style/Theme.AppCompat.Light" в свой тег приложения в файле AndroidManifest.xml.

467
ответ дан dev.mi 24 August 2018 в 04:56
поделиться

Измените тему желаемого действия. Это работает для меня:

<activity
            android:name="HomeActivity"
            android:screenOrientation="landscape"
            android:theme="@style/Theme.AppCompat.Light"
            android:windowSoftInputMode="stateHidden" />
12
ответ дан Evgeniy Philippov 24 August 2018 в 04:56
поделиться

Измените родительский стиль стиля на

 parent="Theme.AppCompat"

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

5
ответ дан Fazal 24 August 2018 в 04:56
поделиться

Я столкнулся с этой проблемой, хотя моя тема была AppCompat Theme, а моя активность была AppCompatActivity (или Activity, как было предложено в ответах других). Поэтому я очистил, перестроил и повторил проект.

(Build -> Clean Project, Build -> Rebuild Project, Run -> Run)

Это может показаться немым, но теперь он отлично работает!

Просто надеюсь, что это поможет!

31
ответ дан Geraldo Neto 24 August 2018 в 04:56
поделиться

У меня была такая авария на устройствах 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"

11
ответ дан goRGon 24 August 2018 в 04:56
поделиться

Если вам нужно расширить ActionBarActivity, вам понадобится ваш style.xml:

<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base"/>

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->

Если вы установите главную тему своего приложения в качестве андроида: Theme.Material.Light вместо AppTheme.Base, тогда вы получите «IllegalStateException: вам нужно использовать тему Theme.AppCompat (или потомка) с этой ошибкой активности.

13
ответ дан JonasOliveira 24 August 2018 в 04:56
поделиться

Это то, что исправило это для меня: вместо указания темы в манифесте я определил ее в onCreate для каждого действия, которое продолжается ActionBarActivity:

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.MyAppTheme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_activity_layout);
...
}

Здесь MyAppTheme потомок Theme.AppCompat и определяется в xml. Обратите внимание, что тема должна быть установлена ​​до super.onCreate и setContentView.

23
ответ дан k29 24 August 2018 в 04:56
поделиться

Быстрое решение.

Измените родительскую основную родительскую тему в styles.xml

Замените с

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

на

<style name="AppTheme" parent="Theme.AppCompat">
6
ответ дан Kaloglu 24 August 2018 в 04:56
поделиться

Это решение сработало для меня.

Библиотека дизайна зависит от библиотек поддержки поддержки v4 и AppCompat, поэтому не используйте другую версию для библиотеки appcompat и design в gradle.

use

 compile 'com.android.support:appcompat-v7:23.0.0'
 compile 'com.android.support:design:23.0.0'

вместо

 compile 'com.android.support:appcompat-v7:23.0.0'
 compile 'com.android.support:design:23.1.0'
3
ответ дан kiran boghra 24 August 2018 в 04:56
поделиться

У меня была та же проблема, но она решила, когда я положил это на манифест: android: theme = "@ style / Theme.AppCompat.

    <application
        android:allowBackup="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name_test"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat">

        ...    

    </application>
12
ответ дан Marc Baduq 24 August 2018 в 04:56
поделиться

В Android-манифесте просто измените тему активности на AppTheme, следуя фрагменту кода

<activity
  android:name=".MainActivity"
  android:label="@string/app_name"
  android:theme="@style/AppTheme">
</activity>
6
ответ дан maxhb 24 August 2018 в 04:56
поделиться

Ваша активность расширяет ActionBarActivity, которая требует применения AppCompat.theme. Перейдите из ActionBarActivity в Activity или FragmentActivity, это решит проблему.

Если вы не используете панель действий, то:

android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" 
5
ответ дан Md Imran Choudhury 24 August 2018 в 04:56
поделиться

В моем случае я раздувал представление с помощью ApplicationContext. Когда вы используете ApplicationContext, тема / стиль не применяется, поэтому, хотя в моем стиле был Theme.Appcompat, он не применялся и вызывал это исключение. Подробнее: Тема / Стиль не применяется, когда надуватель с использованием ApplicationContext

3
ответ дан Murat 24 August 2018 в 04:56
поделиться

Копирование ответа от @MarkKeen в комментариях выше, поскольку у меня была та же проблема.

У меня была ошибка, указанная в верхней части сообщения и произошедшая после добавления диалогового окна предупреждения. У меня есть вся соответствующая информация стиля в манифесте. Моя проблема была излечена путем изменения ссылки на контекст в построителе предупреждений - я изменил:

new android.support.v7.app.AlertDialog.Builder(getApplicationContext())

на:

new android.support.v7.app.AlertDialog.Builder(this)

И больше никаких проблем.

168
ответ дан Pang 24 August 2018 в 04:56
поделиться

min sdk равно 10. ActionBar доступен с уровня api 11. Итак, для 10 вы будете использовать AppCompat из библиотеки поддержки, для которой вам нужно использовать Theme.AppCompat или потомка того же самого.

Использовать

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

Или если вы не хотите, чтобы панель действий вверху

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

Дополнительная информация @

http: //developer.android.com/guide/topics/ui/actionbar.html

Изменить:

Возможно, я неправильно прочитал сообщение op.

Кажется, op хочет Диалог с тематикой активности. Так как уже предложенный Bobbake4 расширяет Activity вместо ActionBarActivity.

Также посмотрите @ Атрибуты диалога в ссылке ниже

http: // grepcode. ком / файл / repository.grepcode.com / Java / внутр / com.google.android / Android / 4.4_r1 / рамки / база / ядро ​​/ RES / RES / значения / themes.xml /

84
ответ дан shareef 24 August 2018 в 04:56
поделиться

Для меня ни один из вышеперечисленных ответов не работал даже после того, как у меня была Theme.AppCompat в качестве базовой темы для приложения. Я использовал com.android.support:design:24.1.0. Поэтому я просто изменил версию на 24.1.1. После синхронизации градиента, его работа снова и исключение исчезло. Кажется, проблема связана с некоторыми более старыми версиями библиотек поддержки дизайна.

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

3
ответ дан Sharp Edge 24 August 2018 в 04:56
поделиться

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

<application
           android:allowBackup="true"
           android:icon="@mipmap/ic_launcher"
           android:label="@string/app_name"
           android:theme="@style/AppTheme" >
           <activity
               android:name=".MainActivity"
               android:label="@string/app_name"
               android:theme="@style/Theme.AppCompat.NoActionBar">

               <intent-filter>
                   <action android:name="android.intent.action.MAIN" />

                   <category android:name="android.intent.category.LAUNCHER" />
               </intent-filter>
           </activity>
</application>
5
ответ дан user1501382 24 August 2018 в 04:56
поделиться

Моя активность с разделамиPagerAdapter и ViewPager & amp; Фрагмент

public class MyActivity extends AppCompatActivity implements ActionBar.TabListener
...
...
     @Override
        public void onPostResume(){
            super.onPostResume();
            try {
               getSupportActionBar().setDisplayShowTitleEnabled(false);
            }catch (NullPointerException ignored){
            }
        }
2
ответ дан valera 24 August 2018 в 04:56
поделиться

У меня была и эта проблема, и что я сделал, чтобы исправить ее, и все еще использую тему Holo, чтобы выполнить следующие шаги:

сначала я заменил этот импорт:

import android.support.v7.app.AppCompatActivity;

с этим:

import android.app.Activity;

затем изменил мое расширение с:

public class MyClass extends AppCompatActivity {//...

на следующее:

public class MyClass extends Activity {//...

И также пришлось изменить этот импорт:

import android.support.v7.app.AlertDialog;

для этого импорта:

import android.app.AlertDialog;

, а затем вы можете использовать свой тег темы в манифесте на уровне активности:

android:theme="@android:style/Theme.Holo.Dialog" />

и, наконец, (если у вас нет других классов в вашем проекте, которые должны использовать v7 appCompat), вы можете либо очистить, либо перестроить проект, либо удалить эту запись в файле сборки градации на уровне приложения:

compile 'com.android.support:appcompat-v7:23.2.1'

, если у вас есть другие классы в вашем проекте, которые должны использовать v7 appCompat, а затем просто очистить и перестроить проект.

6
ответ дан Wraithious 24 August 2018 в 04:56
поделиться

перейдите к вашим стилям и поместите родительский

parent="Theme.AppCompat"

вместо

parent="@android:style/Theme.Holo.Light"
17
ответ дан Yamen Nassif 24 August 2018 в 04:56
поделиться

У вас много решений этой ошибки.

  1. Вы должны использовать Activity или FragmentActivity вместо ActionbarActivity или AppCompatActivity
  2. Если вы хотите использовать ActionbarActivity или AppCompatActivity , вы должны изменить в styles.xml Theme.Holo.xxxx to Theme.AppCompat.Light (при необходимости добавить к DarkActionbar )

Если вам не нужны расширенные атрибуты панели действий или AppCompat , вам не нужно использовать Actionbar или AppCompat .

6
ответ дан Kaloglu 24 August 2018 в 04:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: