初学Android,引用了这篇文章的代码 http://www.cnblogs.com/jiezzy/archive/2012/08/15/2640584.html

使用PopupWindow制作自定义的菜单

先是Layout文件

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal" > <Button
android:id="@+id/menu_btnBackUp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:background="@drawable/backup"
android:layout_margin="0.5dp"
android:width="100dp" /> <Button
android:id="@+id/menu_btnRevert"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_margin="0.5dp"
android:background="@drawable/importing"
android:width="100dp" /> <Button
android:id="@+id/menu_btnCompany"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:background="@drawable/company"
android:layout_margin="0.5dp"
android:width="100dp" />
</LinearLayout> <LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="horizontal" > <Button
android:id="@+id/menu_btnCustom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="0.5dp"
android:layout_marginTop="5dp"
android:background="@drawable/customer"
android:width="100dp" /> <Button
android:id="@+id/menu_btnTeSe"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="0.5dp"
android:layout_marginTop="5dp"
android:background="@drawable/tese"
android:width="100dp" /> <Button
android:id="@+id/menu_btnTool"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="0.5dp"
android:layout_marginTop="5dp"
android:background="@drawable/setting"
android:width="100dp" />
</LinearLayout> </LinearLayout>

然后是一个Activity

package com.tdcontactapp.lz;

import com.tdcontactapp.CustomContactsActivity;
import com.tdcontactapp.EditAccountActivity;
import com.tdcontactapp.GroupContactsActivity;
import com.tdcontactapp.R;
import com.tdcontactapp.RecvertActivity;
import com.tdcontactapp.RemindActivity; import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.PopupWindow; public class LzMenuActivity extends Activity {
protected PopupWindow mPopupWindow = null;
protected Activity Context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
showBottomMenu();
} public void showBottomMenu() {
Context mContext = this;
LayoutInflater mLayoutInfalter = (LayoutInflater) this
.getSystemService(LAYOUT_INFLATER_SERVICE);
View menuView = mLayoutInfalter.inflate(R.layout.lz_popup, null); mPopupWindow = new PopupWindow(menuView, LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT); mPopupWindow
.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
mPopupWindow.setOutsideTouchable(true); // 设置是否允许在外点击使其消失,到底有用没? mPopupWindow.setAnimationStyle(android.R.style.Animation_Dialog);
mPopupWindow.update();
mPopupWindow.setTouchable(true);
mPopupWindow.setFocusable(true); menuView.setFocusableInTouchMode(true);
menuView.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if ((keyCode == KeyEvent.KEYCODE_MENU)
&& (mPopupWindow.isShowing())) {
mPopupWindow.dismiss();// 这里写明模拟menu的PopupWindow退出就行
return true;
}
return false;
}
});
/* 设置点击menu以外其他地方以及返回键退出 */ Button btnBackup=(Button)menuView.findViewById(R.id.menu_btnBackUp);
Button btnRevert=(Button)menuView.findViewById(R.id.menu_btnRevert);
Button btnCompany=(Button)menuView.findViewById(R.id.menu_btnCompany);
Button btnCustom=(Button)menuView.findViewById(R.id.menu_btnCustom);
Button btnTese=(Button)menuView.findViewById(R.id.menu_btnTeSe);
Button btnTool=(Button)menuView.findViewById(R.id.menu_btnTool); btnBackup.setOnClickListener(new btnClick("menu_btnBackUp"));
btnRevert.setOnClickListener(new btnClick("menu_btnRevert"));
btnCompany.setOnClickListener(new btnClick("menu_btnCompany"));
btnCustom.setOnClickListener(new btnClick("menu_btnCustom"));
btnTese.setOnClickListener(new btnClick("menu_btnTeSe"));
btnTool.setOnClickListener(new btnClick("menu_btnTool"));
} private class btnClick implements OnClickListener{
private String name;
public btnClick(String name){
this.name=name;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent=new Intent();
if(name.equals("menu_btnBackUp")){
intent.setClass(LzMenuActivity.this,CustomContactsActivity.class);
}
if(name.equals("menu_btnRevert")){
intent.setClass(LzMenuActivity.this,RecvertActivity.class);
}
if(name.equals("menu_btnCompany")){
intent.setClass(LzMenuActivity.this,GroupContactsActivity.class);
}
if(name.equals("menu_btnCustom")){
intent.setClass(LzMenuActivity.this,CustomContactsActivity.class);
}
if(name.equals("menu_btnTeSe")){
intent.setClass(LzMenuActivity.this,RemindActivity.class);
}
if(name.equals("menu_btnTool")){
intent.setClass(LzMenuActivity.this,EditAccountActivity.class);
}
startActivity(intent);
} } @Override
public boolean onCreateOptionsMenu(Menu menu) {
//Toast.makeText(LzMenuActivity.this, "菜单事件", Toast.LENGTH_LONG).show();
menu.add("menu");// 必须创建一项
return super.onCreateOptionsMenu(menu);
} @Override
public boolean onMenuOpened(int featureId, Menu menu) {
if (mPopupWindow != null) {
if (!mPopupWindow.isShowing()) {
/* 最重要的一步:弹出显示 在指定的位置(parent) 最后两个参数 是相对于 x / y 轴的坐标 */
View v= ((ViewGroup)findViewById(android.R.id.content)).getChildAt(0);
if(v==null)
return false;
mPopupWindow.showAtLocation(v,
Gravity.BOTTOM, 0, 0);
}
}
return false;// 返回为true 则显示系统menu
} }

只要另一个需要显示自定义菜单 的Activity 继承上面的类,就可以显示菜单

Android PopupWindow菜单的更多相关文章

  1. android PopupWindow使用实例

    注:点空白或菜单外隐藏popupwindow菜单: 但是,若点击有点击事件的组件则要再写代码手动隐藏: @Override public boolean onTouchEvent(MotionEven ...

  2. Android PopupWindow的使用技巧(转)

    Android PopupWindow的使用技巧 PopupWindow是Android上自定义弹出窗口,使用起来很方便. PopupWindow的构造函数为 public PopupWindow(V ...

  3. Android PopupWindow Dialog 关于 is your activity running 崩溃详解

    Android PopupWindow Dialog 关于 is your activity running 崩溃详解 [TOC] 起因 对于 PopupWindow Dialog 需要 Activi ...

  4. Android侧滑菜单代码实现

    前两天学习了hyman老师讲的Android侧滑菜单的实现,经过自己的整理分享出来给大家学习一下 现在很多APP都有菜单侧滑的功能,本篇文章主要讲解使用自定义的HorizontalScrollView ...

  5. Android PopupWindow的使用和分析

    Android PopupWindow的使用和分析 PopupWindow使用 PopupWindow这个类用来实现一个弹出框,可以使用任意布局的View作为其内容,这个弹出框是悬浮在当前activi ...

  6. android 三级菜单 BaseExpandableListAdapter

    在网上搜了非常长时间.没有找到合适的Android三级菜单.所以就自己动手写了一个,主要使用了BaseExpandableList来实现,通过三个布局文件来完毕相应的菜单项,详细实现请參照下图. wa ...

  7. Android滑动菜单框架完全解析,教你如何一分钟实现滑动菜单特效

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8744400 之前我向大家介绍了史上最简单的滑动菜单的实现方式,相信大家都还记得.如 ...

  8. 【转】Android 系统菜单与自定义菜单

    Android 系统菜单与自定义菜单实现方法如下:系统菜单显示DefaultMenu.java package com.wxz.menu; import com.wxz.menu.R; import  ...

  9. BottomBar之Android底部菜单

    BottomBar之Android底部菜单 前言:开源项目BottomBar,实现Android底部菜单(常用菜单,BottomBar实现动画(上下式)+消息菜单,BottomBar+ViewPage ...

随机推荐

  1. Java AOP - Aspectj

    1. 序 Aspect Oriented Programming (AOP)是近来一个比较热门的话题. AspectJ是AOP的Java语言的实现,获得了Java程序员的广泛关注. 关于AspectJ ...

  2. MySQL 5.5 禁用 innodb

    MySQL 5.5 禁用 innodb 编辑: my.ini 添加: default-storage-engine=MYISAM skip-innodb

  3. USACO 2.4 Cow Tours

    Cow Tours Farmer John has a number of pastures on his farm. Cow paths connect some pastures with cer ...

  4. HDU 2212 DFS

    Problem Description A DFS(digital factorial sum) number is found by summing the factorial of every d ...

  5. Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset

    题目链接:Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset 题意: 给你一些操作,往一个集合插入和删除一些数,然后?x让你找出与x异或后的最大值 ...

  6. 转 delphi SelText,GetText,SetText用法

    转自:http://blog.163.com/wll_009/blog/static/1173731172009102452632968/ 这几个都跟选区有关的,就是选中一串字符串,选中的会变蓝色Se ...

  7. LeetCode OJ 1. Two Sum

    Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...

  8. [ An Ac a Day ^_^ ] CodeForces 691F Couple Cover 花式暴力

    Couple Cover Time Limit: 3000MS   Memory Limit: 524288KB   64bit IO Format: %I64d & %I64u Descri ...

  9. weblogic一些基本概念

    <收藏过来的----------http://www.cnblogs.com/cocowool/archive/2012/04/01/2428861.html> WebLogic中的一些基 ...

  10. 5.编写Java应用程序。首先,定义描述学生的类——Student,包括学号(int)、 姓名(String)、年龄(int)等属性;二个方法:Student(int stuNo,String name,int age) 用于对对象的初始化,outPut()用于输出学生信息。其次,再定义一个主类—— TestClass,在主类的main方法中创建多个Student类的对象,使用这些对象来测 试St

    Student类: package com.bao; public class Student { int stuNo;String name,sex;int age,weight; Student( ...