Как поместить значок в заголовок пользовательского диалога - PullRequest
18 голосов
/ 26 ноября 2010

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

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), но ни один из них не работал.

Ответы [ 7 ]

15 голосов
/ 22 марта 2012

Вот решение

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);  
15 голосов
/ 26 ноября 2010

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

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

3 голосов
/ 07 августа 2013

Вы также можете расширить класс 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();
2 голосов
/ 15 января 2013

Я заставил его работать по-другому, благодаря сообщению Smaïl Hammour.

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

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());
2 голосов
/ 21 ноября 2012

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

        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
1 голос
/ 16 мая 2012
setIcon(R.drawable.image_name)
0 голосов
/ 15 сентября 2016

вызов setFeatureDrawableResource, как это

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

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

...