android 自定义Android菜单背景的代码
程序员文章站
2023-12-01 08:17:40
复制代码 代码如下: public class menuex extends activity { private static final string tag = "a...
复制代码 代码如下:
public class menuex extends activity {
private static final string tag = "android123";
@override public void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.main);
}
@override public boolean oncreateoptionsmenu(menu menu) {
super.oncreateoptionsmenu(menu);
menuinflater inflater = new menuinflater(getapplicationcontext());
inflater.inflate(r.menu.options_menu, menu);
setmenubackground();
return true;
}
关键代码就是重写layout类的工厂方法oncreateview,这里对比绘制的view来替换系统中的
复制代码 代码如下:
protected void setmenubackground(){
log.d(tag, "开始设置菜单的的背景");
getlayoutinflater().setfactory( new factory() {
@override public view oncreateview ( string name, context context, attributeset attrs ) {
if ( name.equalsignorecase( "com.android.internal.view.menu.iconmenuitemview" ) ) {
//上面这句android123提醒大家不能有改动,目前来看对于原生android目前这个packagename还没有变化
try {
layoutinflater f = getlayoutinflater();
final view view = f.createview( name, null, attrs ); //尝试创建我们自己布局
new handler().post( new runnable() {
public void run () {
view.setbackgroundresource( r.drawable.cwj"_bg); //设置背景为我们自定义的图片,替换cwj_bg文件即可 } } );
return view;
} catch (
inflateexception e ) {}
catch (
classnotfoundexception e ) {}
}
return null;
} }); }}
上面的例子可以轻松的替换当前activity的menu背景颜色,这里android开发网再次提醒大家上面加粗的包名不能随意改动,如果非原生的android系统,这句可能根据各个厂商编译的固件来灵活处理。