第1例(仿微信顶部菜单)

【第1例(仿微信顶部菜单)】核心思想:PopupWindow的使用
效果图如下 第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; } }); } }

    推荐阅读