AndroidGUI12:ContextMenu的常用技巧

ContextMenu 实现了 Menu 接口。当在某个 View 上长按时,就可以让 ContextMenu 出现。

ContextMenu Item 不支持 Icon

 

1.     创建一个 Android Project ,修改缺省的 main.xml ,使之如下:

<? xml version = "1.0" encoding = "utf-8" ?>

< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"

    android:orientation = "vertical"

    android:layout_width = "fill_parent"

    android:layout_height = "fill_parent"

    android:gravity = "center_horizontal"

    >

 

         < Chronometer

                   android:id = "@+id/chronometer"

                   android:layout_width = "wrap_content"

                   android:layout_height = "wrap_content"

                   android:format = "%s"

                   android:textSize = "80px"

                   android:textColor = "#FFFF00"

         />               

</ LinearLayout >

 

2.     创建一个 context_menu.xml 文件,用作菜单资源:

点击 Finish 按钮,编辑 context_menu.xml ,使其内容如下:

<? xml version = "1.0" encoding = "utf-8" ?>

< menu

  xmlns:android = "http://schemas.android.com/apk/res/android" >

       < item

                 android:id = "@+id/timer_start"

                 android:title = " 开始计时 "

       />

       < item

                 android:id = "@+id/timer_stop"

                 android:title = " 终止计时 "

       />

       < item

                 android:id = "@+id/timer_reset"

                 android:title = " 清零 "

       />    

</ menu >

 

3.    把需要用到的图标 compass.png ,拖入到 Eclipse 项目中的 res/drawable-mpdi 文件夹下。

4.     编写 Activity 对应的代码如下:

public class ControlContextMenu extends Activity

{

         private Chronometer timer ;

        

    @Override

    public void onCreate(Bundle savedInstanceState)

    {

        super .onCreate(savedInstanceState);

        setContentView(R.layout. main );

       

        // 获得计时器对象

        timer = (Chronometer) this .findViewById(R.id. chronometer );

        // 使得用户长按计时器时 可以出现 ContextMenu

        this .registerForContextMenu( timer );

    }

 

         // alt+Shift+S 重写 onCreateContextMenu 创建 ContextMenu

         @Override

         public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)

         {

                   super .onCreateContextMenu(menu, v, menuInfo);

                  

                   // ContextMenu Item 不支持 Icon 所以不用再资源文件中 为它们设定图标

                   if (v.getId() == R.id. chronometer )

                   {

                            this .getMenuInflater().inflate(R.menu. context_menu , menu);   // 读取资源 并创建菜单项

                            menu.setHeaderIcon(R.drawable. compass );                                // 设定头部图标

                            menu.setHeaderTitle( " 计时器控制选项 " );                                        // 设定头部标题

                   }

         }

 

         // alt+Shift+S 重写 onContextItemSelected ContextMenu 中的菜单项对应的代码

         @Override

         public boolean onContextItemSelected(MenuItem item)

         {

                   switch (item.getItemId())

                   {

                   case R.id. timer_start :

                            timer .setBase(SystemClock.elapsedRealtime ());      // chronometer 的显示清零

                            timer .start();                                                                        // 然后开始计时

                            break ;

                   case R.id. timer_stop :

                            timer .stop();

                            break ;

                   case R.id. timer_reset :

                            timer .setBase(SystemClock.elapsedRealtime ());      // chronometer 的显示清零

                            break ;

                   }

 

                   return super .onContextItemSelected(item);

         }

}

 

4.     运行结果


长按计时器后,会出现 ContextMenu 如下:


选中其中的一个菜单项,就可以进行相应的工作。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值