android sherlock actionbar菜单项出错了

时间:2015-04-21 01:34:10

标签: android eclipse actionbarsherlock menuitem android-version

正如标题所暗示的那样,由于我最近在eclipse和jdk-7u76-windows-i586下安装了Android Api 22,因此我遇到了操作栏的问题。在操作之前,Bar会继续显示带有sdk 7及更高版本的图标。但是现在icon只显示sdk版本11及更高版本,我错过了什么或者我只是盲目吗?这里是菜单XML文件和屏幕截图:

<menu xmlns:android="http://schemas.android.com/apk/res/android">

<item android:id="@+id/share"
      android:icon="@drawable/ic_action_add_group"
      android:title="share info"
      android:showAsAction="ifRoom" />

1 个答案:

答案 0 :(得分:0)

好,我终于找到了答案。但奇怪的是代码用于在sdk更新之前工作:意味着这个较新版本的sdk对XML文件有很好的改进。然后,最旧版本会检测到更多错误 现在如何用sherlock动作栏菜单项解决问题?

  • 如果你想让它适用于android api 11及更高版本(Android 4.x或5.x) 只需添加这段代码:
        在 rsc / menu / 中创建一个文件,例如:menu.xml
    现在放:

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android" 
       >
    
    <item 
    android:id="@+id/send"
    android:title="@string/Send"
    android:icon="@drawable/ic_action_new_event"
    android:showAsAction="ifRoom" 
    />
    
     </menu>      
    

    并添加样本样式:在rsc / values /中:          

       <style name="AppTheme"    
      parent="android:Theme.Holo.Light.DarkActionBar"  />
    
       </resources>
    

这在您的活动中:

    @Override
    public boolean onCreateOptionsMenu(Menu menu){

    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.men, menu);


       return true;
    }
  • 如果你想让它适用于android api 7到10(Android 2.x到Android 3.x) 在课堂上使用类似这样的东西活动:

      THEME == R.style.Theme_Sherlock_Light;
    
      @Override
    
      public boolean onCreateOptionsMenu(Menu menu){
    
    
    
       boolean isLight = THEME == R.style.Theme_Sherlock_Light;
    
      menu.add(R.string.Send)
    
     .setIcon(isLight ? R.drawable.ic_action_group : 
    
        R.drawable.ic_action_person)
         .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
    
       menu.add(R.id.get)
                  .setIcon(isLight ?   
    
      R.drawable.ic_action_chat:          
       R.drawable.ic_action_chat)
           .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM |           
    
          MenuItem.SHOW_AS_ACTION_WITH_TEXT);
    
        menu.add("Refresh")
        .setIcon(isLight ? R.drawable.ic_action_time :        
    
        R.drawable.ic_action_volume_on)
         .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM |   
         MenuItem.SHOW_AS_ACTION_WITH_TEXT);
      return true;
              }
    

    要响应点击,请使用以下内容:

    @Override
     public boolean onOptionsItemSelected(MenuItem item) {
    
    
         if (item.toString()==getString(R.string.Send)) {
          Toast.makeText(MainActivity.this, "Got click: " + item,       
     Toast.LENGTH_SHORT).show();
     }
    
      return super.onOptionsItemSelected(item);
     } 
    

    并添加样本样式: src / values /

     <?xml version="1.0" encoding="utf-8"?>
    
    <resources>
    <style name="Theme.Styled"   
    
    parent="Theme.Sherlock.Light.DarkActionBar">
    
    <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
    
    <item      
    name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
         </style>
    
     <style name="Widget.Styled.ActionBar" 
    
                parent="Widget.Sherlock.Light.ActionBar.Solid.Inverse">
    
    <item name="background">@drawable/bg_striped</item>
    <item name="android:background">@drawable/bg_striped</item>
    
    <item name="backgroundSplit">@drawable/bg_striped_split</item>
    <item         
    name="android:backgroundSplit">@drawable/bg_striped_split</item>
     </style>
     </resources>