• 练习选择菜单(optionmenu)、上下文菜单(Contextmenu)、弹出菜单(popupmenu)综合小demo


    练习选择菜单(optionmenu)、上下文菜单(Contextmenu)、弹出菜单(popupmenu)综合小demo

     

                                            ————安德风

     

     

    一、最终效果演示:

     

     

     

    二、布局设计

    1、activity_main.xml布局设计源代码

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     xmlns:app="http://schemas.android.com/apk/res-auto"
     4     xmlns:tools="http://schemas.android.com/tools"
     5     android:layout_width="match_parent"
     6     android:layout_height="match_parent"
     7     android:orientation="vertical"
     8     tools:context=".MainActivity" >
     9 
    10     <Button
    11         android:id="@+id/context"
    12         android:layout_width="match_parent"
    13         android:layout_height="wrap_content"
    14         android:text="上下文菜单" />
    15 
    16     <Button
    17         android:id="@+id/popup"
    18         android:layout_width="match_parent"
    19         android:layout_height="wrap_content"
    20         android:text="弹出菜单" />
    21 </LinearLayout>

     

     

    2、menu(菜单布局设计)

     2-1、上下文菜单(contextmenu)contextmenu.xml源代码

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <menu xmlns:android="http://schemas.android.com/apk/res/android">
     3 
     4     <item
     5         android:id="@+id/copy"
     6         android:title="复制" />
     7     <item
     8         android:id="@+id/paste"
     9         android:title="粘贴" />
    10 </menu>

    2-2、选择菜单(optionmenu)optionmenu.xml源代码

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <menu xmlns:android="http://schemas.android.com/apk/res/android"
     3     xmlns:app="http://schemas.android.com/apk/res-auto">
     4 
     5     <item
     6         android:id="@+id/Create"
     7         android:title="创建"
     8         app:showAsAction="always"
     9         android:icon="@drawable/ic_launcher_background"
    10         />
    11     <!-- showAsAction属性值:
    12     always:直接在标题栏显示
    13     never:不显示
    14     withText:控制图标和文本一起显示
    15     ifRoom:有空间就显示(这个根据手机分辨率显示)-->
    16 
    17     <item
    18         android:id="@+id/save"
    19         android:title="保存"
    20         />
    21     <item
    22         android:id="@+id/more"
    23         android:title="更多功能……" >
    24         <menu >
    25             <item android:title="子菜单1" />
    26             <item
    27                 android:id="@+id/delete"
    28                 android:title="删除" />
    29             <item
    30                 android:id="@+id/exite"
    31                 android:title="退出" />
    32         </menu>
    33     </item>
    34 </menu>

    2-3、弹出菜单(opupmenu)opupmenu.xml源代码

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <menu xmlns:android="http://schemas.android.com/apk/res/android">
     3 
     4     <item
     5         android:id="@+id/rename"
     6         android:title="重命名" />
     7     <item
     8         android:id="@+id/cut"
     9         android:title="剪切" />
    10 </menu>

    三、功能实现 MainActivity.java源代码

      1 package com.example.menu2;
      2 
      3 import androidx.annotation.NonNull;
      4 import androidx.appcompat.app.AppCompatActivity;
      5 
      6 import android.os.Bundle;
      7 import android.util.Log;
      8 import android.view.ActionMode;
      9 import android.view.ContextMenu;
     10 import android.view.Menu;
     11 import android.view.MenuItem;
     12 import android.view.View;
     13 import android.widget.Button;
     14 import android.widget.PopupMenu;
     15 import android.widget.Toast;
     16 
     17 public class MainActivity extends AppCompatActivity {
     18 Button popunp;//声明弹出菜单按钮
     19     @Override
     20     protected void onCreate(Bundle savedInstanceState) {
     21         super.onCreate(savedInstanceState);
     22         setContentView(R.layout.activity_main);
     23 
     24         popunp=findViewById(R.id.popup);//寻找弹出菜单按钮ID
     25         popunp.setOnClickListener(new View.OnClickListener() { //给按钮建立监听器
     26             @Override   //实现按钮响应功能
     27             public void onClick(View v) {
     28                 //实例化PopupMenu对象(参数2:被View锁定)
     29                final PopupMenu menu=new PopupMenu(MainActivity.this,popunp);
     30               menu.getMenuInflater().inflate(R.menu.popupmenu,menu.getMenu());//加载弹出菜单布局文件
     31               //给弹出菜单建立监听器
     32                menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
     33                    @Override //实现弹出菜单交互功能
     34                    public boolean onMenuItemClick(MenuItem item) {
     35                        switch (item.getItemId()){
     36                            case R.id.rename:
     37                                Toast.makeText(MainActivity.this, "重命名", Toast.LENGTH_SHORT).show();
     38                                break;
     39                            case R.id.cut:
     40                                Toast.makeText(MainActivity.this, "剪切", Toast.LENGTH_SHORT).show();
     41                                break;
     42                        }
     43                        return false;
     44                    }
     45                });
     46               menu.show();//弹出菜单展示
     47             }
     48         });
     49 
     50 
     51 
     52         //实现上下文菜单绑定控件ID
     53         registerForContextMenu(findViewById(R.id.context));
     54 
     55         //在view长按事件中去启动上下文操作模式
     56 
     57         findViewById(R.id.context).setOnLongClickListener(new View.OnLongClickListener() {//按钮建立监听器
     58             @Override
     59             public boolean onLongClick(View v) {
     60                 startActionMode(cb);//开始启动活动模式
     61                 return false;
     62             }
     63         });
     64     }
     65 
     66 
     67     /**
     68      * 为按钮设置上下文操作模式:
     69      *①实现ActionMode.CallBack(活动模式来回调函数)
     70      * ②在view长按事件中去启动上下文操作模式
     71      */
     72 
     73 
     74         //实现ActionMode.CallBack(活动模式来回调函数)实例化
     75        ActionMode.Callback cb=new ActionMode.Callback() {
     76         @Override
     77         public boolean onCreateActionMode(ActionMode mode, Menu menu) {
     78             Log.e("TAG", "创建" );
     79             getMenuInflater().inflate(R.menu.contextmenu,menu);//加载上下文菜单布局文件
     80             return true;
     81         }
     82 
     83         @Override
     84         public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
     85             Log.e("TAG", "准备" );
     86             return true;
     87         }
     88 
     89         @Override
     90         public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
     91             Log.e("TAG", "点击" );
     92             switch (item.getItemId()){
     93                 case R.id.copy:
     94                     Toast.makeText(MainActivity.this, "复制", Toast.LENGTH_SHORT).show();
     95                     break;
     96                 case R.id.paste:
     97                     Toast.makeText(MainActivity.this, "粘贴", Toast.LENGTH_SHORT).show();
     98                     break;
     99             }
    100             return true;
    101         }
    102 
    103         @Override
    104         public void onDestroyActionMode(ActionMode mode) {
    105             Log.e("TAG", "结束" );
    106         }
    107 
    108 
    109     };
    110 
    111 
    112 
    113 
    114 
    115 
    116 
    117 /*
    118     //上下文菜单实现区域
    119 //创建上下文菜单方法
    120     @Override
    121     public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    122         getMenuInflater().inflate(R.menu.contextmenu,menu);//加载上下文菜单布局文件
    123 
    124     }
    125 //实现上下菜单交互功能
    126     @Override
    127     public boolean onContextItemSelected(@NonNull MenuItem item) {
    128        switch (item.getItemId()){
    129            case R.id.copy:
    130                Toast.makeText(this, "复制", Toast.LENGTH_SHORT).show();
    131                break;
    132            case R.id.paste:
    133                Toast.makeText(this, "粘贴", Toast.LENGTH_SHORT).show();
    134                break;
    135 
    136        }
    137        return true;
    138     }
    139 
    140 */
    141 
    142 
    143 
    144 
    145 
    146 
    147 
    148 
    149 
    150 
    151 
    152 
    153 
    154 
    155 
    156 
    157     //选择菜单实现区域
    158 
    159 //选择菜单方法创建
    160     @Override
    161     public boolean onCreateOptionsMenu(Menu menu) {
    162      getMenuInflater().inflate(R.menu.optionmenu,menu);//加载选择菜单布局文件
    163         return true;
    164     }
    165 //选择菜单实现交互功能
    166     @Override
    167     public boolean onOptionsItemSelected(MenuItem item) {
    168         switch (item.getItemId()){ //通过多分支选中选择菜单项目id
    169             case R.id.Create:   //当选中的是创建菜单项目id时,则Toast弹出框输出“创建”
    170                 Toast.makeText(this, "创建", Toast.LENGTH_SHORT).show();
    171                 break;
    172             case R.id.save: //当选中的是保存菜单项目id时,则Toast弹出框输出“创建”
    173                 Toast.makeText(this, "保存", Toast.LENGTH_SHORT).show();
    174                 break;
    175             case R.id.delete: //当选中的是删除菜单项目id时,则Toast弹出框输出“创建”
    176                 Toast.makeText(this, "删除", Toast.LENGTH_SHORT).show();
    177                 break;
    178             case R.id.exite: //当选中的是退出菜单项目id时,则执行退出当前界面
    179                finish();
    180         }
    181         return true;
    182     }
    183 }

    四、总结

    学会选择菜单(optionmenu)、上下文菜单(Contextmenu)、弹出菜单(popupmenu)布局设计以及交互功能实现

    我是安德风,以上就是简单概括总结,感谢大家关注与支持;有问题欢迎留言,看到后我会一一答复。

  • 相关阅读:
    ES6 Promise 用法转载
    移动端滚动性能优化
    Python之禅
    Day01~15
    Python
    第一章 Java起源
    IMP-00009: 导出文件异常结束 imp
    浏览器访问网页的详细内部过程
    数据库连接池
    连接数据库 六大步骤
  • 原文地址:https://www.cnblogs.com/adf520/p/12740054.html
Copyright © 2020-2023  润新知