官网介绍:
http://developer.android.com/guide/topics/resources/menu-resource.html
1、通过程序动态布局
2、通过Menu.xml文件布局
ActionBar的Item会分有好几个种类,分别有
1).普通类型(带图片带文字)。
<item
android:id="@+id/menu_save"
android:icon="@drawable/save"
android:showAsAction="ifRoom|withText"
android:title="@string/menu_save"></item>
一个最普通的带文字带图片的Item。
能否显示在ActionBar的Item主要看android:showAsAction="ifRoom|withText"这个属性。
android:showAsAction总共有五个属:
- never:永远不会显示。只会在溢出列表中显示。
- ifRoom:会显示在Item中,但是如果已经有4个或者4个以上的Item时会隐藏在溢出列表中。
- always:无论是否溢出,总会显示。
- withText:Title会显示。
- collapseActionView:可拓展的Item。
2).分享类型。
<item
android:id="@+id/menu_share"
android:actionProviderClass="android.widget.ShareActionProvider"
android:enabled="true"
android:showAsAction="ifRoom"
android:title="@string/menu_share"/>
android:actionProviderClass="android.widget.ShareActionProvider"表示这个Item是个分享Item
代码实现
public boolean onCreateOptionsMenu(Menu menu) {
// 添加分享按钮的事件
// 4.0以下没有ShareActionProvider
MenuItem menuItem_share = menu.findItem(R.id.menu_share);
// Get the provider and hold onto it to set/change the share intent.
mShareActionProvider = (ShareActionProvider) menuItem_share
.getActionProvider();
// If you use more than one ShareActionProvider, each for a different
// action,
// use the following line to specify a unique history file for each one.
// mShareActionProvider.setShareHistoryFileName("custom_share_history.xml");
// Set the default share intent
mShareActionProvider.setShareIntent(getDefaultShareIntent());
}
private Intent getDefaultShareIntent() {
// TODO Auto-generated method stub
Log.i(TAG, "getDefaultShareIntent");
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, "小清新短信闪");
intent.putExtra(Intent.EXTRA_TEXT, "小清新短信闪 1.0");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
return intent;
}
3).可拓展类型。
<item
android:id="@+id/menu_collapse"
android:actionLayout="@layout/collapsibleview"
android:icon="@drawable/search"
android:showAsAction="ifRoom|collapseActionView"
android:title="@string/menu_search">
</item>
他有俩个属性是android:actionLayout="@layout/collapsibleview" android:showAsAction="ifRoom|collapseActionView"
android:actionLayout="@layout/collapsibleview" 是点item后拓展成的View
android:showAsAction="collapseActionView"代表他是一个可拓展的Item
Button btnn;
EditText editText;
private ShareActionProvider mShareActionProvider;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
// 给可折叠的view上的控件添加事件
LinearLayout viewGroup = (LinearLayout) menu.findItem(
R.id.menu_collapse).getActionView();
btnn = (Button) viewGroup.findViewById(R.id.colla_btn);
editText = (EditText) viewGroup.findViewById(R.id.colla_edit);
btnn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(),
editText.getText() + "~", 0).show();
}
});
}
可拓展的Item同时还支持一个拓展事件。只有在4.0以后的Api提供:
MenuItem menuItem = menu.findItem(R.id.menu_collapse);
menuItem.setOnActionExpandListener(new OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(),
"onMenuItemActionExpand", 0).show();
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(),
"onMenuItemActionCollapse", 0).show();
return true;
}
});
4).列表类型。