Custom view for Menu Item

What you need to do is create a layout file with the view that you want for the item, the when you declare the item on the menu, assign the layout like this:

<item
    android:id="@+id/menu_pick_color"
    android:title="@string/pick_color"
    app:showAsAction="always"
    app:actionLayout="@layout/my_custom_item"/>

And that’s it!

EDIT:

To access the custom item and modify it’s color at runtime you can do this.

In your activity (or fragment) override the onPrepareOptionsMenu (Assuming you already inflated your menu with ‘onCreateOptionsMenu’)

@Override
public boolean onPrepareOptionsMenu(Menu menu) {

    //Get a reference to your item by id
    MenuItem item = menu.findItem(R.id.menu_pick_color);

    //Here, you get access to the view of your item, in this case, the layout of the item has a FrameLayout as root view but you can change it to whatever you use
    FrameLayout rootView = (FrameLayout)item.getActionView();

    //Then you access to your control by finding it in the rootView
    YourControlClass control = (YourControlClass) rootView.findViewById(R.id.control_id);

    //And from here you can do whatever you want with your control

    return true;
}

Leave a Comment