2016-04-11 2 views
3

У меня есть диалог оповещения, что в настоящее время выглядит следующим образом: Current Alert DialogКак создать пользовательские кнопки AlertDialog android?

Но я хочу, и кнопки «ДА» «НЕТ», чтобы иметь фон, или посмотреть, как они представляют собой кнопки, а не просто текст. Я попытался реализовать пользовательскую тему для AlertDialog, но единственными изменениями, которые я могу получить, является изменение цвета текста «ПРЕДУПРЕЖДЕНИЕ».

Что было бы самым эффективным и простым способом настройки темы диалога оповещений, чтобы вместо «YES» и «NO» были фактические кнопки?

Это мой текущий файл Рез/значения/styles.xml

<resources> 

<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.Light"> 
    <!-- Customize your theme here. --> 
    <item name="colorAccent">@color/PCCA_blue</item> 
</style> 

<style name="customAlertDialog" parent="@android:style/Theme.Holo.Dialog"> 
    <item name="android:textColor">@color/red</item> 

</style> 

И это где я строю и показать AlertDialog:

private void alert(final String action){ 
    final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.customAlertDialog)); 
    String message = ""; 

    switch(action) { 
     case "upload": 
      message = "Are you sure you want to upload the counted quantities?\n\nIt may take a few minutes to reflect your changes."; 
      break; 
     case "download": 
      message = "Downloading new worksheets may overwrite existing counted quantities, do you want to continue?\n\n" + 
        "NOTE: You may want to upload counts first.\n\n" + 
        "(Changed counted quantities will still be available for upload)"; 
      break; 
     default: 
      message = action; 
      break; 
    } 


    alertDialogBuilder.setTitle("WARNING"); 
    alertDialogBuilder.setMessage(message); 
    DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      if(which == DialogInterface.BUTTON_POSITIVE) { 
       if (action.equals("upload")) { 
        MainActivity.upload(context); 
       } else if (action.equals("download")) { 
        MainActivity.download(context); 
       } 
      } else { 
       dialog.cancel(); 
      } 
     } 
    }; 

    alertDialogBuilder.setPositiveButton("YES", listener); 
    alertDialogBuilder.setNegativeButton("NO", listener); 

    AlertDialog alertDialog = alertDialogBuilder.create(); 
    alertDialog.show(); 

} 

Любые советы ценится , Я новичок в android.

+1

Вы можете создать свой собственный макет и установить его в качестве своего вида для своего диалога. Требуется немного больше работы и настройки, но это единственный способ, которым я знаю, как это сделать. – zgc7009

+0

'setView()' для тела диалога, а не для кнопок. –

ответ

1

AlertDialog имеет метод getButton(). Вы можете получить кнопку и установить ее фон. Есть некоторые предостережения: вы можете вызвать этот метод только после отображения диалогового окна (я верю, что после того, как onStart() был вызван в классе Dialog).

Это, скорее всего, вы не получите вид, который вы хотите, учитывая прокладки, поля, содержащие макеты и т. Д. Точка AlertDialog должна иметь стандартный диалог, который соответствует системной теме. Это не должно быть настраиваемым, UI-мудрый.

В противном случае вам необходимо создать полностью настраиваемый диалог. У вас есть несколько вариантов: диалог DialogFragment, пользовательский диалог или диалоговое действие. Google эти темы для получения дополнительной информации.

Смежные вопросы