我尝试实现自定义菜单。我使用了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?
答案 0 :(得分:1)
您可以按照以下方式检查View
是否为TextView
...
if (view instanceof TextView) {
TextView tView = (TextView) view;
tView.setTypeface(Config.set_font);
tView.setTextColor(Color.RED);
}
如果视图为TextView
,那么Font
和Color
将会更改。
答案 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;
}