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

3

我尝试实现自定义菜单,使用了这个问题中给出的答案。在我的代码中,名称是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中?

你试图将苹果强制转换成橙子。为了将 ExpandedMenuView 成功转换为 TextViewExpandedMenuView 必须扩展 TextView,但它并没有。 - Tadej
是的,这就是问题所在。我该如何解决?我的意思是获取任何可以转换为TextViewView作为name?你知道我为什么会收到这个ExpandedMenuView吗? - Kelum Deshapriya
2个回答

1
您可以按照以下方式检查View是否为TextView...
if (view instanceof TextView) {
    TextView tView = (TextView) view;
    tView.setTypeface(Config.set_font);
    tView.setTextColor(Color.RED);
}

如果视图是TextView,那么FontColor将会被改变。

它不会返回为“TextView”。你知道如何接收“TextView”吗? - Kelum Deshapriya

-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;
}

尽管这个代码块可能回答了问题,但最好能够提供一点为什么它这样做的解释。 - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接