Android: как изменить семейство шрифтов сообщения и кнопок AlertDialog

Я показываю AlertDialog при нажатии кнопки, которая будет иметь положительные и отрицательные кнопки, которые являются кнопками по умолчанию для AlertDialog с сообщением.

Я хочу изменить семейство шрифтов этих кнопок и сообщений, как я могу это изменить?

Ниже мой код:

AlertDialog.Builder altDialog = new AlertDialog.Builder(context);
altDialog.setMessage(Constants.WARNING_STEPS);
altDialog.setTitle(Constants.WARNING);
altDialog.setCancelable(true);

altDialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
  @Override
    public void onClick(DialogInterface dialog, int which) {

});

altDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

    }
});

altDialog.show();

person Pankaj    schedule 28.04.2015    source источник
comment
comment
используйте пользовательский макет в диалоговом окне, проверьте эту ссылку stackoverflow.com/questions/10538482/   -  person Jignesh Jain    schedule 28.04.2015
comment
Вы нашли какое-нибудь решение?   -  person Shabbir Dhangot    schedule 19.09.2016


Ответы (3)


Ключевым моментом здесь является адрес текстовых представлений и кнопок в файле android.R.id, который является android.R.id.button1 и android.R.id.button2 и android.R.id.button3, а также android.R. id.сообщение

       AlertDialog dialog = new AlertDialog.Builder(MainActivity.this)                                                                                                         
                    .setMessage("آیا مایل به خروج از حساب کاربری هستید؟")
                    .setCancelable(true)
                    .setPositiveButton("بله", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                          ...

                        }

                    })
                    .setNegativeButton("خیر", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                           ...
                        }

                    }).show();

            TextView textView = (TextView) dialog.findViewById(android.R.id.message);
            textView.setTypeface(FontHelper.getIranSansTypeface(MainActivity.this));

            Button btn1 = (Button) dialog.findViewById(android.R.id.button1);
            btn1.setTypeface(FontHelper.getIranSansTypeface(MainActivity.this));

            Button btn2 = (Button) dialog.findViewById(android.R.id.button2);
            btn2.setTypeface(FontHelper.getIranSansTypeface(MainActivity.this));
person Behnoud Sherafati    schedule 04.12.2016

Чтобы достичь этого, вам нужны две вещи:

  • Чтобы создать AlertDialog через alertbuilder. Пример из официальной документации Android (http://developer.android.com/guide/topics/ui/dialogs.html):

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setMessage(R.string.dialog_fire_missiles)
           .setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   // FIRE ZE MISSILES!
               }
           })
           .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   // User cancelled the dialog
               }
           });
    // Create the AlertDialog object and return it
    return builder.create();
    
    • Установите шрифт TextView в диалоговом окне предупреждений следующим образом:

      AlertDialog dialog = builder.create();
      TextView textView = (TextView)  dialog.findViewById(android.R.id.message);
      Typeface face=Typeface.createFromAsset(getAssets(),"fonts/coolFont"); 
      textView.setTypeface(face); 
      dialog.show();
      
person DimitrisCBR    schedule 28.04.2015
comment
Я хочу отметить, что вы не можете получить значения кнопок и текстовых представлений, прежде чем показывать их, создания диалога недостаточно, чтобы получить значения, протестированные на API23. - person MeqDotNet; 20.02.2017

person    schedule
comment
Было бы неплохо, если бы вы предоставили объяснение вашего кода. - person Dave; 28.04.2015
comment
… и ссылку с указанием авторства, потому что вы скопировали и вставили из stackoverflow.com/a/13052057/2684 2012 года. . - person Martin Marconcini; 01.11.2017