在Android中为菜单项设置自定义字体

时间:2014-03-24 13:33:47

标签: android menu menuitem typeface

我尝试实现自定义菜单。我使用了this问题中给出的答案。在我的代码中,名称是ExpandedMenuItem,但在所有示例中都是IconMenuItemView。那里发生了什么?我怎么能纠正这个?

这是我的代码。

    public class MyActivity extends PreferenceActivity {

         @Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.proximity_alert_menu, menu);
    getLayoutInflater().setFactory(new Factory() {

        @Override
        public View onCreateView(String name, Context context, AttributeSet attrs) {         

                        //if(name.equalsIgnoreCase("com.android.internal.view.menu.MenuItem")) {}
                        try {
                           LayoutInflater li = LayoutInflater.from(context);
                           final View view = li.createView(name, null, attrs);
                           new Handler().post(new Runnable() {
                           public void run() {
                            TextView tView = (TextView) view;
                            tView.setTypeface(Config.set_font);
                            tView.setTextColor(Color.RED);
                           }
                    });
                    return view;
                 } catch (InflateException e) {
                   e.printStackTrace();
                 } catch (ClassNotFoundException e) {
                   e.printStackTrace();
                 }
                 return null;
      }
        });
    return super.onCreateOptionsMenu(menu);
        }
    }

例外显示

      java.lang.ClassCastException:com.android.internal.view.menu.ExpandedMenuView cannot be cast to android.widget.TextView

如何将其转换为TextView?

2 个答案:

答案 0 :(得分:1)

您可以按照以下方式检查View是否为TextView ...

if (view instanceof TextView) {
    TextView tView = (TextView) view;
    tView.setTypeface(Config.set_font);
    tView.setTextColor(Color.RED);
}

如果视图为TextView,那么FontColor将会更改。

答案 1 :(得分:-4)

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);

    tf = Typeface.createFromAsset(MainActivity.this.getAssets(),
            "MuseoSansCyrl.otf");
    MenuItem i = menu.findItem(R.id.item1);
    TextView itemuser = (TextView) i.getActionView();

           Typeface tf= Typeface.createFromAsset(this.getAssets(), "MuseoSansCyrl.otf");
           itemuser.setTypeface(tf);
           itemuser.setText("Item1");
           itemuser.setBackgroundColor(Color.TRANSPARENT);
           retun true;
}