public class MainAcvtivity extends Activity {
private int[] nameArr = new int[]{R.string.menu1,R.string.menu2,R.string.menu3,R.string.menu4};
private int[] imageArr = new int[]{R.drawable.menu1,R.drawable.menu2,R.drawable.menu3,R.drawable.menu4};
private MyMenu myMenu;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initMenu();
}
private void initMenu(){
myMenu = new MyMenu(this, nameArr, imageArr, 4) {
@Override
public void OnItemClick(int viewId) {
switch (viewId) {
case R.string.menu1:
Toast.makeText(MainAcvtivity.this,getString(R.string.menu1), Toast.LENGTH_SHORT).show();
break;
case R.string.menu2:
Toast.makeText(MainAcvtivity.this,getString(R.string.menu2), Toast.LENGTH_SHORT).show();
break;
case R.string.menu3:
Toast.makeText(MainAcvtivity.this,getString(R.string.menu3), Toast.LENGTH_SHORT).show();
break;
case R.string.menu4:
Toast.makeText(MainAcvtivity.this,getString(R.string.menu4), Toast.LENGTH_SHORT).show();
break;
}
myMenu.menuDismiss();
}
};
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add("menu");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
myMenu.showMenu(findViewById(R.id.main));
return false;
}
public abstract class MyMenu{
private MainAcvtivity AbsActivity;
private int[] nameArr;
private int[] imageArr;
private int count;
private PopupWindow mPopupWindow;
private ViewFlipper mViewFlipper;
private List<Map<String, Object>> data = new ArrayList<Map<String,Object>>();
public MyMenu(MainAcvtivity activity,int[] nameArr,int[] imageArr,int count){
this.AbsActivity = activity;
this.nameArr = nameArr;
this.imageArr = imageArr;
this.count = count;
initMenu();
}
public void initMenu(){
mViewFlipper = new ViewFlipper(AbsActivity);
LinearLayout mLinearLayout = (LinearLayout) AbsActivity.getLayoutInflater().inflate(R.layout.menu_view, null);
mViewFlipper.addView(mLinearLayout);
mViewFlipper.setFlipInterval(1000000);
GridView mGridView = (GridView) mLinearLayout.findViewById(R.id.menu_gridview);
mGridView.setNumColumns(count);
mPopupWindow = new PopupWindow(mViewFlipper, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
mPopupWindow.setBackgroundDrawable(new BitmapDrawable());
mPopupWindow.setFocusable(true);
mPopupWindow.update();
for (int i = 0; i < nameArr.length; i++) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("itemIamge", imageArr[i]);
map.put("itemText", AbsActivity.getString(nameArr[i]));
map.put("key", nameArr[i]);
data.add(map);
}
BaseAdapter adapter = new SimpleAdapter(AbsActivity, data, R.layout.menu_item, new String[]{"itemIamge","itemText"},
new int[]{R.id.menu_item_image,R.id.menu_item_text});
mGridView.setAdapter(adapter);
mGridView.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_MENU){
if(mPopupWindow != null){
mPopupWindow.dismiss();
}
}
return false;
}
});
mGridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
int key = Integer.parseInt( data.get(position).get("key").toString());
OnItemClick(key);
}
});
}
public void showMenu(View view){
if(mPopupWindow != null){
if(mPopupWindow.isShowing()){
mPopupWindow.dismiss();
}else{
mPopupWindow.getContentView().setEnabled(true);
mPopupWindow.showAtLocation(view, Gravity.BOTTOM, 0, 0);
mViewFlipper.startFlipping();
}
}
}
public void menuDismiss(){
if(mPopupWindow !=null && mPopupWindow.isShowing()){
mPopupWindow.dismiss();
}
}
public abstract void OnItemClick(int viewId);
}
分享到:
相关推荐
1. **创建自定义Menu** - 在`onCreateOptionsMenu(Menu menu)`中,通过调用`menu.add()`方法来添加菜单项。你可以设置其标题、图标、快捷键等属性。 - 使用`MenuItem`对象的`setOnMenuItemClickListener()`或`...
在Android开发中,自定义Menu和TabMenu是提升用户体验、个性化应用界面的重要手段。这篇“Android提高十八篇之自定义Menu(TabMenu)”的主题聚焦于如何在Android应用中创建和定制化自己的菜单栏和标签页功能。下面...
下面是一段示例代码,展示了如何创建一个简单的自定义menu菜单: ```java // 加载布局 LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View popupView = ...
本示例“android自定义弹出menu”着重介绍了如何创建一个类似于QuickContactBadge的自定义菜单,它具有出色的动画效果,提升了应用的用户体验。 QuickContactBadge是Android SDK中一个用于快速联系的组件,点击后...
总结,Android自定义标题栏是一项关键的UI定制技术,它让开发者能够创建符合品牌风格的界面,提升用户交互体验。通过学习和实践,我们可以熟练掌握自定义标题栏的各种技巧,包括但不限于添加菜单项、设置点击事件、...
下面是一个基础的实现: ```java public class CommonPopWindow extends PopupWindow { public CommonPopWindow(Context context, int layoutResId) { // 初始化PopupWindow,传入上下文和布局资源ID super...
本篇文章将深入探讨如何在Android系统中实现自定义菜单,并提供相关的知识点。 首先,我们来理解Android中的标准菜单(Menu)。在Android中,菜单通常在三种场景下出现:选项菜单(Option Menu)、上下文菜单...
本文将深入探讨如何实现Android自定义菜单,并结合QuickContactBadge控件的使用,为用户提供更加丰富的交互体验。 首先,我们来了解自定义菜单的基本概念。在Android中,菜单通常在Action Bar或Overflow Menu中显示...
本文将深入探讨如何在Android中实现自定义菜单,以达到类似UC浏览器的效果。 首先,我们需要理解Android菜单的基本概念。在Android中,菜单通常在三种场景下出现:选项菜单(Option Menu)、上下文菜单(Context ...
本DEMO,"Android自定义菜单属性DEMO",旨在教你如何为Android应用创建一个带有自定义属性的菜单按钮。这个教程是基于CSDN博主janice0529的一篇博客文章,你可以通过提供的链接获取详细的源码解析。 首先,我们要...
本文将详细介绍如何在Android中自定义实现一个侧滑菜单。 首先,要创建侧滑菜单,我们需要继承自`ViewGroup`。这是因为`ViewGroup`是所有布局容器的基础类,它提供了处理子视图布局的能力。在自定义控件中,我们...
总结来说,Android编程自定义菜单实现方法主要包括以下步骤: 1. 创建菜单布局:使用XML定义菜单的结构,包括菜单项的数量、位置和样式。 2. 隐藏和显示菜单:通过设置`View`的`visibility`属性,结合动画效果实现...
总之,自定义Dialog实现Menu菜单是Android开发中的一个实用技能,通过结合DialogFragment、GridView和自定义适配器,我们可以创建出风格独特、功能强大的交互界面。这个过程不仅能帮助开发者掌握Android UI设计,也...
本篇文章将详细探讨如何实现一个Android自定义组件——卫星菜单(Satellite Menu),也称为ArcMenu。卫星菜单是一种以中心按钮为触发点,围绕中心点展开的一组按钮布局,常用于导航或展示附加功能。 首先,我们定义...
接下来,我们讨论如何实现自定义的`Menu`。通常,我们会创建一个包含多个选项的布局文件(如`BottomMenuDemo`),然后加载到`PopupWindow`中。例如,`BottomMenuDemo.xml`可能包含几个`Button`或`TextView`作为菜单...
本教程将通过一个名为“android自定义字体Demo”的项目来详细讲解如何在Android应用中实现自定义字体的加载和切换。 首先,我们需要了解Android系统对字体的支持。Android原生支持的字体类型主要是TrueType Font ...