在操作栏的设置菜单旁边添加操作栏切换按钮

时间:2015-09-02 06:55:34

标签: android android-actionbar

我有map个活动,我正在尝试将toggle button添加到包含地图类型的设置菜单旁边的操作栏,但我遇到了问题:切换按钮正在添加到设置项目菜单,而不是直接到actionbar

如何将此切换按钮添加到设置菜单旁边的操作栏?

map_menu.xml

<item
    android:id="@+id/mapTypeNormal"
    android:showAsAction="always"
    android:title="Normal"/>
<item
    android:id="@+id/mapTypeSatellite"
    android:showAsAction="always"
    android:title="Satellitte"/>
<item
    android:id="@+id/mapTypeTerrain"
    android:showAsAction="always"
    android:title="Terrain"/>
<item
    android:id="@+id/mapTypeHybrid"
    android:showAsAction="always"
    android:title="Hybrid"/>
<item
    android:id="@+id/mapTypeNone"
    android:showAsAction="always"
    android:title="None"/>

<item android:id="@+id/menu_toggle"
android:showAsAction="ifRoom|withText" 
android:icon="@drawable/off"
android:title="Share"
 />

地图活动:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.map_menu, menu);
    System.out.println("ABC MAP onCreateOptionsMenu was invoked.");

    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.mapTypeNone:
        map.setMapType(GoogleMap.MAP_TYPE_NONE);
        break;

    case R.id.mapTypeNormal:
        map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        break;

    case R.id.mapTypeSatellite:
        map.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
        break;

    case R.id.mapTypeTerrain:
        map.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
        break;
    case R.id.mapTypeHybrid:
        map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        break;

    default:
        break;
    }
    switch (item.getItemId()) {
    case R.id.menu_toggle:

        if (birthSort) {
            // change your view and sort it by Alphabet
            item.setIcon(R.drawable.on);
            item.setTitle("On");
            birthSort = false;
        } else {
            // change your view and sort it by Date of Birth
            item.setIcon(R.drawable.off);
            item.setTitle("Off");
            birthSort = true;
        }


    }
    return super.onOptionsItemSelected(item);
}

}

编辑:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/mapTypeNormal"
        android:showAsAction="never"
        android:title="Normal"/>
    <item
        android:id="@+id/mapTypeSatellite"
        android:showAsAction="never"
        android:title="Satellitte"/>
    <item
        android:id="@+id/mapTypeTerrain"
        android:showAsAction="never"
        android:title="Terrain"/>
    <item
        android:id="@+id/mapTypeHybrid"
        android:showAsAction="never"
        android:title="Hybrid"/>
    <item
        android:id="@+id/mapTypeNone"
        android:showAsAction="never"
        android:title="None"/>
    <item
        android:id="@+id/menu_toggle"
        android:icon="@drawable/off"
        android:showAsAction="always"
        android:title="Share"/>

</menu>

2 个答案:

答案 0 :(得分:1)

在使用AppCompat库时,来自showAsAction的{​​{1}}因某些原因无效,您必须使用来自http://schemas.android.com/apk/res/android的文件。

您可以使用命名空间http://schemas.android.com/apk/res-auto添加所需的架构,如下所示:

app

然后,对于要在xmlns:app="http://schemas.android.com/apk/res-auto" 上保持可见的菜单项,您可以添加以下属性:

ActionBar

以及其他人可以添加:

app:showAsAction="always"

所以你的map_menu.xml将是:

app:showAsAction="ifRoom"

答案 1 :(得分:0)

我这样做了,它对我有用

<item
    android:id="@+id/mapTypeNormal"
    app:showAsAction="never"
    android:title="Normal"/>
<item
    android:id="@+id/mapTypeSatellite"
    app:showAsAction="never"
    android:title="Satellitte"/>
<item
    android:id="@+id/mapTypeTerrain"
    app:showAsAction="never"
    android:title="Terrain"/>
<item
    android:id="@+id/mapTypeHybrid"
    app:showAsAction="never"
    android:title="Hybrid"/>
<item
    android:id="@+id/mapTypeNone"
    app:showAsAction="never"
    android:title="None"/>
<item
    android:id="@+id/menu_toggle"
    android:icon="@drawable/off"
    app:showAsAction="always"
    android:title="Share"/>