这就是我解决这个问题的方法
步骤1:创建一个全局Factory变量并在onCreate()中初始化,如下所示,
mFactory = new LayoutInflater.Factory() {
@Override
public View onCreateView(String name, final Context context, AttributeSet attrs) {
try {
LayoutInflater li = LayoutInflater.from(context);
final View view = li.createView(name, null, attrs);
new Handler().post(new Runnable() {
@Override
public void run() {
((TextView) view.findViewById(R.id.title)).setTypeface("custom_typeface");
}
});
return view;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
};
第 2 步:覆盖AppCompatActivity 中的 onCreateView() 方法。
请记住,有 2 个具有不同签名的 oncreate() 方法。
public View onCreateView (String name, Context context, AttributeSet attrs) - 适用于 pre HONEYCOMB 应用程序
public View onCreateView (View Parent, String name, Context context, AttributeSet attrs) - 在 API 11 中添加。
onCreateView的实现如下,
@Override
public View onCreateView(View parent, String name, Context context, AttributeSet attrs) {
if(name.contains("android.support.v7.view.menu.ListMenuItemView")) {
LayoutInflater li = LayoutInflater.from(context);
View view = null;
try {
view = li.createView(name, null, attrs);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
if (view != null) {
if(mFactory != null) {
view = mFactory.onCreateView(name,context,attrs);
}
return view;
}
}
return super.onCreateView(name, context, attrs);
}
Note:
(1)我用过android.support.v7.view.menu.ListMenuItemView http://androidxref.com/6.0.1_r10/xref/frameworks/support/v7/appcompat/src/android/support/v7/internal/view/menu/ListMenuItemView.java代替com.android.internal.view.menu.IconMenuItemView http://androidxref.com/6.0.1_r10/xref/frameworks/base/core/java/com/android/internal/view/menu/IconMenuItemView.java因为我正在使用 AppCompat 支持库。
(2)由于我已经在 onCreate() 中初始化了一个 Factory 对象,因此我从 onCreateOptionsMenu() 中删除了代码段(发布在我的问题中)。所以它只包含这部分,
getMenuInflater().inflate(R.menu.my_menu, menu);
return true;
参考 :
如何设置选项菜单的字体? https://stackoverflow.com/a/11376591/1134412
使用 LayoutInflaterCompat.setFactory 的 Android 菜单项字体 https://stackoverflow.com/questions/31319161/android-menu-item-font-using-layoutinflatercompat-setfactory