Вещи оцениваются в двойных кавычках, но не в одном:
$s = "dollars";
echo 'This costs a lot of $s.'; // This costs a lot of $s.
echo "This costs a lot of $s."; // This costs a lot of dollars.
Причина, по которой вы сталкиваетесь с этой проблемой, связана с тем, что действие, которое вы пытаетесь применить к теме диалога, распространяется ActionBarActivity
, которое требует применения темы AppCompat
.
Обновление: расширение AppCompatActivity
также будет иметь эту проблему
. В этом случае измените наследование Java с ActionBarActivity
на Activity
и оставьте тему диалога в манифесте как это значение не Theme.AppCompat
. Общее правило заключается в том, что если вы хотите, чтобы ваш код поддерживал старые версии Android, он должен иметь тему AppCompat
, а код Java должен расширяться AppCompatActivity
. Если у вас есть * деятельность, которая не нуждается в этой поддержке, например, вы заботитесь только о последних версиях и функциях Android, вы можете применить к ней любую тему, но код Java должен распространять простой старый Activity
.
ПРИМЕЧАНИЕ. Если изменение AppCompatActivity
(или подкласса ActionBarActivity
) на Activity
также должно изменить различные вызовы с «поддержкой» на соответствующий вызов без "поддержка". Итак, вместо getSupportFragmentManager
вызовите getFragmentManager
.
Just Do
new AlertDialog.Builder(this)
Вместо
new AlertDialog.Builder(getApplicationContext())
В моем случае у меня нет файлов-значений -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>
Это когда вам нужен 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();
У меня возникла такая же проблема. Потому что я создавал пользовательский навигационный ящик. Но я забыл упомянуть тему в моем манифесте, подобном этому
android: theme = "@ style / Theme.AppCompat.NoActionBar"
Как только я добавил выше тему к моему манифесту он разрешил проблему.
для меня было решением использовать ContextThemeWrapper:
private FloatingActionButton getFAB() {
Context context = new android.support.v7.view.ContextThemeWrapper(getContext(), R.style.AppTheme);
FloatingActionButton fab = new FloatingActionButton(context);
return fab;}
Вы пришли к этому, потому что хотите применить 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">
В моем опыте проблема была в контексте, где я показал свой диалог. Внутри нажатия кнопки я создаю 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();
}
}
}
Это решение для меня.
Это сработало для меня, я просто изменил:
final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
на это:
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
Все, что вам нужно сделать, это добавить android:theme="@style/Theme.AppCompat.Light"
в свой тег приложения в файле AndroidManifest.xml
.
Измените тему желаемого действия. Это работает для меня:
<activity
android:name="HomeActivity"
android:screenOrientation="landscape"
android:theme="@style/Theme.AppCompat.Light"
android:windowSoftInputMode="stateHidden" />
Измените родительский стиль стиля на
parent="Theme.AppCompat"
Это сработало для меня ...
Я столкнулся с этой проблемой, хотя моя тема была AppCompat
Theme, а моя активность была AppCompatActivity
(или Activity
, как было предложено в ответах других). Поэтому я очистил, перестроил и повторил проект.
(Build -> Clean Project, Build -> Rebuild Project, Run -> Run)
Это может показаться немым, но теперь он отлично работает!
Просто надеюсь, что это поможет!
У меня была такая авария на устройствах 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"
Если вам нужно расширить 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 (или потомка) с этой ошибкой активности.
Это то, что исправило это для меня: вместо указания темы в манифесте я определил ее в 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
.
Быстрое решение.
Измените родительскую основную родительскую тему в styles.xml
Замените с
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
на
<style name="AppTheme" parent="Theme.AppCompat">
Это решение сработало для меня.
Библиотека дизайна зависит от библиотек поддержки поддержки 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'
У меня была та же проблема, но она решила, когда я положил это на манифест: 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>
В Android-манифесте просто измените тему активности на AppTheme, следуя фрагменту кода
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme">
</activity>
Ваша активность расширяет ActionBarActivity, которая требует применения AppCompat.theme. Перейдите из ActionBarActivity в Activity или FragmentActivity, это решит проблему.
Если вы не используете панель действий, то:
blockquote>android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"
В моем случае я раздувал представление с помощью ApplicationContext. Когда вы используете ApplicationContext, тема / стиль не применяется, поэтому, хотя в моем стиле был Theme.Appcompat, он не применялся и вызывал это исключение. Подробнее: Тема / Стиль не применяется, когда надуватель с использованием ApplicationContext
Копирование ответа от @MarkKeen в комментариях выше, поскольку у меня была та же проблема.
У меня была ошибка, указанная в верхней части сообщения и произошедшая после добавления диалогового окна предупреждения. У меня есть вся соответствующая информация стиля в манифесте. Моя проблема была излечена путем изменения ссылки на контекст в построителе предупреждений - я изменил:
new android.support.v7.app.AlertDialog.Builder(getApplicationContext())
на:
new android.support.v7.app.AlertDialog.Builder(this)
И больше никаких проблем.
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
.
Также посмотрите @ Атрибуты диалога в ссылке ниже
Для меня ни один из вышеперечисленных ответов не работал даже после того, как у меня была Theme.AppCompat
в качестве базовой темы для приложения. Я использовал com.android.support:design:24.1.0
. Поэтому я просто изменил версию на 24.1.1
. После синхронизации градиента, его работа снова и исключение исчезло. Кажется, проблема связана с некоторыми более старыми версиями библиотек поддержки дизайна.
Просто поместите это здесь, если другие ответы не сработают для некоторых людей.
Это работало для меня:
<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>
Моя активность с разделамиPagerAdapter и ViewPager & amp; Фрагмент
public class MyActivity extends AppCompatActivity implements ActionBar.TabListener
...
...
@Override
public void onPostResume(){
super.onPostResume();
try {
getSupportActionBar().setDisplayShowTitleEnabled(false);
}catch (NullPointerException ignored){
}
}
У меня была и эта проблема, и что я сделал, чтобы исправить ее, и все еще использую тему 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, а затем просто очистить и перестроить проект.
перейдите к вашим стилям и поместите родительский
parent="Theme.AppCompat"
вместо
parent="@android:style/Theme.Holo.Light"
У вас много решений этой ошибки.
Если вам не нужны расширенные атрибуты панели действий или AppCompat , вам не нужно использовать Actionbar или AppCompat .