Android 菜单项字体使用 LayoutInflaterCompat.setFactory
Android Menu item font using LayoutInflaterCompat.setFactory
我正在尝试更改菜单项的字体。根据 this answer,我正在使用 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(View parent, String name, Context context, AttributeSet attrs)
。我应该改变什么?
你在使用片段吗?
如果是,则必须在 "onCreateView"
中调用以下方法
setHasOptionsMenu(真);
它只是向系统确认此片段有自己的选项菜单。
它对我有用。
您必须从 activity onCreateView 中手动调用工厂 onCreateView。因为 activity 的 onCreateView returns 默认情况下为 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);
}
这将检查 LayoutInflater 是否可以创建视图然后触发工厂 onCreateView 来编辑它
我正在尝试更改菜单项的字体。根据 this answer,我正在使用 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(View parent, String name, Context context, AttributeSet attrs)
。我应该改变什么?
你在使用片段吗?
如果是,则必须在 "onCreateView"
中调用以下方法setHasOptionsMenu(真);
它只是向系统确认此片段有自己的选项菜单。
它对我有用。
您必须从 activity onCreateView 中手动调用工厂 onCreateView。因为 activity 的 onCreateView returns 默认情况下为 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);
}
这将检查 LayoutInflater 是否可以创建视图然后触发工厂 onCreateView 来编辑它