Android ActionBar详解(二)--->使用ActionBar显示选项菜单

时间:2021-10-06 00:09:04

MainActivity如下:

package cc.testsimpleactionbar1;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;
/**
* Demo描述:
* 使用ActionBar显示选项菜单
*
* 背景资料:
* Android手机不强制要求设备必须有Menu键,这样导致的问题是用户无法打开
* 选项菜单.但此时即可以将选项菜单设置成Action Item.
* 即从Android 3.0 开始为MenuItem新增如下方法:
* setShowAsAction(int actionEnum),该方法用于设置是否将该菜单栏
* 显示在ActionBar上,作为ActionItem
* 参数值如下:
* SHOW_AS_ACTION_ALWAYS:总是将该MenuItem显示在ActionBar上
* SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW:将该Action View折叠成普通菜单项
* SHOW_AS_ACTION_IF_ROOM:当ActionBar位置有足够空间时才显示该MenuItem
* SHOW_AS_ACTION_NEVER:不将该MenuItem显示在ActionBar上
* SHOW_AS_ACTION_WITH_TEXT:将该MenuItem显示在ActionBar上,且显示该菜单项的文本
*
* 当然我们最好是在xml文件中来定义菜单.
* 所以在menu下的item属性中指定showAsAction属性即可
* 该属性的值和上面提到的参数值的表达形式很类似,作用是相同的
*
*
* 参考资料:
* 1 Android疯狂讲义(第二版)
* 2 http://blog.csdn.net/think_soft/article/details/7378824
* Thank you very much
*
* 测试说明:
* 当手机处于横屏的时候,在因为ActionBar的空间有限
* 所以只会显示每个Item的图标,不会显示其title
* 在横屏的时候既显示图标也显示title
*
*/
public class MainActivity extends Activity {
private TextView mTipTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
} private void init(){
mTipTextView=(TextView) findViewById(R.id.tipTextView);
} //生成对应的菜单,并添加到Menu中
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.action_menu, menu);
return true;
} //菜单项被选中时执行该方法
@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
if (menuItem.isCheckable()) {
menuItem.setChecked(true);
}
switch (menuItem.getItemId()) {
case R.id.font10:
mTipTextView.setTextSize(10 * 2);
break;
case R.id.font12:
mTipTextView.setTextSize(12 * 2);
break;
case R.id.font14:
mTipTextView.setTextSize(14 * 2);
break;
case R.id.font16:
mTipTextView.setTextSize(16 * 2);
break;
case R.id.font18:
mTipTextView.setTextSize(18 * 2);
break;
case R.id.redFont:
mTipTextView.setTextColor(Color.RED);
break;
case R.id.greenFont:
mTipTextView.setTextColor(Color.GREEN);
break;
case R.id.blueFont:
mTipTextView.setTextColor(Color.BLUE);
break;
case R.id.plain_item:
Toast toast = Toast.makeText(MainActivity.this, "单击了普通菜单项",Toast.LENGTH_SHORT);
toast.show();
break; default:
break;
}
return true;
} }

main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" > <TextView
android:id="@+id/tipTextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="可通过菜单修改文字的大小和颜色"
android:textSize="16sp"
android:gravity="center"
/> </RelativeLayout>

action_menu.xml如下:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:title="文字大小"
android:icon="@drawable/font"
android:showAsAction="always|withText">
<menu>
<group android:checkableBehavior="single">
<item
android:id="@+id/font10"
android:title="10"
/>
<item
android:id="@+id/font12"
android:title="12"
/>
<item
android:id="@+id/font14"
android:title="14"
/>
<item
android:id="@+id/font16"
android:title="16"
/>
<item
android:id="@+id/font18"
android:title="18"
/>
</group>
</menu>
</item> <item
android:id="@+id/plain_item"
android:icon="@drawable/ic_launcher"
android:title="普通菜单项"
android:showAsAction="always|withText"
/> <item
android:title="设置颜色"
android:icon="@drawable/color"
android:showAsAction="always|withText">
<menu>
<group>
<item
android:id="@+id/redFont"
android:title="红色"
/>
<item
android:id="@+id/greenFont"
android:title="绿色"
/>
<item
android:id="@+id/blueFont"
android:title="蓝色"
/>
</group>
</menu>
</item> </menu>