自定义菜单
16lz
2022-07-30
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="134dip" android:id="@+id/launcher_menu" android:gravity="bottom" android:clickable="true"android:focusable="true" > <LinearLayout android:layout_width="fill_parent" android:layout_height="67dip" android:orientation="horizontal" android:gravity="center" > <LinearLayout android:id="@+id/layout_item_1" android:layout_width="fill_parent" android:layout_height="67dip" android:layout_weight="1" android:orientation="vertical" android:clickable="true" android:focusable="true" android:background="@drawable/launcher_menu_selector" android:gravity="center" > <TextView android:id="@+id/menu_item_text_1" android:layout_width="wrap_content" android:layout_height="fill_parent" android:textColor="#000000" android:includeFontPadding="false" android:gravity="center" /> </LinearLayout> <LinearLayout android:id="@+id/layout_item_2" android:layout_width="fill_parent" android:layout_height="67dip" android:layout_weight="1" android:orientation="vertical" android:clickable="true" android:focusable="true" android:background="@drawable/launcher_menu_selector" android:gravity="center" > <TextView android:id="@+id/menu_item_text_2" android:layout_width="wrap_content" android:layout_height="fill_parent" android:textColor="#000000" android:includeFontPadding="false" android:gravity="center" /> </LinearLayout> <LinearLayout android:id="@+id/layout_item_3" android:layout_width="fill_parent" android:layout_height="67dip" android:layout_weight="1" android:orientation="vertical" android:clickable="true" android:focusable="true" android:background="@drawable/launcher_menu_selector" android:gravity="center" > <TextView android:id="@+id/menu_item_text_3" android:layout_width="wrap_content" android:layout_height="fill_parent" android:textColor="#000000" android:includeFontPadding="false" android:gravity="center" /> </LinearLayout> </LinearLayout><LinearLayout android:layout_width="fill_parent" android:layout_height="67dip" android:orientation="horizontal" android:gravity="center" > <LinearLayout android:id="@+id/layout_item_4" android:layout_width="fill_parent" android:layout_height="67dip" android:layout_weight="1" android:orientation="vertical" android:clickable="true" android:focusable="true" android:background="@drawable/launcher_menu_selector" android:gravity="center" > <TextView android:id="@+id/menu_item_text_4" android:layout_width="wrap_content" android:layout_height="fill_parent" android:textColor="#000000" android:includeFontPadding="false" android:gravity="center" /> </LinearLayout> <LinearLayout android:id="@+id/layout_item_5" android:layout_width="fill_parent" android:layout_height="67dip" android:layout_weight="1" android:orientation="vertical" android:clickable="true" android:focusable="true" android:background="@drawable/launcher_menu_selector" android:gravity="center" > <TextView android:id="@+id/menu_item_text_5" android:layout_width="wrap_content" android:layout_height="fill_parent" android:textColor="#000000" android:includeFontPadding="false" android:gravity="center" /> </LinearLayout> <LinearLayout android:id="@+id/layout_item_6" android:layout_width="fill_parent" android:layout_height="67dip" android:layout_weight="1" android:orientation="vertical" android:clickable="true" android:focusable="true" android:background="@drawable/launcher_menu_selector" android:gravity="center" > <TextView android:id="@+id/menu_item_text_6" android:layout_width="wrap_content" android:layout_height="fill_parent" android:textColor="#000000" android:includeFontPadding="false" android:gravity="center" /> </LinearLayout> </LinearLayout></LinearLayout>
@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if(keyCode == KeyEvent.KEYCODE_MENU){showLauncherMenu(keyCode, event);return true;}...}
private PopupWindow menuWindow;private void showLauncherMenu(int keyCode, KeyEvent event) {if(keyCode == KeyEvent.KEYCODE_MENU){int[] menuItemLayoutResId = {R.id.layout_item_1, R.id.layout_item_2, R.id.layout_item_3,R.id.layout_item_4, R.id.layout_item_5, R.id.layout_item_6};int[] menuItemTextViewResId = {R.id.menu_item_text_1, R.id.menu_item_text_2, R.id.menu_item_text_3,R.id.menu_item_text_4, R.id.menu_item_text_5, R.id.menu_item_text_6};if(null == menuWindow){final View layout = View.inflate(this, R.layout.launcher_menu, null);menuWindow = new PopupWindow(layout,LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);for(int i=0; i<6; i++){...//处理菜单项点击事件,菜单图标、文字等//菜单显示后,焦点移动到了PopupWindow上的菜单项,需要在菜单项捕获Menu键以达到隐藏菜单的效果LinearLayout menuItemLayout = (LinearLayout)layout.findViewById(menuItemLayoutResId[i]);menuItemLayout.setOnKeyListener(new OnKeyListener(){@Overridepublic boolean onKey(View v, int keyCode, KeyEvent event) {switch (keyCode) { case KeyEvent.KEYCODE_MENU: if(event.getAction() == KeyEvent.ACTION_DOWN){ if (menuWindow != null && menuWindow.isShowing()) { menuWindow.dismiss(); } } break; }return false;}});}layout.setFocusable(true);layout.setFocusableInTouchMode(true);layout.setOnKeyListener(new OnKeyListener(){@Overridepublic boolean onKey(View v, int keyCode, KeyEvent event) {switch (keyCode) { case KeyEvent.KEYCODE_MENU: if(event.getAction() == KeyEvent.ACTION_DOWN){ if (menuWindow != null && menuWindow.isShowing()) { menuWindow.dismiss(); } } case KeyEvent.KEYCODE_DPAD_DOWN: case KeyEvent.KEYCODE_DPAD_UP: case KeyEvent.KEYCODE_DPAD_LEFT: case KeyEvent.KEYCODE_DPAD_RIGHT: layout.findViewById(R.id.layout_item_1).requestFocus(); break; }return false;}});}if(!menuWindow.isShowing()){//处理菜单项"添加"是否可用mMenuAddInfo = mWorkspace.findAllVacantCellsFromModel();boolean isAddEnabled = mMenuAddInfo != null && mMenuAddInfo.valid;LinearLayout layout_item_add = (LinearLayout)menuWindow.getContentView().findViewById(R.id.layout_item_1);layout_item_add.requestFocus();layout_item_add.setClickable(isAddEnabled);layout_item_add.setBackgroundResource(isAddEnabled ? R.drawable.launcher_menu_selector : R.drawable.launcher_menu_disabled);Drawable icon = ThemeParser.loadMenuIcon(0);icon.setBounds(0, 0, icon.getIntrinsicWidth(), icon.getIntrinsicHeight());icon.setAlpha(isAddEnabled ? 0xFF :(int)(0.2 * 0xFF));TextView text_item_add = (TextView)menuWindow.getContentView().findViewById(R.id.menu_item_text_1);text_item_add.setTextColor(isAddEnabled ? Color.parseColor("#000000") : R.color.gray);text_item_add.setCompoundDrawables(null, icon, null, null);boolean isOrientationLandscape = ScreenUtil.isOrientationLandscape(this);if(isOrientationLandscape){menuWindow.setHeight(ScreenUtil.dip2px(this, 67));}else{menuWindow.setHeight(ScreenUtil.dip2px(this, 134));}((LinearLayout)menuWindow.getContentView().findViewById(R.id.launcher_menu)).setBackgroundDrawable(ThemeParser.loadThemeMenuBackground(isOrientationLandscape));menuWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.transparent));menuWindow.setFocusable(true);menuWindow.setOutsideTouchable(true);//设置菜单显示隐藏的动画menuWindow.setAnimationStyle(R.style.PopupAnimation);menuWindow.showAtLocation(findViewById(R.id.drag_layer), Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0);menuWindow.update();}else{menuWindow.dismiss();}}}
更多相关文章
- Android之菜单总结
- Android学习篇之Menu的使用
- TabHost与RadioGroup结合完成的菜单【带效果图】5个Activity
- android 音效处理 (2)
- Android开发之消息处理机制(一)——Handler
- android 音效处理 (2)
- SlidingMenu和ActionBarSherlock结合做出出色的App布局,Facebook
- [android]在上下文菜单的选中事件中获取列表选中的元素
- android api 中文 (74)—— AdapterView.AdapterContextMenuInfo