Установить собственный шрифт кнопок AlertDialog - PullRequest
0 голосов
/ 15 апреля 2019

Я хочу установить пользовательский шрифт для положительных / отрицательных кнопок AlertDialog Builder.Я использую Xamarin.Android.

Я создал конструктор так:

var alert = new AlertDialog.Builder(mvxTopActivity.Activity)
                .SetCustomTitle(CreateTitle(title, mvxTopActivity))
                .SetView(CreateMessage(message, mvxTopActivity))
                .SetCancelable(false);

Я добавил положительные и отрицательные кнопки:

alert.SetPositiveButton(ok, (s, e) => { tcs.SetResult(okResult); });

alert.SetNegativeButton(cancel, (s, e) => { tcs.SetResult(cancelResult); });

Мне удалось установитьшрифт для заголовка и сообщения, но я не могу установить пользовательский шрифт для кнопок.

ОБНОВЛЕНИЕ: я пытаюсь добавить стиль после создания модального "

 alert.Show();

            var mvxTopActivity = Mvx.Resolve<IMvxAndroidCurrentTopActivity>();
            var font = Typeface.CreateFromAsset(mvxTopActivity.Activity.ApplicationContext.Assets, "fonts/Effra_Md.ttf");

            var btnYes = alert.FindViewById<Button>(Android.Resource.Id.Button1);
            btnYes.SetTypeface(font, TypefaceStyle.BoldItalic);

            var btnNo = alert.FindViewById<Button>(Resource.Id.modal_button_cancel);
            btnNo.SetTypeface(font, TypefaceStyle.Normal);

У меня нетдоступ к Button1, но у меня есть доступ к modal_button_cancel / modal_button_ok, но он не применяет такой шрифт, как этот.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2019

Это код, который я использую для установки шрифта AlertDialog's заголовка, сообщения и кнопки 1.

Typeface semibold = ResourcesCompat.getFont(this, R.font.product_bold);
Typeface regular = ResourcesCompat.getFont(this, R.font.product_regular);
AlertDialog myDialog = new AlertDialog.Builder(this).setTitle("Your title")
        .setMessage("Your message.")
        .setPositiveButton("Your button", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //your code
            }
        }).show();
int titleText = getResources().getIdentifier("alertTitle", "id", "android");
((TextView) myDialog.getWindow().findViewById(titleText)).setTypeface(semibold);
TextView dialogMessage = myDialog.getWindow().findViewById(android.R.id.message);
Button dialogButton = myDialog.getWindow().findViewById(android.R.id.button1);
dialogMessage.setTypeface(regular);
dialogButton.setTypeface(semibold);

Подтверждено, что он работает на моем Android 9.0, но не может претендовать на то, что он работает на старых API.

0 голосов
/ 16 апреля 2019

Хотите ли вы добиться этого, как на следующем скриншоте?

enter image description here

Если это так, в первую очередь вы должны создать Customlayout.axml

 <?xml version="1.0" encoding="utf-8"?>
  <RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
 <RelativeLayout
    android:layout_width="250dp"
    android:layout_height="250dp"
    android:layout_centerInParent="true"
     >

    <TextView
        android:id="@+id/dialog_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:gravity="center"
        android:text="Alert"
        android:textSize="18sp" />

    <TextView
        android:id="@+id/dialog_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/dialog_title"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp"
        android:text="This is message"
        android:textSize="14sp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/dialog_btn_cancel"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@null"
            android:text="cancle"
            android:textColor="#AAAAAA"
            android:textSize="14sp" />

        <Button
            android:id="@+id/dialog_btn_sure"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@null"
            android:text="Yes"
            android:textSize="14sp" />
    </LinearLayout>
</RelativeLayout>

</RelativeLayout >

Затем вы можете создать alertDialog, там есть код.

      //1.inflate the Customlayout
        View content = LayoutInflater.Inflate(Resource.Layout.Customlayout, null);
        //2. Getting the view elements
        TextView textView = (TextView)content.FindViewById(Resource.Id.dialog_content);
        TextView alertTitle = (TextView)content.FindViewById(Resource.Id.dialog_title);

        Button button1 = (Button)content.FindViewById(Resource.Id.dialog_btn_cancel);

        Button button2 = (Button)content.FindViewById(Resource.Id.dialog_btn_sure);


        //3. Setting font
        textView.SetTypeface(Typeface.Serif, TypefaceStyle.BoldItalic);
        alertTitle.SetTypeface(Typeface.Serif, TypefaceStyle.BoldItalic);
        button1.SetTypeface(Typeface.Serif, TypefaceStyle.BoldItalic);
        button2.SetTypeface(Typeface.Serif, TypefaceStyle.BoldItalic);

        //4.create a new alertDialog
        Android.App.AlertDialog alertDialog = new Android.App.AlertDialog.Builder(this).Create();

        //5. set the view
        alertDialog.SetView(content);

        //6. show the dialog
        alertDialog.Show(); // This should be called before looking up for elements

Вот мое демо.

https://github.com/851265601/CustomDialogDemo

...