初学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. hdu1021

    #include <stdio.h> int fib(int m){ int n_2=1,n_1=2,n,i; if(m==0)return 1; if(m==1)return 2; fo ...

  2. python3.4项目打包

    1.首先下载pyinstaller并且解压(就直接解压再桌面就可以,这样子比较方便) 2.然后就去下载pywin32(按照电脑和python的版本去下载) 我电脑是64位的,python是3.4版本的 ...

  3. java 邮件发送 apache commons-email

    package com.sun.mail;import org.apache.commons.mail.Email;import org.apache.commons.mail.EmailExcept ...

  4. jQuery 截取double数据 重新赋值

    $('.prioritySort').each(function(i){ $(this).text($(this).text().substring(0,$(this).text().indexOf( ...

  5. Python学习笔记_Chapter 6定制数据对象

    1. 有用的BIF a. 判断字符串中是否包含子字符串 if s_a in s_b: b. pop() 描述:从指定的列表位置删除并返回一个数据项. (sarah_name,sarah_dob)=l_ ...

  6. C#读取和写入文件

    一.读取文件 如果你要读取的文件内容不是很多, 可以使用 File.ReadAllText(FilePath) 或指定编码方式 File.ReadAllText(FilePath, Encoding) ...

  7. priority_queue 优先队列

    优先队列是单向队列的一种,可以按照默认或自定义的一种方式来对队列中的数据进行动态排序 template<class _Ty, class _Container = vector<_Ty&g ...

  8. 对于querystring取值时候发生+号变空格的问题

    今天遇到这个问题,在网上找了几个答案,解决了问题,很高兴,所以贴出来给大家分享一下: URL如下 http://127.0.0.1/test/test.aspx?sql= and id='300+' ...

  9. JS跨域解决方式 window.name

    window.name 传输技术,原本是 Thomas Frank 用于解决 cookie 的一些劣势(每个域名 4 x 20 Kb 的限制.数据只能是字符串.设置和获取 cookie 语法的复杂等等 ...

  10. 如何通过Maven的Jetty插件运行Web工程

    首先建议使用jetty9,因为据官方文档显示,Jetty 7 and Jetty 8 are now EOL (End of Life),如下.但是由于项目使用的版本一般都比较低,这里以jetty8为 ...