如何在 ListView 和 AlertDialog 中设置自定义字体?

Posted

技术标签:

【中文标题】如何在 ListView 和 AlertDialog 中设置自定义字体?【英文标题】:How to set custom font in ListView and AlertDialog? 【发布时间】:2020-01-08 22:14:53 【问题描述】:

我创建了 ListView,当我单击列表项时,它将打开带有 NegativeButton 的 AlertDialog 消息。这些工作完美。现在,我想将自定义字体设置为列表视图项和 AlertDialog 的标题、消息和 NegativeButton 的字体。即使我尝试了自定义字体库,但没有得到预期的输出。下面附上我尝试过的代码。 请问谁能告诉我怎么回事?

public class NewActivity extends AppCompatActivity 

ListView listView;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_new);

    Calligrapher calligrapher = new Calligrapher(this);
    calligrapher.setFont(this, "Acme-Regular.ttf", true);

    listView = findViewById(R.id.list1);
    final ArrayList<String> concept = new ArrayList<String>();
    concept.add("Who is the captain of Indian Cricket Team?");
    concept.add("When we are celebrating Teacher's Day?");
    concept.add("When we are celebrating Women's Day?");

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
android.R.layout.simple_list_item_1, concept);
    listView.setAdapter(adapter);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() 
        @SuppressLint("ResourceType")
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) 
            AlertDialog.Builder adb = new AlertDialog.Builder(NewActivity.this);
            switch (i)
            

                case 0:
                    adb.setTitle(concept.get(i));
                    adb.setMessage("Virat Kholi");
                    adb.setNegativeButton("Close", null);
                    adb.show();
                    break;

                case 1:
                    adb.setTitle(concept.get(i));
                    adb.setMessage("September 5");
                    adb.setNegativeButton("Close", null);
                    adb.show();
                    break;

                case 2:
                    adb.setTitle(concept.get(i));
                    adb.setMessage("March 8");
                    Typeface customTypeOne = Typeface.createFromAsset(getAssets(), "Acme-Regular.ttf");
                    adb.setTypeface(customTypeOne);
                    adb.setNegativeButton("Close", null);
                    adb.show();
                    break;
   
  
 );
 

xml文件

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
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_
android:layout_
tools:context=".NewActivity">

<ListView
    android:id="@+id/list1"
    android:layout_
    android:layout_
    tools:layout_editor_absoluteX="8dp"
    tools:layout_editor_absoluteY="8dp"
    android:fontFamily="assets/Acme-Regular.ttf"
    tools:ignore="MissingConstraints" />


</android.support.constraint.ConstraintLayout>

【问题讨论】:

使用这个库:github.com/InflationX/Calligraphy 见***.com/a/42976600/6478047 【参考方案1】:

替换

 android:fontFamily="assets/Acme-Regular.ttf"

https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml

 android:fontFamily="@font/Acme-Regular.ttf"

【讨论】:

【参考方案2】:

您可以通过编程方式使用字体设置字体

    Typeface custom_font = Typeface.createFromAsset(getAssets(), "fonts/font name.ttf");

     textview.setTypeface(custom_font);

【讨论】:

【参考方案3】:

有两种方法可以更改 textview 字体系列

xml文件中的第一个:

默认情况下,android studio 字体保存在 res 的字体文件夹中。如果你想使用这些字体,请添加这一行 app:fontFamily="@font/alegreya_bold"

在java中第二或在代码中实用

 TextView textView= view.findViewById(R.id.textview);
    textView.setTextColor(Color.BLACK);
    textView.setTextSize(13);
    Typeface avnier_roman = Typeface.createFromAsset(context.getAssets(), "AvenirLTStd-Roman.otf");
    textView.setTypeface(avnier_roman); 

【讨论】:

【参考方案4】:

先生,您只是正确地使用了自定义字体名称的命名约定。因为android不允许资产/可绘制大写字母。

【讨论】:

以上是关于如何在 ListView 和 AlertDialog 中设置自定义字体?的主要内容,如果未能解决你的问题,请参考以下文章

如何在一个 Activity 中显示 listview 和 webview?

如何使用 getFilter() 和 ListAdapter 过滤 ListView?

如何使用ListView

如何在 ListView 和 AlertDialog 中设置自定义字体?

如何在 Instagram 和 Vine 等 ListView 中播放视频?

如何通过单击两个按钮在单个活动中在 RecyclerView 和 ListView 之间切换?