第二天Menu菜单和PopupWindow窗口

↘锁芯ラ 提交于 2019-12-31 02:18:55

Menu菜单

1.系统菜单OptionsMenu

在这里插入图片描述

1.在res下面创建一个menu文件夹,并新建一个xml文件作为OptionMenu的布局文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
        <!--showAsAction属性:always总是  never 从不 ifroom 能显示就显示 默认是nerver-->
        <item android:id="@+id/blue" android:title="蓝色" app:showAsAction="never" ></item>
        <item android:id="@+id/red" android:title="红色" > </item>
        <item android:id="@+id/green" android:title="绿色" ></item>
</menu>

2.Activity重写onCreateOptionsMenu加载资源文件
3.Activity重写onOptionsItemSelected加设置事件监听

	@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //静态添加  (在res文件夹下创建menu文件夹  menu文件夹下创建menu文件)
        getMenuInflater().inflate(R.menu.menu_layout, menu);//加载menu.xml文件

//        //动态添加
	   /**
         *
         * 第一个int类型的group ID参数,代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单按钮
         * 第二个int类型的item ID参数,代表的是项目编号。这个参数非常重要,一个item ID对应一个menu中的选项。
         * 第三个int类型的order ID参数,代表的是菜单项的显示顺序。默认是0,表示菜单的显示顺序就是按照add的显示顺序来显示。
         * 如果两个位置数值一样,那么先定义的拍前面。而且,groupid并不影响排列顺序。
         * 第四个String类型的title参数,表示选项中显示的文字
         */
//        menu.add(1, 1, 1, "11111");
//        menu.add(1, 2, 3, "22222");
//        menu.add(1, 3, 2, "33333");
//        //子菜单
//        SubMenu subMenu = menu.addSubMenu(1, 4, 6, "213124");
//        subMenu.add(1, 5, 5, "14322242464");

	    return super.onCreateOptionsMenu(menu);
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int itemId = item.getItemId();
        switch (itemId) {
            case R.id.a1:
                Toast.makeText(this, ""+item.getTitle(), Toast.LENGTH_SHORT).show();
                break;
            case R.id.a2:
                Toast.makeText(this, ""+item.getTitle(), Toast.LENGTH_SHORT).show();
                break;
            case R.id.a3:
                Toast.makeText(this, ""+item.getTitle(), Toast.LENGTH_SHORT).show();
                break;
        }
        return super.onOptionsItemSelected(item);
    }

2.上下文菜单ContextMenu(长按出现)

在这里插入图片描述
步骤流程:

1.在res下面创建一个menu文件夹,并新建一个xml文件作为ContextMenu的布局文件
2.Activity重写onCreateConextMenu加载资源文件
3.Activity重写onConextItemSelected设置事件监听
4.为控件添加长按属性并将菜单绑定到这个控件上:registerForContextMenu(控件)

public class MainActivity extends AppCompatActivity {
    private TextView hello;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        hello = findViewById(R.id.hello);//初始化控件
        registerForContextMenu(hello);//绑定
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        getMenuInflater().inflate(R.menu.menu_layout, menu);//获取menu
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        int itemId = item.getItemId();
        switch (itemId) {
            case R.id.red:
                hello.setTextColor(Color.parseColor("#ff0000"));
                break;
            case R.id.yellow:
                hello.setTextColor(Color.parseColor("#FFEB3B"));
                break;
        }
        return super.onContextItemSelected(item);
    }
}

3.弹出菜单

在这里插入图片描述
实现流程:

步骤1:在res下面创建一个menu文件夹,并新建一个xml文件作为PoupMenu的布局文件。
步骤2:把PopupMenu相关逻辑封装到showPopupMenu()方法中,包含PopupMenu的实例化、布局设置、显示、添加MenuItem的点击监听及响应等
步骤3:为控件设置事件监听直接调用showPopupMenu()方法

xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@+id/red" android:title="红色" >  </item >
    <item android:id="@+id/yellow"  android:title="黄色" > </item >


</menu>

Java代码:

			    PopupMenu popupMenu = new PopupMenu(Main2Activity.this, btn);//创建popupMenu

                popupMenu.inflate(R.menu.menu_layout);//获取布局文件

                popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {//popupMenu点击事件
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        switch(item.getItemId()){
                            case R.id.red:
                                btn.setTextColor(Color.parseColor("#990000"));
                                break;
                            case R.id.yellow:
                                btn.setTextColor(Color.parseColor("#FFEB3B"));
                                break;
                        }
                        return false;
                    }
                });
                popupMenu.show();//展示

4,PopupWindow

PopupWindow popupWindow = new PopupWindow(Main3Activity.this);//创建PopupWindow

                View inflate = LayoutInflater.from(Main3Activity.this).inflate(R.layout.layout, null);//获取内容布局

                popupWindow.setContentView(inflate);//加载布局文件
                popupWindow.setHeight(300);//设置宽
                popupWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);//设置高

                popupWindow.setOutsideTouchable(true);//点击外部消失

                //设置窗体的透明度
                WindowManager.LayoutParams attributes = getWindow().getAttributes();
                attributes.alpha = 0.5f;
                getWindow().setAttributes(attributes);
                //消失监听
                popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
                    @Override
                    public void onDismiss() {
                        WindowManager.LayoutParams attributes = getWindow().getAttributes();
                        attributes.alpha = 1.0f;
                        getWindow().setAttributes(attributes);
                    }
                });

                //第一种
//                popupWindow.showAsDropDown(btn, 100, 100);

                //第二种
                View inflate1 = LayoutInflater.from(Main3Activity.this).inflate(R.layout.activity_main3, null);
                popupWindow.showAtLocation(inflate1, Gravity.CENTER, 0, 0);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!