欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android popupwindow仿微信右上角菜单

程序员文章站 2022-03-23 09:25:18
popupwindow是安卓中的一个弹出窗口类,可以弹出指定的一个布局文件,还是很方便的,下面演示如何制作一个微信的右上角点击弹出菜单。 首先定义首页布局,默认取消标题栏...

popupwindow是安卓中的一个弹出窗口类,可以弹出指定的一个布局文件,还是很方便的,下面演示如何制作一个微信的右上角点击弹出菜单。
android popupwindow仿微信右上角菜单

首先定义首页布局,默认取消标题栏
找到styles.xml文件,将parent属性设置为Theme.AppCompat.Light.NoActionBar,这样就取消了原本的标题栏了。
如图:
android popupwindow仿微信右上角菜单

选择布局文件夹,创建一个新的布局文件,我起名叫做menu,名字随你喜欢

android popupwindow仿微信右上角菜单

下面贴出布局代码




    

我是使用的是按钮方案作为菜单的,不是列表,这样做的好处是方便添加按钮,并且我们弹出的菜单不多,就不需要使用到列表了。其中值得注意的是,文字设置如果字数不一样,需要使用paddingRight进行微调,边距代码无需过多说明,按钮的背景图片就是图标,后面会打包给大家。
布局效果图片:

android popupwindow仿微信右上角菜单

制作好了菜单布局以后,接着制作首页界面,可以看到需要一个标题,然后一个图标按钮。
创建一个TextView,宽度设置为和窗口一样宽,高度设置为40dp,内边距根据需要设置即可。再添加一个按钮,设置layout_alignParentRight属性为true,按钮就会浮动到最右边了
下面贴出主布局的代码vcD4NCjxwcmUgY2xhc3M9"brush:java;">

这儿为点击的按钮设置了点击事件,就不需要再去Java代码绑定了,免得麻烦。事件名称为:Onmenu。
在MainActivity.java中添加Onmenu方法。

public void Onmenu(View v){
        View popupwindow_menu=getLayoutInflater().inflate(R.layout.menu,null,false);
        pop=new PopupWindow(popupwindow_menu, ActionBar.LayoutParams.WRAP_CONTENT,ActionBar.LayoutParams.WRAP_CONTENT,true);
        pop.showAsDropDown(findViewById(R.id.btn_menu),0,0);
    }

android popupwindow仿微信右上角菜单

创建一个布局文件,使用getLayoutInflater().inflate来载入我们创建的一个布局文件,其中pop为在加载主方法的时候定义了一个PopupWindow类,要先定义好,以免点击事件发生的时候多次创建。
PopupWindow构造函数可以传入初始化参数,PopupWindow(View contentView, int width, int height) ,参数一是view,参数二是宽度,参数三是高度
最终的弹出方法是pop.showAsDropDown。

值得注意的

安卓5.0,是不会点击其他地方这个菜单消失的,所以,我们需要兼容5.0版本的话,要给代码加上点击其他地方消失,设置setOnTouchListener方法,重写onTouch方法。判断pop不为空,并且pop正显示。判断有的话,先隐藏pop,并且销毁他。

popupwindow_menu.setOnTouchListener(new View.OnTouchListener(){
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (pop!=null && pop.isShowing()){
                    pop.dismiss();
                    pop=null;
                }
                return false;
            }
        });

最后需要给菜单绑定上事件,我这儿偷个懒就直接给onclick加上了,你们可以自己去重写onclick类

    public void qunzu(View v){
        Toast.makeText(this,"我是群组",Toast.LENGTH_SHORT).show();
        pop.dismiss();
    }

点击第一个菜单后,就会弹出一个提示了。