记得上一次暑假做项目的时候用到了Menu,记得很清楚有一个地方需要用到子菜单,所以用上了SubMenu这玩意
现在的安卓手机在屏幕变大了以及系统升级之后更多的取消了原有的菜单键(部分老的安卓机子还有默认的菜单键),还有的现在是应用到了物理菜单键。但是有的机子是没有的哇,当时做项目的时候考虑到这种情况就决定同意使用SubMenu,当然后面也学着用上下文菜单和ActionBar/ActionMode
说明一下:在看Android 源码的时候可以看出来
Menu是一个父接口,SubMenu(子菜单)和ContextMenu(上下文菜单)是它的子接口!
SubMenu子菜单,要依附在一个菜单中间的
所以在使用SubMenu的时候需要有一个前提条件:你需要创建一个Option Menu
换句话说你需要冲下Activity 的onCreateOptionsMenu(Menu menu)方法,然后在这个方法里面添加SubMenu 嘿嘿,是不是听起来很简单。写了个小程序体验下。
首先是一个很简单的activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TableRow>
<TextView
android:text="这里这里这里"
android:textSize="25dp"
android:id="@+id/textView"
android:layout_column="24" />
</TableRow>
</TableLayout>
就一个文本而已…
接着才是重点: MainActivity
package com.example.administrator.androidclasstest02;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
/**
* Created by Administrator on 2017/3/14 0014.
*/
public class MenuActivity extends AppCompatActivity {
final int FONT_10 = 10;
final int FONT_12 = 12;
final int FONT_14 = 14;
final int FONT_16 = 16;
final int FONT_18 = 18;
final int FONT_YELLOW = 0x123;
final int FONT_BLACK = 0x124;
final int FONT_RED = 0x125;
private TextView textView;
final int PLANT_ITEM = 0x11b;
/**
*
* @param saveImstanceState
*/
@Override
protected void onCreate(final Bundle saveImstanceState){
super.onCreate(saveImstanceState);
setContentView(R.layout.second_activity);
textView = (TextView) findViewById(R.id.textView);
}
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
// 设置字体,利用SubMenu 创建子菜单添加到menu中去
SubMenu fontMenu = menu.addSubMenu("字体大小");
fontMenu.add(0, FONT_10, 0, "10字体");
fontMenu.add(0, FONT_12, 0, "12字体");
fontMenu.add(0, FONT_14, 0, "14字体");
fontMenu.add(0, FONT_16, 0, "16字体");
fontMenu.add(0, FONT_18, 0, "18字体");
// 设置普通菜单
menu.add(0, PLANT_ITEM, 0, "普通菜单栏");
// 设置文字颜色的子菜单
SubMenu colorMenu = menu.addSubMenu("字体颜色");
colorMenu.add(0, FONT_BLACK, 0, "黑色字体");
colorMenu.add(0, FONT_YELLOW, 0, "黄色字体");
colorMenu.add(0, FONT_RED, 0, "红色字体");
colorMenu.setIcon(R.drawable.cat);
colorMenu.setHeaderTitle("字体颜色选择");
return super.onCreateOptionsMenu(menu);
}
//重写onOptionsItemSelected方法,选择对应的相应
@Override
public boolean onOptionsItemSelected(final MenuItem menu) {
switch (menu.getItemId()) {
case FONT_10:
textView.setTextSize(10 * 2);
break;
case FONT_12:
textView.setTextSize(12 * 2);
break;
case FONT_14:
textView.setTextSize(14 * 2);
break;
case FONT_16:
textView.setTextSize(16 * 2);
break;
case FONT_18:
textView.setTextSize(18 * 2);
break;
case FONT_BLACK:
textView.setTextColor(Color.BLACK);
break;
case FONT_RED:
textView.setTextColor(Color.RED);
break;
case FONT_YELLOW:
textView.setTextColor(Color.YELLOW);
break;
case PLANT_ITEM:
Toast.makeText(this, "Toast提示", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
}
上文当中的Color.REN等是在color.xml中定义的
在onCreateOptionsMenu(final Menu menu)这个方法中,创建SubMenu对象添加到menu中去,Android就会自动为你添加一个子菜单,再在SubMenu对象中添加Item,就会在子菜单中添加选项,注意是子菜单中的选项。
接下来来看效果咯 请忽略掉那两个迷之Button。。。。。。