25

我想更改警报对话框标题的字体。

谁能告诉我该怎么做?

4

14 回答 14

30

我找到了一个简单的解决方案..

起初,我将警报框的标题设置为

builder.setTitle("My Title");

所以我无法更改它的字体..

然后对我有用的是..

我创建了一个简单的 TextView :

TextView tv2;

并设置我想要的 TextView 的所有属性......

然后我换了我的

builder.setTitle("My Title");

符合

builder.setCustomTitle(tv2);

现在我可以通过更改属性来更改Title Color等。Fonttv2's

于 2013-06-04T17:15:45.510 回答
17

没有答案提供了一种更改标题字体的方法AlertDialog。这是我所做的:

创建以下类:

public static class TypefaceSpan extends MetricAffectingSpan {

  private final Typeface typeface;

  public TypefaceSpan(Typeface typeface) {
    this.typeface = typeface;
  }

  @Override public void updateDrawState(TextPaint tp) {
    tp.setTypeface(typeface);
    tp.setFlags(tp.getFlags() | Paint.SUBPIXEL_TEXT_FLAG);
  }

  @Override public void updateMeasureState(TextPaint p) {
    p.setTypeface(typeface);
    p.setFlags(p.getFlags() | Paint.SUBPIXEL_TEXT_FLAG);
  }

}

添加以下实用程序方法:

/**
 * <p>Return spannable string with applied typeface in certain style</p>
 *
 * http://stackoverflow.com/questions/8607707/how-to-set-a-custom-font-in-the-actionbar-title
 *
 * @param typeface
 *     The typeface to set to the {@link SpannableString}
 * @param string
 *     the string to place in the span
 * @return SpannableString that can be used in TextView.setText() method
 */
public static SpannableString typeface(Typeface typeface, CharSequence string) {
  SpannableString s = new SpannableString(string);
  s.setSpan(new TypefaceSpan(typeface), 0, s.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  return s;
}

最后,在创建时设置字体AlertDialog

Typeface typeface = Typeface.createFromAsset(getActivity().getAssets(), "fonts/your_font.ttf");
new AlertDialog.Builder(getActivity())
    .setTitle(FontUtils.typeface(typeface, "The title"))
    /* .. */
    .create();
于 2016-04-21T11:13:02.503 回答
9

只需使用以下行来获取对话框标题的标识符:

int dialogTitle = mCtnx.getResources().getIdentifier( "alertTitle", "id", "android" );

将此用于 android.support.v7.app.AlertDialog

TextView 标题= (TextView)alertDialog.findViewById(R.id.alertTitle);

于 2014-05-07T07:17:13.947 回答
2

这样做:

Dialog dialog = new Dialog(ActivityName.this);
dialog.setContentView(R.layout.dialog_name);
dialog.setCancelable(true);
dialog.findViewById(R.id.text).setTypeface(Typeface.createFromAsset(getAssets(), "font.ttf"));

将你的 font.ttf 文件放在 assets 文件夹中并像上面一样使用它

于 2013-06-04T10:21:01.067 回答
2

您必须充气或自定义并创建样式并应用于 AlertDialog

下面介绍如何扩展布局并将其应用于 AlertDialog

LayoutInflater li = LayoutInflater.from(ctx);
View view = li.inflate(R.layout.formatted_dialog, null);

AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
builder.setTitle("Formatted");
builder.setView(view);

定义您指定的布局中所需的所有格式和样式。

您可以使用膨胀视图访问布局中定义的特定文本视图,即

LayoutInflater li = LayoutInflater.from(ctx);
View view = li.inflate(R.layout.formatted_dialog, null);
TextView label=(TextView)view.findViewById(R.id.i_am_from_formatted_layout_lable);

保存为 res/layout/link.xml 的示例布局:

在您onCreate()或您想要调用 AlertDialog 的地点或时间

LayoutInflater li = LayoutInflater.from(this);
View view = li.inflate(R.layout.link, null);

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Formatted");
builder.setView(view).create().show();
TextView text=(TextView) findViewById(R.id.text);

this如果您从其他方法调用,请替换为上下文对象。

于 2013-06-04T09:17:41.890 回答
2

您应该从布局中设置自定义视图,而不是设置警报对话框的文本。在你这样做之前,修改你的视图的字体。试试这个例子

TextView content = new TextView(this);
     content.setText("on another font");
     content.setTypeface(Typeface.SANS_SERIF);

//使用第一个示例,如果您使用的是 xml 生成的视图

 AlertDialog.Builder myalert = new AlertDialog.Builder(this);
     myalert.setTitle("Your title");
     myalert.setView(content);
     myalert.setNeutralButton("Close dialog", null);
     myalert.setCancelable(true);
     myalert.show();

xml 代码...替换 xml 中的字体

<TextView
    android:id="@+id/yourid"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="8dp"
    android:text="your content" />
于 2013-06-04T11:07:42.743 回答
1

包括此布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">

  <TextView
   android:id="@+id/text"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="Hello_World"
   android:textColorLink="#FF00FF"
  />

</LinearLayout>

然后在 Ur Activity 中使用它

Dialog dialog = new Dialog(ActivityName.this);
dialog.setContentView(R.layout.dialog_name);
dialog.setCancelable(true);
dialog.findViewById(R.id.text).setTypeface(Typeface.createFromAsset(getAssets(), "font.ttf"));


另一种方式这个

于 2013-06-04T10:16:03.463 回答
1

您也可以尝试 Spannable。

            SpannableString s = new SpannableString("My App");
            s.setSpan(new TypefaceSpan(this, "font.otf"), 0, s.length(),
                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            s.setSpan(new RelativeSizeSpan(1.3f), 0,s.length(), 0);
            builder.setTitle(s)
于 2017-12-04T19:04:44.327 回答
0

AlertDialog您可以按照以下代码块更改外观:

AlertDialog dialog = new AlertDialog.Builder(this).setMessage("Message").show();
TextView textView = (TextView) dialog.findViewById(android.R.id.message);
textView.setTextSize(10);//to change font size

//to change font family
Typeface face = Typeface.createFromAsset(getAssets(),"font/fontFileName.ttf");
textView.setTypeface(face);

将字体文件放在资产文件夹中。在我的例子中,我创建了一个名为 font 的子目录。

你也可以检查这个问题有一个接受的答案。

于 2013-06-04T10:07:42.557 回答
0

使用支持库 26 中的此方法。

ResourcesCompat.getFont(context, R.font.<YOUR_FONT>);

在此处输入图像描述

阅读更多:来源

于 2019-06-10T07:00:08.167 回答
0

你可以添加这个

TextView textViewt = (TextView) alertDialog.findViewById(android.R.id.title);
textViewt.setTypeface(your font typeface);

行后

alertDialog.show();
于 2017-08-10T10:44:41.900 回答
0

有一种简单的方法可以为对话框的标题设置新的自定义视图。我们可以定义每个自定义视图,例如 TextView 并为其添加一些自定义属性,最后将其设置为对话框的标题,如下所示:

 AlertDialog.Builder builder = new AlertDialog.Builder(OrderItemsActivity.this);



        TextView title_of_dialog = new TextView(getApplicationContext());
        title_of_dialog.setHeight(50);
        title_of_dialog.setBackgroundColor(Color.RED);
        title_of_dialog.setText("Custom title");
        title_of_dialog.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15);
        title_of_dialog.setTextColor(Color.WHITE);
        title_of_dialog.setGravity(Gravity.CENTER);

        builder.setCustomTitle(title_of_dialog);
        builder.create().show();

在这里,我定义了一个动态 TextView 并为其设置了一些属性。最后,我使用“setCustomTitle()”函数将其设置为对话框的标题。

于 2018-03-19T10:55:07.813 回答
-1

尝试为对话框设置主题。像这样更改字体属性:

<style name="CustomDialog" parent="android:Theme.Dialog">
    <item name="android:typeface">serif</item>
</style>

虽然这会改变对话框中所有文本视图的字体。 所以请确保 TextViews 设置为正确的字体

于 2013-06-04T09:38:44.667 回答
-1
TextView tv_message = new TextView(this);

                Typeface typeface = Typeface.createFromAsset(
                        getAssets(),
                        "fonts/OpenSans-Semibold.ttf"
                );


                // Set the text view layout parameters
                tv_message.setLayoutParams(
                        new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
                );

                // Set message text color
                tv_message.setTextColor(Color.RED);

                // Set message gravity/text align
                tv_message.setGravity(Gravity.START);

                // Set message text size
                tv_message.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);

                // Set message custom font
                tv_message.setTypeface(typeface);

                // Set message background color
                tv_message.setBackgroundColor(Color.YELLOW);

                // Set message text padding
                tv_message.setPadding(15, 25, 15, 15);

                tv_message.setText("Are you sure?");
                tv_message.setTextColor(Color.BLACK);
于 2018-02-01T05:56:38.793 回答