Android菜单按钮可见性

时间:2014-04-11 18:26:29

标签: android android-actionbar show-hide menuitem

我的操作栏中有一个按钮,它隐藏了所有按钮,并且应该显示另外三个按钮,但它只显示其中的两个按钮。项目数为7.按钮(必须显示)showAsAction是ifRoom。

以下是隐藏/取消隐藏按钮的方法:

private void hideUnhideActionButtons(boolean hide) {
    MenuItem item;
    Log.d("Item numbers", Integer.toString(audioMenu.size()));
    for(int i = 0; i < audioMenu.size(); ++i ) {
        if(i < 4)
            audioMenu.getItem(i).setVisible(!hide);
        else
            audioMenu.getItem(i).setVisible(hide);
    }   
    audioMenu.getItem(6).setVisible(true);
}

以下是我称之为此方法的地方:

public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    switch(id) {                
        case R.id.action_camera:
            ...
            return true;

        case R.id.action_audio:
            hideUnhideActionButtons(true);

            return true;

        case R.id.action_record:
            ...
            return true;

        case R.id.action_play:
                            ...

            return true;

        case R.id.action_return:
            hideUnhideActionButtons(false);

            return true;

        case R.id.action_delete:
            ...
            return true;

        case R.id.action_save: 
            ...
                            return true;
    }

    return super.onOptionsItemSelected(item);
}

我的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.example.victwo.NewNoteActivity" >

    <item
        android:id="@+id/action_save"
        android:icon="@drawable/ic_action_save"
        android:orderInCategory="100"
        android:title="@+string/action_save"
        app:showAsAction="always"/>

    <item
        android:id="@+id/action_delete"
        android:icon="@drawable/ic_action_remove"
        android:orderInCategory="100"
        android:title="@+string/action_delete"
        app:showAsAction="always"/>

    <item
        android:id="@+id/action_camera"
        android:icon="@drawable/ic_action_camera"
        android:orderInCategory="100"
        android:title="@+string/action_camera"
        app:showAsAction="always"/>

    <item
        android:id="@+id/action_audio"
        android:icon="@drawable/ic_action_volume_on"
        android:orderInCategory="100"
        android:title="@+string/action_record"
        app:showAsAction="always"/>

    <item
        android:id="@+id/action_record"
        android:icon="@drawable/ic_action_mic"
        android:orderInCategory="100"
        android:title="@+string/action_record"
        app:showAsAction="ifRoom"/>

    <item
        android:id="@+id/action_play"
        android:icon="@drawable/ic_action_play"
        android:orderInCategory="100"
        android:title="@+string/action_play"
        app:showAsAction="ifRoom"/>

    <item
        android:id="@+id/action_return"
        android:icon="@drawable/ic_action_back"
        android:orderInCategory="100"
        android:title="@+string/action_return"
        app:showAsAction="ifRoom"/>


</menu>

有人可以告诉我这是什么问题吗?

1 个答案:

答案 0 :(得分:0)

我看到您的菜单引用了audioMenu。因此,您可以使用findItem方法访问自己的菜单项,并使用id代替indexes

示例:

public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    switch(id) {                
        case R.id.action_camera:
            ...
            return true;

        case R.id.action_audio:
            //hide
            actionMode.findItem(R.id.id_1).setVisible(false);
            actionMode.findItem(R.id.id_2).setVisible(false);
            //show
            actionMode.findItem(R.id.id_3).setVisible(true);
            actionMode.findItem(R.id.id_4).setVisible(true);
            return true;

        case R.id.action_record:
            ...
            return true;

    }

    return super.onOptionsItemSelected(item);
}