当前位置: 移动技术网 > 移动技术>移动开发>Android > android popupwindow仿微信右上角菜单

android popupwindow仿微信右上角菜单

2017年12月18日  | 移动技术网移动技术  | 我要评论

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

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

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

创建新布局

下面贴出布局代码




    

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

布局效果图片

制作好了菜单布局以后,接着制作首页界面,可以看到需要一个标题,然后一个图标按钮。
创建一个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);
    }

主类代码

创建一个布局文件,使用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();
    }

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网