首页 > 系统 > Android > 正文

android 自定义Android菜单背景的代码

2019-10-24 21:06:26
字体:
来源:转载
供稿:网友
如何自定义Android菜单背景呢? 默认的情况下Android系统的菜单是白色的,下面的例子可以通过自定义的xml布局实现个性化的menu
 

 

复制代码代码如下:

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系统,这句可能根据各个厂商编译的固件来灵活处理。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表