Android控件----Menu和Toast

   一:Toast

   1:作用

   它是一种显示消息的机制,与对话框不同的是

   (1)没有焦点,不能与用户交互

   (2)显示时间短,不会打扰用户操作

   (3)以浮动的View呈现,一段时间之后,自己消失

   2:创建

 (1)调用Toast的静态方法makeText(当前Activity对象,显示文本内容,显示时间),其中显示时间取值有2个,分别为Toast.LENGTH_LONG(长时间)和Toast.LENGTH_SHORT(短时间)。

   (2)调用Toast的show()方法显示提示信息。

   3:具体实现

Toast.makeText(MainActivity.this, "******项被按下", Toast.LENGTH_LONG).show();  //长时间
Toast.makeText(MainActivity.this, "******项被按下", Toast.LENGTH_SHORT).show(); //短时间

   二:Menu

   1:分类

选项菜单

   一般的Android手机的通讯录中会有这样一个控件,当我们单击菜单键的时候,从底部弹出六个选项,我们把这六个选项叫做“选项菜单”

◆子菜单

通讯录中选项菜单的最后一个一般情况下显示的是“更多”,单击之后有出现了一些菜单,我们把“更多”叫做“子菜单”。不支持图标显示,不能嵌套子菜单

◆上下文菜单

   当用户单击元素超过两秒的时间,会自动弹出的菜单,叫做“上下文菜单”。不支持图标显示

   2:添加菜单项常用方式

   (1)通过MenuInflater(菜单填充器)把在XML文件中定义好的样式应用到菜单上

   (2)通过Java代码的add方法逐个添加菜单项

   3:处理点击事件常用方式

   调用onOptionsItemSelected(MenuItem)和onContextItemSelected(MenuItem)方法。

   三:OptionsMenu--选项菜单

   1:样式

   最多只能显示6个菜单项,只支持文字与图标,多余6个的菜单项时,第六个会以“更多”的菜单项调出,但是他们不支持图标,只支持文字。

   2:创建

   通过在Activity中重写onCreateOptionsMenu(Menu menu)方法,并调用参数的add方法来添加菜单项,其中的参数解释如下:

           add(groupId, itemId, order, titleRes)

   ①groupId:菜单项所属组ID,取值参照API;itemId:菜单项ID;order:菜单项的组织方式,取值参照APItitleRes:显示在菜单项上的文字

   3:添加菜单项具体实现

   ◆小于等于六个时

public boolean onCreateOptionsMenu(Menu menu) {
    menu.add(Menu.NONE, 1, Menu.NONE, "Item1");
    menu.add(Menu.NONE, 2, Menu.NONE, "Item2");
    menu.add(Menu.NONE, 3, Menu.NONE, "Item3");
    menu.add(Menu.NONE, 4, Menu.NONE, "Item4");
    menu.add(Menu.NONE, 5, Menu.NONE, "Item5");   
    return true;
}

      结果如图所

   ◆大于六个时

public boolean onCreateOptionsMenu(Menu menu) {
        menu.add(Menu.NONE, 1, Menu.NONE, "Item1");
        menu.add(Menu.NONE, 2, Menu.NONE, "Item2");
        menu.add(Menu.NONE, 3, Menu.NONE, "Item3");
        menu.add(Menu.NONE, 4, Menu.NONE, "Item4");
        menu.add(Menu.NONE, 5, Menu.NONE, "Item5");
        menu.add(Menu.NONE, 6, Menu.NONE, "Item6");
        menu.add(Menu.NONE, 7, Menu.NONE, "Item7");
        menu.add(Menu.NONE, 8, Menu.NONE, "Item8");   
        return true;
    }

结果如图所示,其余三个(6,7,8)在More后面

   5:响应单击事件:

   重写onOptionsItemSelected(MenuItem)方法,根据getItemId()方法得到被单击的菜单ID,从而相应不同的事件。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case 1:
        System.out.println("您点击的是菜单项1");
        break;
    case 2:
        System.out.println("您点击的是菜单项2");
        break;
    }
    return super.onOptionsItemSelected(item);
}

  点击菜单项一之后,结果如图所示,在控制台输出

08-22 12:20:01.577: I/System.out(450): 您点击的是菜单项1

   四:SubMenu--子菜单

   1:样式

   用户单击菜单项之后可以弹出的菜单的菜单(”更多“)。不能再有子菜单,也不支持图标显示。

   2:属性

   (1)setIcon:设置含有子菜单的菜单项的图标

   (2)setHeaderTitle:设置弹出菜单的标题

   (3)setheaderIcon:设置弹出菜单的图标

   3:创建

   (1)重写onCreateOptionsMenu(Menu menu)方法

   (2)在主菜单的基础上,调用addSubMenu方法,将含有子菜单的菜单项添加。

   (3)定义弹出子菜单样式

   (4)添加子菜单的菜单项

   4:具体实现:单击“更多“菜单项时弹出子菜单

public boolean onCreateOptionsMenu(Menu menu) {
        menu.add(Menu.NONE, 1, Menu.NONE, "Item1");
        menu.add(Menu.NONE, 2, Menu.NONE, "Item2");
        menu.add(Menu.NONE, 3, Menu.NONE, "Item3");
        menu.add(Menu.NONE, 4, Menu.NONE, "Item4");
        menu.add(Menu.NONE, 5, Menu.NONE, "Item5");
                                                                                                                                                          
        SubMenu submenu = menu.addSubMenu(Menu.NONE, 6, Menu.NONE, "Item6");
                                                                                                                                                          
        submenu.setHeaderIcon(R.drawable.ic_launcher);
        submenu.setIcon(R.drawable.ic_launcher);
        submenu.setHeaderTitle("我是弹出的菜单");
                                                                                                                                                          
        submenu.add(Menu.NONE, 7, Menu.NONE, "Item6");
        submenu.add(Menu.NONE, 8, Menu.NONE, "Item7");
        submenu.add(Menu.NONE, 9, Menu.NONE, "Item8");    
        return true;
    }

   结果如图所示

   5:响应单击事件同上。

   五:ContextMenu--上下文菜单

   1:样式

   用户单击元素超过两秒之后弹出的菜单。

   2:属性同上

   3:创建同上,只是重写的是onContextItemSelected(MenuItem)方法。

   六:综合运用

   功能:长按主界面按钮,弹出一个上下文菜单,其中设置一项为子菜单,单击之后弹出菜单,再单击一项时,短时间显示提示信息。

public class contextMenu extends Activity{
    private Button button;//声明按钮
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.contextmenu);
        //根据Id查找控件
        button  =(Button) findViewById(R.id.button1);
        //注册,让Button会启动上下文菜单
        registerForContextMenu(button);
    }
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        //为上下文菜单添加菜单项
        menu.add(Menu.NONE, 1, Menu.NONE, "Item1");
        menu.add(Menu.NONE, 2, Menu.NONE, "Item2");
        menu.add(Menu.NONE, 3, Menu.NONE, "Item3");
        menu.add(Menu.NONE, 4, Menu.NONE, "Item4");
        menu.add(Menu.NONE, 5, Menu.NONE, "Item5");
        //菜单项六为子菜单,单击之后出现7,8,9
        SubMenu submenu = menu.addSubMenu(Menu.NONE, 6, Menu.NONE, "Item6");
                                                                                 
        submenu.setHeaderIcon(R.drawable.ic_launcher);
        submenu.setIcon(R.drawable.ic_launcher);
        submenu.setHeaderTitle("我是弹出的菜单");
                                                                                 
        submenu.add(Menu.NONE, 7, Menu.NONE, "Item7");
        submenu.add(Menu.NONE, 8, Menu.NONE, "Item8");
        submenu.add(Menu.NONE, 9, Menu.NONE, "Item9");    
        super.onCreateContextMenu(menu, v, menuInfo);
    }
    //添加单击事件
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case 8:
            Toast.makeText(contextMenu.this, "您单击了菜单项8", Toast.LENGTH_LONG).show();       
            break;
        }
        return super.onContextItemSelected(item);
    }
}

   结果:



   Android中的控件使用方法也许有些多,勤练习呗。。。又没有捷径?自己�道儿吧。。。你说呢?



你可能感兴趣的:(android,toast,menu)