更改底部菜单项的背景
问题描述:
如何更改出现在底部的菜单项的背景,点击更改底部菜单项的背景
我使用ActionBarSherlock和顶部动作条有一个设备菜单按钮后,蓝色背景。以为这将是底部菜单的背景。但它的白色。看起来像默认。所以,该图标在白色背景上看起来不太好。我如何将其更改为蓝色。
我尝试这样:
<item name="android:panelBackground">@drawable/blue</item>
但没有奏效。
谢谢。
答
我有类似的要求,我发现这个工作解决方案。使用以下
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
addOptionsMenuHackerInflaterFactory();
return true;
}
@SuppressWarnings("rawtypes")
static Class IconMenuItemView_class = null;
@SuppressWarnings("rawtypes")
static Constructor IconMenuItemView_constructor = null;
// standard signature of constructor expected by inflater of all View classes
@SuppressWarnings("rawtypes")
private static final Class[] standard_inflater_constructor_signature =
new Class[] { Context.class, AttributeSet.class };
protected void addOptionsMenuHackerInflaterFactory()
{
final LayoutInflater infl = getLayoutInflater();
infl.setFactory(new Factory()
{
public View onCreateView(final String name,
final Context context,
final AttributeSet attrs)
{
if (!name.equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView"))
return null; // use normal inflater
View view = null;
if (IconMenuItemView_class == null)
{
try
{
IconMenuItemView_class = getClassLoader().loadClass(name);
}
catch (ClassNotFoundException e)
{
// this OS does not have IconMenuItemView - fail gracefully
return null; // hack failed: use normal inflater
}
}
if (IconMenuItemView_class == null)
return null; // hack failed: use normal inflater
if (IconMenuItemView_constructor == null)
{
try
{
IconMenuItemView_constructor =
IconMenuItemView_class.getConstructor(standard_inflater_constructor_signature);
}
catch (SecurityException e)
{
return null; // hack failed: use normal inflater
}
catch (NoSuchMethodException e)
{
return null; // hack failed: use normal inflater
}
}
if (IconMenuItemView_constructor == null)
return null; // hack failed: use normal inflater
try
{
Object[] args = new Object[] { context, attrs };
view = (View)(IconMenuItemView_constructor.newInstance(args));
}
catch (IllegalArgumentException e)
{
return null; // hack failed: use normal inflater
}
catch (InstantiationException e)
{
return null; // hack failed: use normal inflater
}
catch (IllegalAccessException e)
{
return null; // hack failed: use normal inflater
}
catch (InvocationTargetException e)
{
return null; // hack failed: use normal inflater
}
if (null == view) // in theory handled above, but be safe...
return null; // hack failed: use normal inflater
// apply our own View settings after we get back to runloop
// - android will overwrite almost any setting we make now
final View v = view;
new Handler().post(new Runnable()
{
public void run()
{
v.setBackgroundDrawable(getResources().getDrawable(R.drawable.menubuttonselector));
// here use your own selector drawable
try
{
// in Android <= 3.2, IconMenuItemView implemented with TextView
// guard against possible future change in implementation
TextView tv = (TextView)v;
tv.setTextColor(Color.WHITE);
}
catch (ClassCastException e)
{
// hack failed: do not set TextView attributes
}
}
});
return view;
}
});
}
注意:
这是一个黑客的解决方案。当我需要它时,我无法给予足够的时间来查找是否有任何副作用。但它完美地服务了我。希望它会对你有所帮助
+0
什么是IconMenuItemView_constructor? standard_inflater_constructor_signature来自哪里? – 2015-09-02 09:11:05
你想改变你的应用程序菜单项的背景>?或整个系统?只有改变你的应用程序才行? – stinepike 2013-03-14 05:55:03
是的,只为我的应用程序。 [ABS主题生成器](http://jgilfelt.github.com/android-actionbarstylegenerator/#name=example&compat=sherlock&theme=light_dark&actionbarstyle=solid&backColor=f44%2C100&secondaryColor=555555%2C100&tertiaryColor=3F3F3F%2C100&accentColor=33B5E5%2C100&cabBackColor=002E3E%2C100&cabHighlightColor = 33B5E5%2C100):这里相同的颜色用于顶部和底部的操作栏。底部的操作栏是否与我通过点击设备菜单按钮获得的菜单项有所不同? – 2013-03-14 06:03:44