android 中的 SearchView 自定义字体

SearchView custom font in android

我一直在尝试将自定义字体设置为 android.support.v7.widget.SearchView 查询提示,在 View.I 中输入的文本确实尝试从 assests[=17] 中动态设置字体=] 通过创建一个 TypeFace 对象添加到 searchView,但问题是 "SearchView doesn't contain a setTypeface(Typeface tf) method." 我确实尝试了自定义 SearchView class 但找不到。

 private void setFont(String font1, String font2, String font3)
 {
        Typeface tf = null;

        tf = UiUtil.changeFont(MainActivity.this, font1);
        btn1.setTypeface(tf);

        tf = UiUtil.changeFont(MainActivity.this, font2);
        btn2.setTypeface(tf);

        tf = UiUtil.changeFont(MainActivity.this, font3);
        btn3.setTypeface(tf);

         tf = UiUtil.changeFont(MainActivity.this, font3);
        // no set typeface method..

    }

这里的解决方法是先获取 searchView 的 textView,然后更改 textView 的字体:

 TextView searchText = (TextView)
 searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
 Typeface myCustomFont = Typeface.createFromAsset(getAssets(),"fonts/myFont.ttf");
 searchText.setTypeface(myCustomFont);

或者,如果您没有使用 appcompatv7:

 int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
 TextView searchText = (TextView) searchView.findViewById(id);

然后照常设置字体。

要从 xml 字体文件夹以编程方式更改搜索视图中的字体系列:

Typeface tf = ResourcesCompat.getFont(dis,R.font.montserrat_regular);
TextView searchText = (TextView)search_view.findViewById(android.support.v7.appcompat.R.id.search_src_text);
searchText.setTypeface(tf);

对于 Kotlin 和 Androidx

val face: Typeface = Typeface.createFromAsset(context?.assets, "font.otf")
val searchText = searchView.findViewById<View>(androidx.appcompat.R.id.search_src_text) as TextView
searchText.typeface = face

感谢之前的所有回答,我找到了我的最佳解决方案我希望你也能找到最干净的答案。

这适用于包内的 SearchView class android.widget

首先,创建如下扩展:

import android.graphics.Typeface
import android.widget.SearchView
import android.widget.TextView

fun SearchView.setTypeFace(typeface: Typeface?) {
    val id = context.resources.getIdentifier("android:id/search_src_text", null, null)
    val searchText = searchView.findViewById(id) as TextView
    searchText.typeface = typeface
}

然后在任何你喜欢的地方使用这个扩展:

val typeface = ResourcesCompat.getFont(requireContext(), R.font.sans)
searchView.setTypeFace(typeface)

您可能希望从资产或其他方式获取字体。其他都是一样的