资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

android菜单弹出,android弹出选择框

Android 仿微信长按列表弹出PopupMenu菜单栏

弹出效果如下图所示

目前成都创新互联已为近1000家的企业提供了网站建设、域名、虚拟空间、网站托管、服务器租用、企业网站设计、九龙坡网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

可以使用setGravity()方法来指定弹出窗口与anchor视图的对齐方式,例如修改对齐方式为Gravity.END

使用起来还是比较简单的,但是好像大部分项目的需求是PopupMenu在用户点击的位置弹出,然而PopupMenu并没有提供在指定坐标弹出的方法,所以只能咱们自己来实现咯!

想让PopupMenu在指定弹出位置,首先咱们得先了解show()方法是如何让PopupMenu弹出来的,所以只能去阅读源码了(Read The Fucking Source Code~)。

PopupMenu的show()方法很简单,直接把任务转给MenuPopupHelper来处理,处理流程:show() - tryShow() - showPopup(0, 0, false, false);

我们可以看到showPopup方法内有两个参数int xOffset、int yOffset,根据注释可以知道这就是相对于anchor视图的坐标值。所以如果要指定PopupMenu的弹出位置,MenuPopupHelper应该这样处理弹出逻辑:show(int x, int y) - tryShow(int x, int y) - showPopup(x, y, true, true)。

但是由于PopupMenu无法调用到MenuPopupHelper的show(int x, int y) 方法,因此我们只能使用反射机制绕过PopupMenu,直接调用MenuPopupHelper的show(int x, int y)方法。

到此为止,已经有了大致的解决思路,接下来看看具体实现。

最终弹出效果如下图所示

android中如何在某个控件弹出菜单?

你这是

menu

吧,

就是在

activity中有个

@Override

public

boolean

onCreateOptionsMenu(Menu

menu)

{

//

Inflate

the

menu;

this

adds

items

to

the

action

bar

if

it

is

present.

getMenuInflater().inflate(R.menu.main,

menu);

return

true;

}

这个函数中就是

调用显示了R。menu。main菜单的类容出来,并且原屏幕会变暗

Android选择条目时下方出现菜单选项

底部是菜单栏,点击就可以查看。

菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu),以下说的是创建OptionsMenu。

默认样式是在屏幕底部弹出一个菜单,这个菜单我们就叫他选项菜单OptionsMenu,一般情况下,选项菜单最多显示2排每排3个菜单项,这些菜单项有文字有图标,也被称作Icon Menus,如果多于6项,从第六项开始会被隐藏,在第六项会出现一个More里,点击More才出现第六项以及以后的菜单项,这些菜单项也被称作Expanded Menus。

android,弹出菜单,监听

public PopupMenu(Context context, View anchor, int gravity) {

// TODO Theme?

mContext = context;

mMenu = new MenuBuilder(context);

mMenu.setCallback(this); //设置了回调

mAnchor = anchor;

mPopup = new MenuPopupHelper(context, mMenu, anchor);

mPopup.setGravity(gravity);

mPopup.setCallback(this); //设置了回调

}

可以看到,PopupMenu已经帮你设置好了回调,也就是你点击菜单项,调用Popupshow()方法来显示弹出菜单,此时点击菜单项会调用 mPopup.setCallback(this); 设置好的回调,也就是PopupMenu类中定义了的

public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) {

if (mMenuItemClickListener != null) {

return mMenuItemClickListener.onMenuItemClick(item);

}

return false;

}

所以,你只能通过设置mMenuItemClickListener来响应PopupMenu中的菜单点击事件。

android如何弹出一个占屏幕一半的菜单

android弹出一个占屏幕一半的菜单,可以使用popupwindow,设置弹出的xy轴的距离占据屏幕一半即可,如下代码:

package com.example.hellopopupwindow;

import android.os.Bundle;

import android.app.Activity;

import android.content.Context;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.MotionEvent;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.View.OnTouchListener;

import android.view.ViewGroup.LayoutParams;

import android.widget.Button;

import android.widget.PopupWindow;

import android.widget.Toast;

public class MainActivity extends Activity {

private Context mContext = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mContext = this;

Button button = (Button) findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

showPopupWindow(view);

}

});

}

private void showPopupWindow(View view) {

// 一个自定义的布局,作为显示的内容

View contentView = LayoutInflater.from(mContext).inflate(

R.layout.pop_window, null);

// 设置按钮的点击事件

Button button = (Button) contentView.findViewById(R.id.button1);

button.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Toast.makeText(mContext, "button is pressed",

Toast.LENGTH_SHORT).show();

}

});

final PopupWindow popupWindow = new PopupWindow(contentView,

LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, true);

popupWindow.setTouchable(true);

popupWindow.setTouchInterceptor(new OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

Log.i("mengdd", "onTouch : ");

return false;

// 这里如果返回true的话,touch事件将被拦截

// 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss

}

});

// 如果不设置PopupWindow的背景,无论是点击外部区域还是Back键都无法dismiss弹框

// 我觉得这里是API的一个bug

popupWindow.setBackgroundDrawable(getResources().getDrawable(

R.drawable.selectmenu_bg_downward));

// 设置好参数之后再show

popupWindow.showAsDropDown(view);

}

}

android的这种弹出菜单(窗口)怎么实现

可以用popupWindow

public class PopUpActivity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

LayoutInflater inflater = LayoutInflater.from(this);

// 引入窗口配置文件

View view = inflater.inflate(R.layout.main2, null);

// 创建PopupWindow对象

final PopupWindow pop = new PopupWindow(view, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, false);

Button btn = (Button) findViewById(R.id.btn);

// 需要设置一下此参数,点击外边可消失

pop.setBackgroundDrawable(new BitmapDrawable());

//设置点击窗口外边窗口消失

pop.setOutsideTouchable(true);

// 设置此参数获得焦点,否则无法点击

pop.setFocusable(true);

}

}

popupWindow.showAsDropDown(v);让它出现在上方标题栏的下方

布局里可以写成listview,也可以写成死布局

还有就是ActionBar,但个人感觉ActionBar没有popupWindow灵活,反正我一般这种情况都会用popupWindow,看个人爱好


文章标题:android菜单弹出,android弹出选择框
文章地址:http://www.cdkjz.cn/article/dsiiceh.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220