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)
您可能希望从资产或其他方式获取字体。其他都是一样的
我一直在尝试将自定义字体设置为 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)
您可能希望从资产或其他方式获取字体。其他都是一样的