原文地址:http://bbs.seacat.cn/thread-897-1-1.html
创建并显示一个菜单
注意:Glass菜单不支持可选项
![](http://bbs.seacat.cn/data/attachment/forum/201401/16/060147xc7o6zcogs7s6g2c.png)
创建菜单资源
创建菜单资源和Android平台一样,但对于Glass还有些原则:
1、对于每个菜单项,提供一个50*50的图标。这个菜单图标一定要是白色,透明背景。
2、使用短名称来描述行为和用例。用祈使句动词就很好。(例如分享,回复全部)。
3、Glass不显示没有菜单项的活动卡片。至少要提供一个停止菜单,这样用户可以从时间轴中删除活动卡片
4、CheckBox控件不支持
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_item_1"
android:title="@string/Menu_Item_1" <!-- must have "Stop" menu item -->
android:icon="@drawable/menu_item_1_icon" /> <!-- white on transparent icon -->
</menu>
创建一个activity来处理菜单的回调
你必须定义一个菜单activity,当用户点击菜单的时候,让你的活动菜单能调用它。
重写下面这些activity的回调方法更适当:
onCreateOptionsMenu() 解析 XML 菜单资源.
onResume() 当activity获得焦点的时候显示菜单
onPrepareOptionsMenu() 若需要则显示或隐藏菜单。例如你可以根据用户的操作或展现的数据不同而显示不同的菜单。
onOptionsItemSelected() 处理用户的选择
onOptionsMenuClosed() 结束activity,以便他不再显示在活动卡片上。
如果点了关闭菜单项或者下滑操作时,一定要适当的关闭activity:
/**
* Activity showing the options menu.
*/
public class MenuActivity extends Activity {
@Override
public void onResume() {
super.onResume();
openOptionsMenu();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.stopwatch, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection.
switch (item.getItemId()) {
case R.id.stop:
stopService(new Intent(this, StopwatchService.class));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onOptionsMenuClosed(Menu menu) {
// Nothing else to do, closing the activity.
finish();
}
}
使menu activity透明
menu activity会覆盖在活动卡片上:
1、创建一个res/values/styles.xml 文件并声明一个style使activity背景透明:
<resources>
<style name="MenuTheme" parent="@android:style/Theme.DeviceDefault">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@null</item>
</style>
</resources>
2、在你的AndroidManifest.xml 文件,配置menu activity的主题:
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
...
<application ... >
...
<activity
android:name=".MenuActivity"
android:theme="@style/MenuTheme"
...>
</activity>
</application>
</manifest>
显示菜单
通过调用setAction(),提供一个 PendingIntent。当用户轻触卡片,pending intent将启动menu activity
Intent menuIntent = new Intent(this, MenuActivity.class);
mLiveCard.setAction(PendingIntent.getActivity(this, 0, menuIntent, 0));
mLiveCard.publish(LiveCard.PublishMode.REVEAL); // or SILENT
Menu工具类
MenuUtils类是菜单工具类,提供一些菜单相关的通用工具方法。