天津网站建设中心,沈阳建站程序,晋江做网站模板,花都区建设工程造价管理网站右上菜单#xff0c;可以通过 重写 onCreateOptionsMenu指定 menu#xff0c; 重写 onOptionsItemSelected 来响应点击事件 不过 这个菜单在某些手机上弹出的有点卡顿#xff0c;而且如果不对主题进行设置#xff0c;会从actionbar 上直接弹出#xff0c;而不是下面 如果想…右上菜单可以通过 重写 onCreateOptionsMenu指定 menu 重写 onOptionsItemSelected 来响应点击事件 不过 这个菜单在某些手机上弹出的有点卡顿而且如果不对主题进行设置会从actionbar 上直接弹出而不是下面 如果想从下面弹出要先添加一个style style nameMenuStyle parentstyle/Widget.AppCompat.Light.PopupMenu.Overflowitem nameoverlapAnchorfalse/item/style 之后在activity引用的主题中添加一行 就行了 item nameactionOverflowMenuStylestyle/MenuStyle/item Menu在没有特别要求的情况还是很好用的但是如果要求比较复杂的时候就不如用PopupWindow了 要实现如图的效果 先拿到从美工拿到的图片 打开sdk的 tools文件夹 打开 draw9patch.bat 把图片拖进去 画黑边 左上两个方向的黑边 表示拉伸部分 右下表示布局中控件内容显示的区域 如果画错了 按住shift 抹掉 完成之后save 布局 1 ?xml version1.0 encodingutf-8?2 LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/android3 android:layout_widthwrap_content4 android:layout_heightwrap_content5 android:backgrounddrawable/pop_bg_shadow96 android:gravitycenter_horizontal7 android:orientationvertical8 9 10 LinearLayout11 android:idid/ll_action_config12 android:layout_widthmatch_parent13 android:layout_heightwrap_content14 android:gravitycenter_vertical15 android:orientationhorizontal16 android:padding10dp17 18 19 ImageView20 android:layout_width25dp21 android:layout_height25dp22 android:srcdrawable/pop_setting/23 24 TextView25 android:layout_widthwrap_content26 android:layout_heightwrap_content27 android:paddingLeft15dp28 android:text关联配置29 android:textColorcolor/white/30 31 /LinearLayout32 33 LinearLayout34 android:idid/ll_action_history35 android:layout_widthmatch_parent36 android:layout_heightwrap_content37 android:gravitycenter_vertical38 android:orientationhorizontal39 android:padding10dp40 41 42 ImageView43 android:layout_width25dp44 android:layout_height25dp45 android:srcdrawable/pop_history/46 47 TextView48 android:layout_widthwrap_content49 android:layout_heightwrap_content50 android:paddingLeft15dp51 android:text历史记录52 android:textColorcolor/white/53 54 /LinearLayout55 56 LinearLayout57 android:idid/ll_action_ip58 android:layout_widthmatch_parent59 android:layout_heightwrap_content60 android:gravitycenter_vertical61 android:orientationhorizontal62 android:padding10dp63 64 65 ImageView66 android:layout_width25dp67 android:layout_height25dp68 android:srcdrawable/pop_ip/69 70 TextView71 android:layout_widthwrap_content72 android:layout_heightwrap_content73 android:paddingLeft15dp74 android:textIP地址75 android:textColorcolor/white/76 77 /LinearLayout78 79 LinearLayout80 android:idid/ll_action_about81 android:layout_widthmatch_parent82 android:layout_heightwrap_content83 android:gravitycenter_vertical84 android:orientationhorizontal85 android:padding10dp86 87 88 ImageView89 android:layout_width25dp90 android:layout_height25dp91 android:srcdrawable/pop_about/92 93 TextView94 android:layout_widthwrap_content95 android:layout_heightwrap_content96 android:paddingLeft15dp97 android:text关于98 android:textColorcolor/white/99
100 /LinearLayout
101 /LinearLayout View Code 现在要实现点击 右上菜单 弹出 这个布局同时菜单的图标会变换。 在menu目录 新建一个xml 默认icon是 more_close ?xml version1.0 encodingutf-8?
menu xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoitemandroid:idid/action_menuandroid:icondrawable/more_closeandroid:title菜单app:showAsActionalways/item
/menu 回到activity Overridepublic boolean onCreateOptionsMenu(Menu menu) {this.menu menu;getMenuInflater().inflate(R.menu.face, menu);return super.onCreateOptionsMenu(menu);}Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case R.id.action_menu:View viewfindViewById(R.id.action_menu);showActionMenuPopup(view);break;}return super.onOptionsItemSelected(item);} 红色部分都是关键部分 先看 showActionMenuPopup 这个弹出菜单的方法 首先要改变菜单的图标 menu.getItem(0).setIcon(getResources().getDrawable(R.drawable.more_open)); 这个menu是 全局的 private Menu menu; 在 onCreateOptionsMenu 中 把这个menu初始化 之后 设置 PopupWindow 1 View viewLayoutInflater.from(this).inflate(R.layout.popup_actionmenu,null);2 actionmenupopupWindow new PopupWindow(view, LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);3 actionmenupopupWindow.setContentView(view);4 5 view.findViewById(R.id.ll_action_config).setOnClickListener(this);6 view.findViewById(R.id.ll_action_history).setOnClickListener(this);7 view.findViewById(R.id.ll_action_ip).setOnClickListener(this);8 view.findViewById(R.id.ll_action_about).setOnClickListener(this);9
10 actionmenupopupWindow.setFocusable(true);
11 actionmenupopupWindow.setBackgroundDrawable(new BitmapDrawable());
12
13 actionmenupopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
14 Override
15 public void onDismiss() {
16 menu.getItem(0).setIcon(getResources().getDrawable(R.drawable.more_close));
17 }
18 });
19
20 actionmenupopupWindow.showAsDropDown(v); 5-8 设置弹出菜单的点击事件 11 点击PopupWindow之外的地方PopupWindow消失 13-18 监听PopupWindow消失 改变菜单图标 20 showAsDropDown 从下方出现 肯定要是一个view的 回到onOptionsItemSelected 找到右上菜单的view 传入了方法中最后在这里使用 还有一个显示方法 直接指定位置不过要测量出状态栏和actionbar的高度 actionmenupopupWindow.showAtLocation(findViewById(R.id.action_menu),Gravity.RIGHT|Gravity.TOP ,0, getStatusBarHeight(this)getSupportActionBar().getHeight()); IOS有一个底部菜单控件 UIActionSheet 安卓方面想实现这个 有第三方的 ActionSheet 有 谷歌官方的design包 BottomSheet 用PopupWindow 也可以实现 rootview LayoutInflater.from(this).inflate(R.layout.activity_main,null); 1 View view LayoutInflater.from(this).inflate(R.layout.popup_camera_sel,null);2 bottompopupWindow new PopupWindow(view, LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);3 4 bottompopupWindow.setContentView(view);5 6 view.findViewById(R.id.ll_gallery).setOnClickListener(this);7 view.findViewById(R.id.ll_camera).setOnClickListener(this);8 view.findViewById(R.id.ll_cancle).setOnClickListener(this);9
10 WindowManager.LayoutParams lp getWindow().getAttributes();
11 lp.alpha 0.6f;
12 getWindow().setAttributes(lp);
13
14 bottompopupWindow.setFocusable(true);
15 bottompopupWindow.setBackgroundDrawable(new BitmapDrawable());
16 bottompopupWindow.setAnimationStyle(R.style.mypopwindow_anim_style);
17
18 bottompopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
19 Override
20 public void onDismiss() {
21 WindowManager.LayoutParams lp getWindow().getAttributes();
22 lp.alpha 1f;
23 getWindow().setAttributes(lp);
24 }
25 });
26 bottompopupWindow.showAtLocation(rootview, Gravity.BOTTOM, 0, 0); 10-12 18-25 改变屏幕的透明度 style 从底部升上来 降下去的动画 style namemypopwindow_anim_styleitem nameandroid:windowEnterAnimationanim/popshow_anim/item!-- 指定显示的动画xml --item nameandroid:windowExitAnimationanim/pophidden_anim/item!-- 指定消失的动画xml --/style show ?xml version1.0 encodingutf-8?
set xmlns:androidhttp://schemas.android.com/apk/res/androidtranslateandroid:duration500android:fromYDelta50%pandroid:toYDelta0 /
/set hide ?xml version1.0 encodingutf-8?
set xmlns:androidhttp://schemas.android.com/apk/res/androidtranslateandroid:duration500android:fromYDelta0android:toYDelta50%p /
/set 布局 ?xml version1.0 encodingutf-8?
LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:backgroundcolor/whiteandroid:orientationverticalandroid:gravitycenterLinearLayoutandroid:idid/ll_galleryandroid:layout_widthmatch_parentandroid:layout_height50dpandroid:gravitycenterTextViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text相册android:textColor#333333android:textSize20sp//LinearLayout!--TextView--!--android:layout_width200dp--!--android:layout_height1dp--!--android:background#838B8B--!--/--ImageViewandroid:srcdrawable/line_popandroid:scaleTypecenterCropandroid:layout_widthmatch_parentandroid:layout_heightwrap_content/LinearLayoutandroid:idid/ll_cameraandroid:layout_widthmatch_parentandroid:layout_height50dpandroid:gravitycenterTextViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text相机android:textColor#333333android:textSize20sp//LinearLayout!--TextView--!--android:layout_width200dp--!--android:layout_height1dp--!--android:background#838B8B--!--/--ImageViewandroid:srcdrawable/line_popandroid:scaleTypecenterCropandroid:layout_widthmatch_parentandroid:layout_heightwrap_content/LinearLayoutandroid:idid/ll_cancleandroid:layout_widthmatch_parentandroid:layout_height50dpandroid:gravitycenterTextViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text取消android:textSize20sp//LinearLayout/LinearLayout View Code 最后 记得响应完点击事件之后 dismiss 关闭PopupWindow 转载于:https://www.cnblogs.com/demon9/p/6021980.html