通过资产字体更改PreferenceFragment字体

时间:2013-12-11 10:47:52

标签: android android-fragments customization android-preferences

为了在PreferenceFragment中为每个Preference设置自定义字体,我必须为每个偏好设置类型(CustomSwitchPreferenceCustomEditTextPreference,{{1}编写一个新的自定义类}},....)并在CustomListPreference方法中设置其字体。

它有效,但这是最好的解决方案吗?没有更短的一个?

onBindView

有没有办法更改@Override public void onBindView(View view){ super.onBindView(view); TextView title = (TextView) view.findViewById(android.R.id.title); TextView summary = (TextView) view.findViewById(android.R.id.summary); Utils.setFont(context, title, customfont); Utils.setFont(context, summary, customfont); } public class Utils{ public static boolean setFont(Context context, TextView tv, String fontAssetName) { Typeface font = Typeface.createFromAsset(context.getResources().getAssets(), fontAssetName); if (font != null) { tv.setTypeface(font); return true; } return false; } } 所有细分的字体,包括对话框?

2 个答案:

答案 0 :(得分:0)

你试过这个吗?

Custom fonts in Android the easy way ...

听起来很有希望。

答案 1 :(得分:0)

在您的styles.xml中,添加以下样式:

<style name="PreferenceTheme" parent="@style/AppTheme">
    <item name="android:fontFamily">@font/lato</item>
    <item name="fontFamily">@font/lato</item>
</style>

然后,在SettingsFragment.java中,覆盖onCreateView():

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = super.onCreateView(inflater, container, savedInstanceState);
    container.getContext().setTheme(R.style.PreferenceTheme);
    return view;
}

通常可以解决问题。如果没有,请将样式添加到AndroidManifest.xml:

<application
    ...>
    <activity.../>
    <activity
        android:name=".SettingsActivity"
        android:theme="R.style.PreferenceTheme"/>
    ...
</application>

我得到一个整洁的结果: Preferences with custom font - "Lato"