Android PopupWindow菜单
初学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菜单的更多相关文章
- android PopupWindow使用实例
注:点空白或菜单外隐藏popupwindow菜单: 但是,若点击有点击事件的组件则要再写代码手动隐藏: @Override public boolean onTouchEvent(MotionEven ...
- Android PopupWindow的使用技巧(转)
Android PopupWindow的使用技巧 PopupWindow是Android上自定义弹出窗口,使用起来很方便. PopupWindow的构造函数为 public PopupWindow(V ...
- Android PopupWindow Dialog 关于 is your activity running 崩溃详解
Android PopupWindow Dialog 关于 is your activity running 崩溃详解 [TOC] 起因 对于 PopupWindow Dialog 需要 Activi ...
- Android侧滑菜单代码实现
前两天学习了hyman老师讲的Android侧滑菜单的实现,经过自己的整理分享出来给大家学习一下 现在很多APP都有菜单侧滑的功能,本篇文章主要讲解使用自定义的HorizontalScrollView ...
- Android PopupWindow的使用和分析
Android PopupWindow的使用和分析 PopupWindow使用 PopupWindow这个类用来实现一个弹出框,可以使用任意布局的View作为其内容,这个弹出框是悬浮在当前activi ...
- android 三级菜单 BaseExpandableListAdapter
在网上搜了非常长时间.没有找到合适的Android三级菜单.所以就自己动手写了一个,主要使用了BaseExpandableList来实现,通过三个布局文件来完毕相应的菜单项,详细实现请參照下图. wa ...
- Android滑动菜单框架完全解析,教你如何一分钟实现滑动菜单特效
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8744400 之前我向大家介绍了史上最简单的滑动菜单的实现方式,相信大家都还记得.如 ...
- 【转】Android 系统菜单与自定义菜单
Android 系统菜单与自定义菜单实现方法如下:系统菜单显示DefaultMenu.java package com.wxz.menu; import com.wxz.menu.R; import ...
- BottomBar之Android底部菜单
BottomBar之Android底部菜单 前言:开源项目BottomBar,实现Android底部菜单(常用菜单,BottomBar实现动画(上下式)+消息菜单,BottomBar+ViewPage ...
随机推荐
- PIE使用阴影后的背景透明方法
使用PIE后,会发现如果有设置 box-shadow 时,当前 class 样式中设置 opacity 或者背景渐变透明都会无效了,其实也是有办法解决的 css3-container { filter ...
- mysqldump 数据库备份命令及脚本
mysql -uroot -phowhy@123 -e 'show databases;' | grep -ivE 'waring|database|mysql'|sed -r "s#^(. ...
- Office在线预览及PDF在线预览的实现方式大集合
一.服务器先转换为PDF,再转换为SWF,最后通过网页加载Flash预览 微软方:利用Office2007以上版本的一个PDF插件SaveAsPDFandXPS.exe可以导出PDF文件,然后再利用免 ...
- 获取radio的值
随着Jquery的作用越来越大,使用的朋友也越来越多.在Web中,由于CheckBox.Radiobutton .DropDownList等控件使用的频率比较高,就关系到这些控件在Jquery中的操作 ...
- JavaScript中的window对象
JavaScript中的window对象:http://www.cnblogs.com/kissdodog/archive/2013/01/01/2841464.html
- asp.net javascript客户端调用服务器端方法
如何用js调用服务器端方法.首先服务器端方法的格式如下 [System.Web.Services.WebMethod] public static void serverMethod(s ...
- POJ 2773 Happy 2006#素数筛选+容斥原理+二分
http://poj.org/problem?id=2773 说实话这道题..一点都不Happy好吗 似乎还可以用欧拉函数来解这道题,但正好刚学了容斥原理和二分,就用这个解法吧. 题解:要求输出[1, ...
- 2、使用Struts2实现登录功能(没有连接数据)
1.创建如下的目录结构 2.在com.entity包下创建 package com.entity; /** * 用户类 * @author Holly老师 * */ public class User ...
- 判断手机电脑微信 js
if ((navigator.userAgent.match(/(MicroMessenger)/i))) { //微信浏览器 //location.href=""; } else ...
- HTTPS科普扫盲帖【转】
为什么需要https HTTP是明文传输的,也就意味着,介于发送端.接收端中间的任意节点都可以知道你们传输的内容是什么.这些节点可能是路由器.代理等. 举个最常见的例子,用户登陆.用户输入账号,密码, ...