使用LayoutInflaterCompat.setFactory的Android菜单项字体

时间:2015-07-09 13:35:46

标签: android android-menu layout-inflater

我试图更改菜单项的字体。根据{{​​3}},我使用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)。我应该改变什么?

2 个答案:

答案 0 :(得分:3)

您必须在活动onCreateView中手动调用工厂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);
}

将检查LayoutInflater是否可以创建视图然后触发工厂onCreateView进行编辑

答案 1 :(得分:-1)

你正在使用片段吗?

如果你那么你必须在“onCreateView”中调用以下方法

setHasOptionsMenu(真);

它只是向系统承认这个片段有自己的选项菜单。

它对我有用。