第1例:仿微信顶部菜单

核心思想:PopupWindow的使用

效果图如下

第1例:仿微信顶部菜单_第1张图片
仿微信顶部菜单.gif

功能实现过程

1、strings.xml


    仿微信顶部菜单
    微信
    发起群聊
    添加好友
    扫一扫
    收付款
    帮助与反馈


2、menu.xml




    

3、activity_main.xml



    
    

    

4、MainActivity.java文件 核心方法实现流程

public class MainActivity extends AppCompatActivity {

    private static final String TAG = MainActivity.class.getSimpleName();
    PopupWindow popupWindow;
    private RelativeLayout rltRootView;


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

        rltRootView = (RelativeLayout) findViewById(R.id.rlt_root_view);
    }
    public void OnMenu(View view){
        // 获取自定义的菜单布局文件
        View popupWindow_view = getLayoutInflater().inflate(R.layout.menu, null,false);
        // 创建PopupWindow实例,设置菜单宽度和高度为包裹其自身内容
        popupWindow = new PopupWindow(popupWindow_view, ActionBar.LayoutParams.WRAP_CONTENT,
                ActionBar.LayoutParams.WRAP_CONTENT, true);
        //设置菜单显示在按钮的下面
        popupWindow.showAsDropDown(findViewById(R.id.btn_menu),0,0);

        //点击发起群聊功能
       Button btnChat =  (Button) popupWindow_view.findViewById(R.id.btn_chat);
        btnChat.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.d(TAG,"onClick===============");
                //如果菜单存在并且为显示状态,就关闭菜单并初始化菜单
                if (popupWindow != null && popupWindow.isShowing()) {
                    Log.d(TAG,"opopupWindow != null && popupWindow.isShowing()===============");
                    popupWindow.dismiss();
                    popupWindow = null;
                }else {
                    Log.d(TAG,"opopupWindow == null ===============");
                }
            }
        });

        // 点击其他地方消失
        //注意:如果menu布局中,item选项为Button的话,此方法不起作用,应该是跟Button的事件传递有关
        popupWindow_view.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Log.d(TAG,"onTouch===============");
                //如果菜单存在并且为显示状态,就关闭菜单并初始化菜单
                if (popupWindow != null && popupWindow.isShowing()) {
                    Log.d(TAG,"opopupWindow != null && popupWindow.isShowing()===============");
                    popupWindow.dismiss();
                    popupWindow = null;
                }else {
                    Log.d(TAG,"opopupWindow == null ===============");
                }
                return false;
            }
        });
    }
}

你可能感兴趣的:(第1例:仿微信顶部菜单)