appcompat SeachView Widget的自定义字体

时间:2015-05-05 13:26:57

标签: android android-appcompat

我遇到以下问题:

我为所有TextViews,Buttons,EditTexts等使用自定义字体。

Typeface myTypeface = Typeface.createFromAsset(getContext().getAssets(), "fonts/" + fontName);
setTypeface(myTypeface);

唯一没有自定义字体的View是SearchView Widget( android.support.v7.widget.SearchView ),它通过xml添加到菜单中。

menu.xml文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
      xmlns:android="http://schemas.android.com/apk/res/android">
      <item android:id="@+id/menu_item_message_search"
          android:title="@string/search_placeholder"
          android:icon="@android:drawable/ic_menu_search"
          app:showAsAction="ifRoom|collapseActionView"
          app:actionViewClass="android.support.v7.widget.SearchView" />
</menu>

知道如何在此视图中设置自定义字体吗?

谢谢:)

2 个答案:

答案 0 :(得分:2)

首先你需要找到视图,

SearchView sv = (SearchView) menu.findItem(R.id. menu_item_message_search);

在此代码中,虽然 findItem 工作,但我不确定它是否会转换为SearchView。因为我添加的菜单不是用xml。

之后,您可以通过此代码从SearchView中找到 SearchAutoComplete

SearchView.SearchAutoComplete searchAutoComplete = (SearchView.SearchAutoComplete) sv.findViewById(android.support.v7.appcompat.R.id.search_src_text);

然后,您可以为 searchAutoComplete 设置字体。

searchAutoComplete.setTypeface(typeface)
祝你好运,我希望这会对你有所帮助。

答案 1 :(得分:0)

我正在使用appcompat 22.1.0。查看android.support.v7.widget.SearchView类的源代码,文本字段是静态嵌套类SearchAutoCompletewhich relies on autoCompleteTextViewStyle。在主题中覆盖它将允许您更改字体系列。

<强> styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light">
    ...
    <item name="android:autoCompleteTextViewStyle">@style/AutoCompleteTextView</item>
</style>

<style name="AutoCompleteTextView" parent="Widget.AppCompat.Light.AutoCompleteTextView">
    ...
    <item name="android:textAppearance">@style/AutoCompleteTextViewTextAppearance</item>
</style>

<style name="AutoCompleteTextViewTextAppearance" parent="TextAppearance.AppCompat.Medium.Inverse">
    <item name="android:fontFamily">sans-serif-thin</item>
</style>

请注意,android:fontFamily仅适用于API 16。