使用LayoutFlaterCompat.setFactory的Android菜单项字体
我正在尝试更改菜单项的字体。根据,我正在使用使用LayoutFlaterCompat.setFactory的Android菜单项字体,android,android-menu,layout-inflater,Android,Android Menu,Layout Inflater,我正在尝试更改菜单项的字体。根据,我正在使用LayoutInflaterCompat.setFactory(我的项目中使用了支持库22.1.1)。我的代码如下所示: @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_income_mail, menu); mFilterMenu = menu.getItem(1).getSubMenu();
LayoutInflaterCompat.setFactory
(我的项目中使用了支持库22.1.1)。我的代码如下所示:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_income_mail, menu);
mFilterMenu = menu.getItem(1).getSubMenu();
final LayoutInflater inflaterCopy = getLayoutInflater().cloneInContext(this);
LayoutInflaterCompat.setFactory(inflaterCopy, new LayoutInflaterFactory() {
@Override
public View onCreateView(View parent, String name, Context context, AttributeSet attrs) {
// my code
}
});
return true;
}
但是方法
onCreateView(查看父对象、字符串名称、上下文上下文、属性集属性)
从未被调用。我应该更改什么?您正在使用fragment吗
如果是,则必须在“onCreateView”中调用以下方法
设置选项菜单(真)
它只是向系统确认这个片段有自己的选项菜单
这对我有用 您必须从activity onCreateView中手动调用factory onCreateView。因为活动的onCreateView在默认情况下返回null,所以如果您需要其他方面的帮助,可以这样做
@Nullable
@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {
if(name.contains("ActionMenuItemView")) {
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);
}
这将检查LayoutFlater是否可以创建视图,然后触发factory onCreateView对其进行编辑