我们如何使用样式自定义警报对话框的字体?

Posted

技术标签:

【中文标题】我们如何使用样式自定义警报对话框的字体?【英文标题】:How can we customize the fonts of an alert dialog by using styles? 【发布时间】:2019-03-15 00:48:24 【问题描述】:

我们如何使用样式自定义 android alert 对话框的字体

我使用setTypeFace() 方法找到了许多解决方案。但我想使用样式自定义整个应用程序警报对话框。

我想更改标题、消息、按钮字体。

我可以使用以下代码更改消息字体。

我的警报对话框样式声明

<style name="MyAlertDialougeTheme" parent="@android:style/Theme.Material.Light.Dialog.Alert">
    <item name="android:textAppearanceSmall">@style/MyTextAppearance</item>
    <item name="android:textAppearanceLarge">@style/MyTextAppearance</item>
    <item name="android:textAppearanceMedium">@style/MyTextAppearance</item>

</style>

显示警告对话框的 Java 代码

 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this,
                R.style.MyAlertDialougeTheme);
        builder.setTitle("Warning")
                .setMessage("My message here")
                .setPositiveButton("yes", null)
                .setNegativeButton("no", null)
                .show();

在屏幕下方查看

请帮助我使用样式更改标题和按钮字体,并且我想自定义负和正按钮的字体颜色。

提前感谢您的时间和帮助!

【问题讨论】:

您需要为此使用自定义对话框。一会儿分享代码。 如果您认为这是最佳解决方案,您可以接受答案。快乐编码:) @Anju Mohan 检查我的答案! 【参考方案1】:

首先创建一个CustomDialog 类,它将扩展Android 的Dialog 类。以下是相同的代码 -

public class CustomDialog extends Dialog implements
        View.OnClickListener 

    Activity context;
    private Button mBtnOK;

    public CustomDialog(Activity context) 
        super(context);
        this.context = context;
    

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.custom_popup_dialog_box);
        mBtnOK = findViewById(R.id.btn_ok);
        mBtnOK.setOnClickListener(this);
    

    @Override
    public void onClick(View v) 
        switch (v.getId()) 
            case R.id.btn_ok:
                dismiss();
                break;
            default:
                break;
        
        dismiss();
    

现在,只要您想要一个对话框实例,您只需创建 CustomDialog 类的实例,这里 custom_popup_dialog_box 的 xml 将具有所有自定义项,例如字体系列、文本大小,颜色等。您只需要在 xml 中或以编程方式设置属性。希望你找到解决办法。 如果有更多信息,请告诉我。谢谢。

【讨论】:

【参考方案2】:

这就是您要查找的内容: https://***.com/a/10741161/10126669

所有你需要做的就是把你的字体放在资产中并改变

SpannableStringBuilder SS = new SpannableStringBuilder("My message here");
SS.setSpan (new CustomTypefaceSpan("", font2), 0, 4,Spanned.SPAN_EXCLUSIVE_INCLUSIVE);

匹配 SpannableStringBuilder 的大小

SS.setSpan (new CustomTypefaceSpan("", font2), 0, SS.length(),Spanned.SPAN_EXCLUSIVE_INCLUSIVE);

然后将 SpannableStringBuilder 添加到对话框中

.setMessage(SS)

【讨论】:

【参考方案3】:

显示警报对话框代码的 Java 代码替换此代码

final Dialog dialog = new Dialog(activity);
            dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
            dialog.setCancelable(false);
            dialog.setContentView(R.layout.lay_alertdialog);  


     Objects.requireNonNull(dialog.getWindow()).setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);


// view initialize

//sample 
    Button dialogButton = dialog.findViewById(R.id.btn_ok);
    dialogButton.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 

            dialog.dismiss();


        
    );
//


    dialog.show();

布局保存lay_alertdialog

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:layout_marginTop="24dp"
    android:gravity="center"
    android:orientation="vertical">


    <TextView
        android:layout_
        android:layout_
        android:layout_margin="8dp"
        android:gravity="start"
        android:padding="4dp"
        android:text="Warning"
        android:textSize="18sp"
        android:textStyle="bold" />

    <TextView
        android:layout_
        android:layout_
        android:layout_margin="8dp"
        android:gravity="start"
        android:padding="4dp"
        android:text="your message"
        android:textSize="16sp"
        android:textStyle="bold" />


    <LinearLayout
        android:layout_
        android:layout_
        android:gravity="end"
        android:orientation="horizontal">

        <TextView
            android:layout_
            android:layout_
            android:layout_gravity="end"
            android:layout_margin="8dp"
            android:text="NO"
            android:textColor="#911907"
            android:textSize="18sp" />

        <TextView
            android:layout_
            android:layout_
            android:layout_gravity="end"
            android:layout_margin="8dp"
            android:text="YES"
            android:textColor="#00a851
            android:textSize="18sp" />
    </LinearLayout>

</LinearLayout>

【讨论】:

以上是关于我们如何使用样式自定义警报对话框的字体?的主要内容,如果未能解决你的问题,请参考以下文章

自定义警报对话框android

请问怎么在excel单元格格式添加自定义

如何在广播接收器中显示自定义警报对话框?

如果可能的话,如何使用 css 在浏览器中自定义 Web 推送通知的权限警报消息样式?

DEVC++自定义背景色及代码颜色后如何恢复

多个字体到单个自定义 TextView