谷歌眼镜GDK开发指南之活动卡片中显示菜单

原文地址:http://bbs.seacat.cn/thread-897-1-1.html




创建并显示一个菜单


注意:Glass菜单不支持可选项


060147xc7o6zcogs7s6g2c.png






创建菜单资源


创建菜单资源和Android平台一样,但对于Glass还有些原则:


1、对于每个菜单项,提供一个50*50的图标。这个菜单图标一定要是白色,透明背景。
2、使用短名称来描述行为和用例。用祈使句动词就很好。(例如分享,回复全部)。
3、Glass不显示没有菜单项的活动卡片。至少要提供一个停止菜单,这样用户可以从时间轴中删除活动卡片
4、CheckBox控件不支持




[java] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <menu xmlns:android="http://schemas.android.com/apk/res/android">  

  2.    <item  

  3.        android:id="@+id/menu_item_1"

  4.        android:title="@string/Menu_Item_1"       <!-- must have "Stop" menu item -->  

  5.        android:icon="@drawable/menu_item_1_icon" />   <!-- white on transparent icon -->  

  6. </menu>  





创建一个activity来处理菜单的回调


你必须定义一个菜单activity,当用户点击菜单的时候,让你的活动菜单能调用它。


重写下面这些activity的回调方法更适当:




onCreateOptionsMenu() 解析 XML 菜单资源.
onResume() 当activity获得焦点的时候显示菜单
onPrepareOptionsMenu() 若需要则显示或隐藏菜单。例如你可以根据用户的操作或展现的数据不同而显示不同的菜单。
onOptionsItemSelected() 处理用户的选择
onOptionsMenuClosed() 结束activity,以便他不再显示在活动卡片上。
如果点了关闭菜单项或者下滑操作时,一定要适当的关闭activity:



[java] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /**

  2.    * Activity showing the options menu.

  3.    */

  4. publicclass MenuActivity extends Activity {  

  5. @Override

  6. publicvoid onResume() {  

  7. super.onResume();  

  8.           openOptionsMenu();  

  9.       }  

  10. @Override

  11. publicboolean onCreateOptionsMenu(Menu menu) {  

  12.           MenuInflater inflater = getMenuInflater();  

  13.           inflater.inflate(R.menu.stopwatch, menu);  

  14. returntrue;  

  15.       }  

  16. @Override

  17. publicboolean onOptionsItemSelected(MenuItem item) {  

  18. // Handle item selection.

  19. switch (item.getItemId()) {  

  20. case R.id.stop:  

  21.                   stopService(new Intent(this, StopwatchService.class));  

  22. returntrue;  

  23. default:  

  24. returnsuper.onOptionsItemSelected(item);  

  25.           }  

  26.       }  

  27. @Override

  28. publicvoid onOptionsMenuClosed(Menu menu) {  

  29. // Nothing else to do, closing the activity.

  30.           finish();  

  31.       }  

  32.   }  





使menu activity透明


menu activity会覆盖在活动卡片上:


1、创建一个res/values/styles.xml 文件并声明一个style使activity背景透明:


[java] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <resources>  

  2.    <style name="MenuTheme" parent="@android:style/Theme.DeviceDefault">  

  3.        <item name="android:windowBackground">@android:color/transparent</item>  

  4.        <item name="android:colorBackgroundCacheHint">@null</item>  

  5.        <item name="android:windowIsTranslucent">true</item>  

  6.        <item name="android:windowAnimationStyle">@null</item>  

  7.    </style>  

  8. </resources>  





2、在你的AndroidManifest.xml 文件,配置menu activity的主题:


[java] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  

  2.    <manifest ... >  

  3.      ...  

  4.        <application ... >  

  5.            ...  

  6.            <activity  

  7.                android:name=".MenuActivity"

  8.                android:theme="@style/MenuTheme"

  9.                ...>  

  10.            </activity>  

  11.        </application>  

  12.    </manifest>  





显示菜单


通过调用setAction(),提供一个 PendingIntent。当用户轻触卡片,pending intent将启动menu activity


[java] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. Intent menuIntent = new Intent(this, MenuActivity.class);  

  2.   mLiveCard.setAction(PendingIntent.getActivity(this, 0, menuIntent, 0));  

  3.   mLiveCard.publish(LiveCard.PublishMode.REVEAL); // or SILENT





Menu工具类


MenuUtils类是菜单工具类,提供一些菜单相关的通用工具方法。


你可能感兴趣的:(android,谷歌,眼镜)