AndroidGUI12:ContextMenu的常用技巧

来源:互联网 发布:下载拼音打字软件 编辑:程序博客网 时间:2024/06/05 03:56

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

ContextMenuItem不支持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);

                  

                   // ContextMenuItem不支持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重写onContextItemSelectedContextMenu中的菜单项对应的代码

         @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如下:


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