zoukankan      html  css  js  c++  java
  • Android Studio之菜单栏制作 (五)

    弹出式菜单
    1、调用new PopupMenu(Context context,View anchor)创建下拉菜单,anchor代表要激发该弹出菜单的组件

    2、调用MenuInflater的inflate()方法将菜单资源填充到PopupMenu中

    turn super.onOptionsItemSelected(item);
    }
    return true;
    }

    }

    弹出式菜单
    1、调用new PopupMenu(Context context,View anchor)创建下拉菜单,anchor代表要激发该弹出菜单的组件

    2、调用MenuInflater的inflate()方法将菜单资源填充到PopupMenu中

    3、调用PopupMenu的show()方法显示弹出式菜单

       package com.example.myapplication;
    
       import androidx.annotation.RequiresApi;
       import androidx.appcompat.app.AppCompatActivity;
       import androidx.appcompat.view.menu.MenuPopupHelper;
    
       import android.annotation.SuppressLint;
       import android.os.Build;
       import android.os.Bundle;
       import android.view.ContextMenu;
       import android.view.Menu; 
       import android.view.MenuInflater;
       import android.view.MenuItem;
       import android.view.SubMenu; 
       import android.view.View;
       import android.widget.Button;
       import android.widget.PopupMenu;
       import android.widget.TextView;
       import android.widget.Toast;
       import android.widget.TextView;
       import android.widget.Toast; 
       import java.lang.reflect.Field;
       import java.lang.reflect.Method;
    
        public class MainActivity extends AppCompatActivity {
        //定义按钮的全局变量
        private Button button;
        private TextView textView;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            // 绑定按钮的资源(利用id找到xml文件中的按钮)
            button = findViewById(R.id.button);
            textView = findViewById(R.id.textView);
            registerForContextMenu(textView);
    
            button.setOnClickListener(new View.OnClickListener() {
                @SuppressLint("RestrictedApi")
                @RequiresApi(api = Build.VERSION_CODES.KITKAT)
                @Override
                public void onClick(View v) {
                    //创建PopupMenu
                    PopupMenu popupMenu = new PopupMenu(MainActivity.this,button);
                    //加载菜单资源
                    popupMenu.getMenuInflater().inflate(R.menu.menu2, popupMenu.getMenu());
                    //菜单事件监听
                    popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){
    
                        @Override
                        public boolean onMenuItemClick(MenuItem item) {
                            switch (item.getItemId()){
                                case R.id.bu1:
                                    Toast.makeText(MainActivity.this,"复制",Toast.LENGTH_LONG).show();
                                    break;
                                case R.id.bu2:
                                    Toast.makeText(MainActivity.this,"粘贴",Toast.LENGTH_LONG).show();
                                    break;
                                case R.id.bu3:
                                    Toast.makeText(MainActivity.this,"清除",Toast.LENGTH_LONG).show();
                                    break;
                                default:
                                    break;
                            }
                            return true;
                        }
                    });
                    //使用反射,强制显示菜单图标
                     try {
                        Field field = popupMenu.getClass().getDeclaredField("mm");
                            field.setAccessible(true);
                        MenuPopupHelper menuPopupHelper = (MenuPopupHelper) field.get(popupMenu);
                            menuPopupHelper.setForceShowIcon(true);
                   }catch (IllegalAccessException | NoSuchFieldException e){
                        e.printStackTrace();
                }
                    popupMenu.show();
                }
            });
    
        }
     }

    关于Java代码有很多包名,如果有哪个方法没有找到什么包可以 “Alt+Enter”快捷键帮你找到这个地方的可能需要要导入的包或者其他。

    整个代码的引入是从第一个写到最后一个菜单的累加的。

  • 相关阅读:
    【转】【SEE】基于SSE指令集的程序设计简介
    【转】【Asp.Net】asp.net服务器控件创建
    ControlTemplate in WPF ——ScrollBar
    ControlTemplate in WPF —— Menu
    ControlTemplate in WPF —— Expander
    ControlTemplate in WPF —— TreeView
    ControlTemplate in WPF —— ListBox
    ControlTemplate in WPF —— ComboBox
    ControlTemplate in WPF —— TextBox
    ControlTemplate in WPF —— RadioButton
  • 原文地址:https://www.cnblogs.com/wangdayang/p/14913038.html
Copyright © 2011-2022 走看看