自定义CheckBox菜单项ActionBar无法工作

5
我有一个问题,就是我想要样式化自定义复选框菜单项ActionBar。我已经实现了它,但是它没有样式。
我想使用资源更改它:
如果复选框被选中: enter image description here 如果复选框未被选中: enter image description here 这是我的菜单项Action 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>
    <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>

那么如何解决呢?谢谢。对不起我的英语不好。
3个回答

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; }

在选项选择时:

@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);
        }
    }

这是实现相同目标最简单的方法。

2

首先,android:checkboxStyle 只能在 API 11 或更高版本的设备上运行。

尝试将你的复选框选择器设置为以下内容:

<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>

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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接