zoukankan      html  css  js  c++  java
  • 【转】 Pro Android学习笔记(三五):Menu(6):XML方式 & PopUp菜单

    目录(?)[-]

    1. 利用XML创建菜单
      1. XML的有关属性
      2. onClick事件
    2. Pop-up菜单

    利用XML创建菜单

    在代码中对每个菜单项进行设置,繁琐且修改不灵活,不能适配多国语言的要求,可以利用资源进行设置。在之前的Pro Android学习笔记(十):了解Intent(上)#系统的Intent中我们已经给了一个如何利用XML进行菜单项设计的详细小例子,这里就不在重复。这里仅补充一下说明。

    XML的有关属性

    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- This group uses the default category. --> 
        <group android:id="@+id/menuGroup_Main"> 
            <item android:id="@+id/menu_testPick" 
                android:orderInCategory="5" 
                android:icon="@draw/ic_leaf" 
                android:title
    ="Test Pick" /> 
            <item .../> 
            <item .../>  
       <!--  下面是子菜单的例子:采用menu嵌套的方式实现 –>
            <item android:id="@+id/file"  android:title="@string/file" >  
                <menu> 
                     <item ...... /> 
                     <item ...... /> 
               </menu> 
           </item>
      
        </group> 
    </menu>

    相关的可以阅读reference中的API Guide。(sdk/docs/guide/topics/ui/menus.html#xml)。除了上面例子给出的属性外,部分常用的属性如下:

    如果我们要制定menu的category,这可通过以下的方式:

    <group android:id="@+id/some_group_id " android:menuCategory="secondary">

    可以设置checkable属性,例子如下:

    <?xml version="1.0" encoding="utf-8"?> 
    <menu …… > 
        <group android:id="@+id/menuGroup_popup" android:checkableBehavior="all">
            <item android:id="@+id/pop_menu_1" android:checked="true" android:title="popup.item.1" />
            <item android:id="@+id/pop_menu_2" android:title="popup.item.2" /> 
        </group> 
    </menu>

    下图是在一个pop-up菜单上采用采用这个menu xml构造的样式:

    此外还可以设置enable,visible,shortcut等属性,如下:

    <item android:id="… " android:enabled="true" … /> 
    <item android:id="… " android:alphabeticShortcut="a" … /> 
    <item android:id="... " android:visible="true"  ... />

    onClick事件

    在之前学习中,我们知道menu item支持click listener,因此我们可以直接在item中设置onClick事件的回调函数,如下:

    <item …… android:onClick="onClick_callback_method_name" /> 

    Pop-up菜单

    当view收到某种事件,例如点击,可以触发弹出菜单(PopupMenu)。下面是小例子的代码:

    public class PopupMenuTest extends Activity{ 
        private TextView infoTv = null; 

        @Override 
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState); 
            setContentView(R.layout.popup_layout); 
            infoTv = (TextView)findViewById(R.id.pop_pureInfo);  
            showInfo("点击这个Textview,将演示Pop-up Menu.");  
           //点击textView时,弹出popupMenu  
            infoTv.setOnClickListener(new OnClickListener() {     
                @Override 
                public void onClick(View v) { 
                    showPopupMenu();                
                } 
            }); 
        } 
        
        private void showPopupMenu(){ 
            PopupMenu popMenu = new PopupMenu(this,infoTv); 
            popMenu.inflate(R.menu.my_popup); 
            //popMenu.getMenuInflater().inflate(R.menu.my_popup, popMenu.getMenu());  //Android 4.0之前的处理
            popMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {             
                //不能通过Activity的onOptionsItemSelected()来实现Popup菜单项的触发,而是通过click listener的方式。
                public boolean onMenuItemClick(MenuItem item) {  
                    showInfo("Item clicked : " + item.toString());
                    return false; 
                } 
            }); 
            showInfo(popMenu.toString());
            popMenu.show(); 
        } 
        
        private void showInfo(String info){ 
            infoTv.append(info + " "); 
            Log.d(getLocalClassName(),info); 
        } 

    最初,运行的效果如上左图,popup菜单挤在最上面,根本看不全。而我们期待的是右图的方式。这是因为某view的popup菜单在某view的外面显示,即不会遮挡某view。一开始,我们将textview设置为全屏模式,没有预留空余位置显示,所以成了左图那样,效果很不理想。后来我们将textView的layout_height改为wrap_content,就得到了期待的菜单方式。

    如果view所占的空间很大,而菜单的内容有比较多,可以考虑使用contextMenu。

    本博文涉及的例子代码,可以在Pro Android学习:Menu中下载。

    相关链接: 我的Android开发相关文章

  • 相关阅读:
    proxool数据库连接池用法
    SQL Server 用链接server 同步MySQL
    使用DNSCrypt解决Dropbox污染问题
    POJ 1952 BUY LOW, BUY LOWER DP记录数据
    使用doxygen为C/C++程序生成中文文档
    构造器(二)----指定构造器、便利构造器
    Spring Boot 部署与服务配置
    排序算法c语言描述---冒泡排序
    【转】Android Studio系列教程一--下载与安装
    【转】Windows环境下Android Studio v1.0安装教程
  • 原文地址:https://www.cnblogs.com/blongfree/p/5047968.html
Copyright © 2011-2022 走看看