2010-11-26 1 views
18

Я хотел бы разместить выделение в строке заголовков диалогов. Я пробовал следующее:Как поместить значок в заголовок настраиваемого диалога

final Dialog dialog = new Dialog(this); 
dialog.requestWindowFeature(Window.FEATURE_LEFT_ICON); 
dialog.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.some_icon); 
dialog.setTitle(R.string.my_dialog_title); 
dialog.setContentView(R.layout.my_dialog_layout); 
... 

Значок не отображается, но заголовок немного перемещается вправо. Кажется, что диалог резервирует пространство для рисования, но не рисует его. Я попробовал несколько разных значков (также из ресурсов Android), но не работал.

ответ

15

Звонок setFeatureDrawableResource()послеshow().

Не знаю, почему это работает. :)

+0

Спасибо! Возможно, ошибка в рамках? – Tom 2010-11-26 12:24:09

+6

Используйте это, и вы положите его перед шоу. requestWindowFeature -> setContentView -> setFeatureDrawableResource – 2011-02-27 12:04:59

15

Вот решение

final Dialog dialog = new Dialog(this); 
dialog.requestWindowFeature(Window.FEATURE_LEFT_ICON); 
dialog.setTitle(R.string.my_dialog_title); 
dialog.setContentView(R.layout.my_dialog_layout); 
dialog.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON,R.drawable.some_icon); 
dialog.show(); 

Если вы хотите, чтобы ваш диалог выглядеть в деятельности, чем добавить тему в диалоге, как следовать

final Dialog dialog = new Dialog(this,AlertDialog.THEME_HOLO_LIGHT); 
2

Вот решение. Следуйте рецепту, и у вас будет ваша икона! Примечание: заказ очень важно ...

 final Dialog yourDialog = new Dialog(YourClass.this); 
      yourDialog.requestWindowFeature(Window.FEATURE_LEFT_ICON); //must come BEFORE setContentView 
      yourDialog.setContentView(R.layout.yourDialog_layout); 
      yourDialog.setTitle("Your Title"); 
      yourDialog.setCancelable(true); 
      yourDialog.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.your_icon); //must come AFTER setContentView 
2

Я получил его на работу по-другому, благодаря сообщению Смайл Хаммур.

Поместите этот статический метод в предпочитаемом классе инструмента:

public static void msgBox(String msg, String title, int type, final Context c){ 

    int theIcon = drawable.ic_dialog_alert; 

    switch(type){ 
    case YourToolClass.CONFIRMATION: 
     theIcon = drawable.ic_menu_help; 
     break;  
    case YourToolClass.INFO: 
     theIcon = drawable.ic_dialog_info; 
     break; 
    case YourToolClass.ALERT: 
    default: 
    } 

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

    /* Here enters the .setIcon: */ 
builder.setMessage(msg) .setTitle (title) .setIcon(theIcon); 

builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 
     /* */ 
    } 
}); 


AlertDialog dialog = builder.create(); 
dialog.show(); 

} 

Для вызова:

YourToolClass.msgBox("the main message goes here", "Test", getBaseContext()); 
3

Вы также можете расширить Dialog класс следующим образом:

public class CustomDialog extends Dialog { 

    public CustomDialog(Context context) { 
     super(context); 
     setTitle("Some Title"); 
     requestWindowFeature(Window.FEATURE_LEFT_ICON); 
     setContentView(R.layout.my_layout); 
    } 

    @Override 
    protected void onStart() { 
     setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.my_icon); 
     super.onStart(); 
    } 

то вам подготовьте свою функцию окна в конструкторе, а затем установите конкретный ресурс в OnStart.

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

CustomDialog cd = new CustomDialog(getActivity()); 
    rd.show(); 
0

вызова setFeatureDrawableResource llike этого

dialog.show(); 
dialog.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.logo_1x); 

т.е. после вызова dialog.show() прекрасно работал в моем случае .. спасибо. . :)

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

  • Нет связанных вопросов^_^