点击某个按钮,让菜单选项从按钮周围指定位置弹出。

Android Material Design:PopupMenu

Android Material Design 引入的PopupMenu类似过去的上下文菜单,但是更灵活。 如图所示:

现在给出实现上图PopupMenu的代码。 本例是一个普通的Button触发弹出PopupMenu。

测试的MainActivity.java :

[java] view plaincopyprint?

  1. package zhangphil.materialdesign;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.support.v7.widget.PopupMenu;
  5. import android.view.MenuItem;
  6. import android.view.View;
  7. import android.widget.Button;
  8. import android.widget.Toast;
  9. public class MainActivity extends Activity {
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.activity_main);
  14. final Button button = (Button) findViewById(R.id.button);
  15. button.setOnClickListener(new View.OnClickListener() {
  16. @Override
  17. public void onClick(View v) {
  18. showPopupMenu(button);
  19. }
  20. });
  21. }
  22. private void showPopupMenu(View view) {
  23. // View当前PopupMenu显示的相对View的位置
  24. PopupMenu popupMenu = new PopupMenu(this, view);
  25. // menu布局
  26. popupMenu.getMenuInflater().inflate(R.menu.main, popupMenu.getMenu());
  27. // menu的item点击事件
  28. popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
  29. @Override
  30. public boolean onMenuItemClick(MenuItem item) {
  31. Toast.makeText(getApplicationContext(), item.getTitle(), Toast.LENGTH_SHORT).show();
  32. return false;
  33. }
  34. });
  35. // PopupMenu关闭事件
  36. popupMenu.setOnDismissListener(new PopupMenu.OnDismissListener() {
  37. @Override
  38. public void onDismiss(PopupMenu menu) {
  39. Toast.makeText(getApplicationContext(), "关闭PopupMenu", Toast.LENGTH_SHORT).show();
  40. }
  41. });
  42. popupMenu.show();
  43. }
  44. }
package zhangphil.materialdesign;

import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.PopupMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		final Button button = (Button) findViewById(R.id.button);
		button.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				showPopupMenu(button);
			}
		});
	}

	private void showPopupMenu(View view) {
		// View当前PopupMenu显示的相对View的位置
		PopupMenu popupMenu = new PopupMenu(this, view);

		// menu布局
		popupMenu.getMenuInflater().inflate(R.menu.main, popupMenu.getMenu());

		// menu的item点击事件
		popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
			@Override
			public boolean onMenuItemClick(MenuItem item) {
				Toast.makeText(getApplicationContext(), item.getTitle(), Toast.LENGTH_SHORT).show();
				return false;
			}
		});

		// PopupMenu关闭事件
		popupMenu.setOnDismissListener(new PopupMenu.OnDismissListener() {
			@Override
			public void onDismiss(PopupMenu menu) {
				Toast.makeText(getApplicationContext(), "关闭PopupMenu", Toast.LENGTH_SHORT).show();
			}
		});

		popupMenu.show();
	}
}

MainActivity.java需要的activity_main布局文件只含一个普通的Android Button,在次不再赘述。

位于menu目录下的main.xml:

[html] view plaincopyprint?

  1. <menu xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:app="http://schemas.android.com/apk/res-auto"
  3. xmlns:tools="http://schemas.android.com/tools" >
  4. <item
  5. android:id="@+id/action_open"
  6. android:orderInCategory="100"
  7. android:title="打开"
  8. app:showAsAction="never"/>
  9. <item
  10. android:id="@+id/action_new"
  11. android:orderInCategory="100"
  12. android:title="新建"
  13. app:showAsAction="never"/>
  14. <item
  15. android:id="@+id/action_del"
  16. android:orderInCategory="100"
  17. android:title="删除"
  18. app:showAsAction="never"/>
  19. </menu>
时间: 2024-10-03 14:06:48

点击某个按钮,让菜单选项从按钮周围指定位置弹出。的相关文章

Swift实现封装PopMenu菜单,可在屏幕任意位置弹出

效果图: 说明: 代码现已支持 Swift3 语法 使用介绍: 1.初始化位置 //frame 为整个popview相对整个屏幕的位置 箭头距离右边位置,默认15 //popMenu = SwiftPopMenu(frame: CGRect(x: KSCREEN_WIDTH - 155, y: 51, width: 150, height: 112)) //frame 为整个popview相对整个屏幕的位置 arrowMargin :指定箭头距离右边距离 popMenu = SwiftPopMe

Delphi XE7实现的任意位置弹出菜单

Delphi XE7中目前还没有弹出菜单组件,这个弹出菜单应用很普遍,在Java开发的安卓程序中很简单就可以用上了,应该说是一个标准控件.看了一些例子,但是都不能满足我想在任意位置弹出菜单需求,于是自己在网上找了一个例子,修改后实现了我的在任意位置弹出菜单需求!全部代码如下: { 功能:DelphiXE7里面实现的弹出菜单 ------------------------------------------------------------------------------ 说明:实现在任意

html js点击按钮滚动跳转定位到页面指定位置(DIV)的方法代码

一:通过html锚点实现滚动定位到页面指定位置(DIV):    如果我们要点击实现跳转的地方是一个html锚点,也就是点击一个A标签超链接实现跳转,可以把A标签的href属性直接指向跳转指定位置的div,代码实现思路如下: <a class="banner" href="/schoolFair/registration#nav"> <a href="#abc">点击跳转</a>    <div id=&

delphi TDbGrid 右键 PopupMenu 菜单只在有数据的地方弹出

最近用delphi做开发,用到了DbGrid控件,想在控件上点击鼠标右键弹出菜单 关联DbGrid的 Popupmenu 倒是可以实现,但是这样的效果是不管你在哪里单击鼠标右键 只要在DBGrid里面就会弹出菜单,我想只在数据区弹出,网上查了N多了资料,没有找到满意的 偶然间发现,当在DbGrid上单击鼠标右键的时候,当鼠标在数据区的时候不会触发 MouseDown事件 这样我就想用 MouseUp和MouseDown 区分鼠标是不是在数据区 ,然后弹出菜单 首先定义一个全局变量: var Sh

js按钮确认删除提示以及js的三种弹出框简单介绍

js按钮确认删除提示 第一种方法: html代码: 1 <a href="" οnclick="javascript:return del();">删除</a> js代码: 1 function del() { 2 var msg = "您真的确定要删除吗?\n\n请确认!"; 3 if (confirm(msg)==true){ 4 return true; 5 }else{ 6 return false; 7 } 8

仿IPhone从底部弹出选项菜单

项目中开发需要,就是在点击某个控件(如头像ImageView)时要求弹出一个操作的选项菜单(对话框),效果就是像IPhone的一样,从手机屏幕底部往上弹出的,做了个简单的效果工具类,写下来方便下次使用. 首先我们要定义弹出的对话框样式: public static Dialog createShowAlert(final Context context, int layoutId) {/**方法中要传入建立对话框的Layout*/ LayoutInflater inflater = (Layou

糍粑大叔的独游之旅-u3d实现弹出菜单(上)-动态列表

在u3d5.x中,使用ugui作为默认的界面系统,但控件实在太少,很多需求都不能满足,比如弹出菜单(PopupMenu) 我也懒得去网上找现成的实现,再加上现有代码已经有很多有关列表控件的功能,不想再重新动这些代码. 所以自己实现一个,目前先只实现核心.搭建控件相关类的骨干,后期再慢慢丰富和做的更花哨. 开篇之前声明,我的u3d理解非常有限,有很多也许本身自带的功能或有现成库功能我不知道,所以选择了自己探索或实现, 感觉太low欢迎给出好的意见. 定义和代码结构 PopupMenu是点击鼠标或按

Android弹出菜单

在实际开发中,我们可能会用到toolbar控件,然后还要在右上角添加弹出菜单,但是toolbar弹出菜单,实在是不好控制位置,因此用户体验很是不好,所以 就想到了用popupwindow来代替弹出的菜单.话不多说先看效果(文章末尾有demo下载地址): 效果还是基本能接受的. 下面讲讲实现过程: 一:菜单布局,很简单,和一般的布局一样,linearlayout中包裹textview和imageview(需要图片的话) <?xml version="1.0" encoding=&q

第5章(7) 弹出菜单(PopUp Menus)

分类:C#.Android.VS2015: 创建日期:2016-02-07 一.简介 功能描述:用户单击按钮弹出菜单.当用户选择一个菜单项,会触发MenuItemClick事件并让弹出的菜单消失:如果用户在菜单外单击,则直接消失弹出的菜单.当菜单消失时,会引发DismissEvent事件(利用此事件可在菜单消失时做一些后续处理). 二.示例7-- Demo07PopupMenu 1.运行效果 2.添加菜单项 在Resources文件夹下添加一个menu子文件夹,然后在此子文件夹下添加一个名为de