在Android中按下菜单栏图标时如何更改菜单栏图标

在Android中按下菜单栏图标时如何更改菜单栏图标,android,android-actionbar,Android,Android Actionbar,在这里,当我按下favorite\u icon时,菜单栏上有两个项目,分别称为notification\u icon和favorite\u icon,它们应该被更改为favorite\u icon2。因此,我尝试了选择器。选择器仅适用于android:state\u pressed=“true”而不是android:state\u selected=“true”。s请引导我这样做。这里我添加了以下代码供您参考 menu_clg.xml (under menu) <?xml version

在这里,当我按下
favorite\u icon
时,菜单栏上有两个项目,分别称为
notification\u icon
favorite\u icon
,它们应该被更改为
favorite\u icon2
。因此,我尝试了选择器。选择器仅适用于
android:state\u pressed=“true”
而不是
android:state\u selected=“true”
。s请引导我这样做。这里我添加了以下代码供您参考

menu_clg.xml (under menu)

<?xml version="1.0" encoding="utf-8"?>
<menu

    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:appmunu="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".UserDashBoardFragment">
    <item
        android:id="@+id/action_notify"
        android:icon="@drawable/mail_icon"
        appmunu:showAsAction="always"
        android:title="Notification" />
    <item
        android:id="@+id/action_favourite"
        android:icon="@drawable/icon_selector"
        appmunu:showAsAction="always"
        android:title="Favourite" />


</menu>
这是活动代码

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_clg, menu);
        mMenu = menu;


        return true;
    }

    // delete the selected event from event list added here
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            case R.id.action_notify:
                navigatetoNotification();
                return true;

            case R.id.action_favourite:
                favouriteClg();
                return true;


        }

        return super.onOptionsItemSelected(item);
    }

现在,我们要做的是,当用户单击添加图标“+”时,我们将添加一个新项目,并更改添加图标以删除“X”图标

当用户单击项目时,将调用OnOptions ItemSelected()。 OnOptions ItemSelected(MenuItem项)MenuItem对象作为参数传递,该参数是对单击项的引用。使用此对象,我们可以知道单击了哪个项目

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

boolean canAddItem = false;
@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if(item.getItemId() == R.id.action_addItem){
        // ( 1 ) add a new item 
            // ( 2 ) change add to remove
    }
    else{
            // if a the new item is clicked show "Toast" message.
    }

    return super.onOptionsItemSelected(item);
}
}

我们需要调用PrepareOptionsMenu(菜单菜单菜单)来添加、删除和修改菜单项。 在Android 2.3.x及更低版本上,每次用户打开选项菜单(按下菜单按钮)时,系统都会调用onPrepareOptions菜单()。 在Android 3.0及更高版本上,我们需要调用invalidateOptionsMenu()来请求系统调用onPrepareOptionsMenu()

}


希望有帮助。

现在,我们要做的是,当用户单击添加图标“+”时,我们将添加一个新项目,并更改添加图标以删除“X”图标

当用户单击项目时,将调用OnOptions ItemSelected()。 OnOptions ItemSelected(MenuItem项)MenuItem对象作为参数传递,该参数是对单击项的引用。使用此对象,我们可以知道单击了哪个项目

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

boolean canAddItem = false;
@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if(item.getItemId() == R.id.action_addItem){
        // ( 1 ) add a new item 
            // ( 2 ) change add to remove
    }
    else{
            // if a the new item is clicked show "Toast" message.
    }

    return super.onOptionsItemSelected(item);
}
}

我们需要调用PrepareOptionsMenu(菜单菜单菜单)来添加、删除和修改菜单项。 在Android 2.3.x及更低版本上,每次用户打开选项菜单(按下菜单按钮)时,系统都会调用onPrepareOptions菜单()。 在Android 3.0及更高版本上,我们需要调用invalidateOptionsMenu()来请求系统调用onPrepareOptionsMenu()

}


希望有帮助。

complete source code@github complete source code@github
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

boolean canAddItem = false;
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    Toast toast;
    if(item.getItemId() == R.id.action_addItem){
        invalidateOptionsMenu();
    }
    else{
        toast = Toast.makeText(this, item.getTitle()+" Clicked!", Toast.LENGTH_SHORT);
        toast.show();
    }

    return super.onOptionsItemSelected(item);
}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {

    if(canAddItem){
        menu.getItem(0).setIcon(R.drawable.ic_content_remove);
        MenuItem mi = menu.add("New Item");
        mi.setIcon(R.drawable.ic_location_web_site);
        mi.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM);
        canAddItem = false;
    }
    else{
        menu.getItem(0).setIcon(R.drawable.ic_content_new);
        canAddItem = true;
    }

    return super.onPrepareOptionsMenu(menu);
}