2013-06-03 214 views
0

我已经做了我的选项菜单,但它显示像一个列表视图,但我需要风格像按钮矩形。如何更改选项菜单样式

我的选项菜单 enter image description here

我需要的选项菜单像这样 enter image description here

如何改变选项菜单风格?

问候,

+2

API级别14发布后,不鼓励旧的选项菜单,您不应尝试模拟或使用旧的选项菜单。 –

回答

0

这是我如何做:

public boolean onCreateOptionsMenu(Menu menu) 
     { 
      CambiarFondoMenuInflater(); 
      return Menus.CrearMenus(contexto,menu, TipoMenu.PRINCIPAL); 
     } 

CambiarFondoMenuInflater()方法:

protected void CambiarFondoMenuInflater() 
    { 
     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; 
       View view = null; 

       if (IconMenuItemView_class == null) 
       { 
        try 
        { 
         IconMenuItemView_class = getClassLoader().loadClass(name); 
        } 
        catch (ClassNotFoundException e) 
        { 

         return null; 
        } 
       } 
       if (IconMenuItemView_class == null) 
        return null; 

       if (IconMenuItemView_constructor == null) 
       { 
        try 
        { 
         IconMenuItemView_constructor = 
         IconMenuItemView_class.getConstructor(standard_inflater_constructor_signature); 
        } 
        catch (SecurityException e) 
        { 
         return null; 
        } 
        catch (NoSuchMethodException e) 
        { 
         return null; 
        } 
       } 
       if (IconMenuItemView_constructor == null) 
        return null; 

       try 
       { 
        Object[] args = new Object[] { context, attrs }; 
        view = (View)(IconMenuItemView_constructor.newInstance(args)); 
       } 
       catch (IllegalArgumentException e) 
       { 
        return null; 
       } 
       catch (InstantiationException e) 
       { 
        return null; 
       } 
       catch (IllegalAccessException e) 
       { 
        return null; 
       } 
       catch (InvocationTargetException e) 
       { 
        return null; 
       } 
       if (null == view) 
        return null; 


       final View v = view; 
       new Handler().post(new Runnable() 
       { 
        public void run() 
        { 
         v.setBackgroundColor(Color.BLACK); 

         try 
         { 
          // Here you can change whatever you want :) 
          TextView tv = (TextView)v; 
          tv.setTextColor(Color.WHITE); 
         } 
         catch (ClassCastException e) 
         { 
          // Don't set TextView attributes 
         } 
        } 
       }); 

       return view; 
      } 
     }); 
    } 

此信息是从这个网站上后服用。我搜索了它,但是找不到它,所以我让我的代码在这里。如果任何人都可以参考它,我会非常感激。

0

只删除文件夹中的值-V11,值-V14等, 不要删除默认值文件夹。