2015-10-24 2 views
2

Я хочу, чтобы отобразить AlertDialog, когда диалог должен быть появиться я получаю следующее сообщение:Показать диалог - IllegalStateException: Вы должны использовать тему Theme.AppCompat

IllegalStateException: Вы должны использовать тему .AppCompat theme (или потомок) с этим действием.

Это код, я использую, чтобы отобразить диалоговое окно:

new AlertDialog.Builder(getBaseContext()) 
       .setTitle("Not set yet :(") 
       .setMessage("You haven't set the directories to search in... Do you want to set it now?") 
       .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         Intent i = new Intent(MainActivity.this, SettingsActivity.class); 
         startActivity(i); 
        } 
       }) 
       .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
        } 
       }) 
       .show(); 

Это MainActivity заголовок:

public class MainActivity extends AppCompatActivity 

Это мой styles.xml

<!-- 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> 
</style> 
<style name="AppTheme.NoActionBar"> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
</style> 
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /> 
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" /> 

</resources> 

Я пытался найти ответы ov er интернет и не смог найти ответ, как исправить эту проблему? Мне нужен ActionBar, мне нужно изменить наследование? Или мне нужно что-то изменить в AndroidManifest.xml или в styles.xml?

Спасибо!

ответ

1

Добавить это в style.xml

<style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert"> 
<item name="colorAccent">@color/colorAccent</item> 
<item name="android:textColorPrimary">@color/colorPrimary</item> 
<item name="android:background">#FFFFFF</item> 
</style> 

И использовать это для показа диалога (выход диалог, например) в вашем MainActivity.java:

AlertDialog.Builder builder = new AlertDialog.Builder(YourMainActivity.this, R.style.AlertDialogCustom); 
builder.setTitle(getResources().getString(R.string.title)); 
builder.setMessage(getResources().getString(R.string.exit_dialog)); 
builder.setPositiveButton(getResources().getString(R.string.ok_dialog), new DialogInterface.OnClickListener() { 
public void onClick(DialogInterface dialog, int id) { 
         YourMainActivity.this.finish(); 
           } 
          }); 
builder.setNegativeButton(getResources().getString(R.string.cancel_dialog), null); 
builder.show(); 

чем в строке .xml:

<string name="cancel_dialog">CANCEL</string> 
<string name="ok_dialog">OK</string> 
<string name="exit_dialog">Are you sure you want to quit?</string> 
<string name="title">Your App Title</string> 

В colors.xml (по желанию):

<item name="colorAccent" type="color">#FFFF8800</item> 
<item name="colorPrimary" type="color">#FFCC0000</item> 
+0

Хорошо, я буду проверять его сейчас. –

+0

Отличное решение, работало для меня, но почему это не сработало изначально? Мы оба явно использовали темы AppCompat .... – tccpg288