I have an XML for menu with an item
and a group
. I intend to add a RelativeLayout
as a menu item in the XML, so that it looks like:
<menu>
<item1/>
<item2
<RelativeLayout>
<TextView1/>
<TextView2/>
<RelativeLayout>
/>
</menu>
Can this be accomplish in the Layout XML, or programmatically? If not, a work around would be helpful. Thanks.
Create a layout file with a view you want and then use it like this -
<item
android:id="@+id/menu_refresh"
android:title="@string/refresh"
yourapp:showAsAction="never"
android:actionLayout="@layout/my_custom_layout"/>
To edit your text view -
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
//Get a reference to your item by id
MenuItem item = menu.findItem(R.id.menu_refresh);
//Here, you get access to the view of your item, in this case, the layout of the item has a RelativeLayout as root view but you can change it to whatever you use
RelativeLayout rootView = (RelativeLayout)item.getActionView();
//Then you access to your control by finding it in the rootView
TextView textview1 = (TextView) rootView.findViewById(R.id.text1);
//And from here you can do whatever you want with your text view
return true;
}
To use Relativelayout
or any Other Layout you have to use actionLayout
as @Jack's retarded code Answer. But Keep in mind that.
android:actionLayout="@layout/my_custom_layout"
is not work you have to use app:actionLayout="@layout/my_custom_layout"
Because If you're using ActionbarSherlock
or AppCompat
, the android:
namespace will not work for MenuItems
. This is because these libraries use custom attributes that mimic the Android APIs since they did not exist in earlier versions of the framework.
You can't put it in the menu.xml directly, you have to use the android:actionLayout attribute.
It works like this:
menu.xml
<menu>
<item ... android:actionLayout="@layout/custom_layout"/>
</menu>
custom_layout.xml
<RelativeLayout ...>
<TextView .../>
<TextView .../>
<RelativeLayout>
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.