2014-11-08 5 views
4

У меня проблема с стилем Custom CheckBox Menu Item ActionBar. Я реализовал, но это не стиль.Пользовательский элемент меню CheckBox ActionBar не работает

enter image description here

Я хочу изменить с ресурсом этот

если флажок

enter image description here

если флажок не установлен

enter image description here

это пункт мое меню Действие Bar.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context="com.tracking.bus.maps.SingleViewMapsActivity" > 

     <item 
     android:id="@+id/actionbar_alarm" 
     android:title="@string/actionbar_alarm" 
     app:actionViewClass="android.widget.CheckBox" 
     app:showAsAction="ifRoom"/> 

     <item 
     android:id="@+id/actionbar_interval" 
     android:title="@string/actionbar_interval" 
     app:actionViewClass="android.widget.Spinner" 
     app:showAsAction="ifRoom"/> 

     <item 
     android:id="@+id/actionbar_log_track" 
     android:title="@string/actionbar_log_track" 
     app:showAsAction="never"/> 
</menu> 

стиле Action Bar

<style name="Theme.Myab" parent="@style/Theme.AppCompat.Light.DarkActionBar"> 
     <item name="actionBarItemBackground">@drawable/selectable_background_myab</item> 
     <item name="popupMenuStyle">@style/PopupMenu.Myab</item> 
     <item name="dropDownListViewStyle">@style/DropDownListView.Myab</item> 
     <item name="actionBarTabStyle">@style/ActionBarTabStyle.Myab</item> 
     <item name="actionDropDownStyle">@style/DropDownNav.Myab</item> 
     <item name="actionBarStyle">@style/ActionBar.Solid.Myab</item> 
     <item name="actionModeBackground">@drawable/cab_background_top_myab</item> 
     <item name="actionModeSplitBackground">@drawable/cab_background_bottom_myab</item> 
     <item name="actionModeCloseButtonStyle">@style/ActionButton.CloseMode.Myab</item> 
     <item name="spinnerDropDownItemStyle">@style/DropDownItem.Myab</item> 
     <item name="android:spinnerItemStyle">@style/SpinnerItem.Myab</item>   
     <item name="android:checkboxStyle">@style/customCheckBoxStyle.Myab</item> 
     <item name="actionBarWidgetTheme">@style/Theme.Myab.Widget</item> 
    </style> 

    <!-- style checkbox -->  
    <style name="customCheckBoxStyle.Myab" parent="@android:style/Widget.CompoundButton.CheckBox"> 
    <item name="android:button">@drawable/custom_checkbox_design</item> 
    </style> 

custom_checkbox_design.xml

<?xml version="1.0" encoding="utf-8"?>  
    <selector xmlns:android="http://schemas.android.com/apk/res/android">  
     <item android:state_checked="true" android:drawable="@drawable/alram_on" /> 
     <item android:state_checked="false" android:drawable="@drawable/alram_off" />  
    </selector> 

так, как ее решить? спасибо, извините за мой английский

ответ

2

Прежде всего, android:checkboxStyle должен работать на устройстве с API 11 или новее.

Try установить ваш селектор флажок, как это:

<selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="300"> 
    <item android:state_selected="true" android:drawable="@drawable/checked"></item> 
    <item android:state_checked="true" android:drawable="@drawable/checked"></item> 
    <item android:drawable="@drawable/unchecked"></item> <!--default state, unchecked--> 
</selector> 
2

я получил тот же вопрос, я понял это хитрый способ. Смотрите ниже:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.webview_menu, menu); 
     menu.getItem(0).setIcon(R.drawable.unfavorite); 
     favorite = false; 
return true; } 

На optionitemselected:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle item selection 
     switch (item.getItemId()) { 

      case R.id.favoriteItem: 
       if(favourite){ 
        item.setIcon(R.drawable.unfavorite); 
        favourite = false; 
       } else { 
        item.setIcon(R.drawable.favorite); 
        favourite = true; 
       } 
       new FavoriteTask(favourite).execute(); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 

Это самый простой способ реализовать то же самое.

0

В java-файле вы должны установить значок программно. Если ваш файл селектора и файлы меню верны, изменение состояния флажка будет автоматически отображаться на флажке.

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater menuInflater = getMenuInflater(); 
    menuInflater.inflate(R.menu.menu,menu);//insert the name of the menu file 
    CheckBox checkBox = (CheckBox)menu.findItem(R.id.menu_item).getActionView();//find the checkbox, in your case R.id.actionbar_alarm 
    checkBox.setButtonDrawable(R.drawable.star);//the name of your selector file custom_checkbox_design.xml in your case 


    checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 
      //add the action of your checkbox 
     } 
    }); 

    return super.onCreateOptionsMenu(menu); 
} 
Смежные вопросы