欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

android菜單彈出,android彈出選擇框

Android 仿微信長(zhǎng)按列表彈出PopupMenu菜單欄

彈出效果如下圖所示

目前成都創(chuàng)新互聯(lián)已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、九龍坡網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

可以使用setGravity()方法來(lái)指定彈出窗口與anchor視圖的對(duì)齊方式,例如修改對(duì)齊方式為Gravity.END

使用起來(lái)還是比較簡(jiǎn)單的,但是好像大部分項(xiàng)目的需求是PopupMenu在用戶點(diǎn)擊的位置彈出,然而PopupMenu并沒(méi)有提供在指定坐標(biāo)彈出的方法,所以只能咱們自己來(lái)實(shí)現(xiàn)咯!

想讓PopupMenu在指定彈出位置,首先咱們得先了解show()方法是如何讓PopupMenu彈出來(lái)的,所以只能去閱讀源碼了(Read The Fucking Source Code~)。

PopupMenu的show()方法很簡(jiǎn)單,直接把任務(wù)轉(zhuǎn)給MenuPopupHelper來(lái)處理,處理流程:show() - tryShow() - showPopup(0, 0, false, false);

我們可以看到showPopup方法內(nèi)有兩個(gè)參數(shù)int xOffset、int yOffset,根據(jù)注釋可以知道這就是相對(duì)于anchor視圖的坐標(biāo)值。所以如果要指定PopupMenu的彈出位置,MenuPopupHelper應(yīng)該這樣處理彈出邏輯:show(int x, int y) - tryShow(int x, int y) - showPopup(x, y, true, true)。

但是由于PopupMenu無(wú)法調(diào)用到MenuPopupHelper的show(int x, int y) 方法,因此我們只能使用反射機(jī)制繞過(guò)PopupMenu,直接調(diào)用MenuPopupHelper的show(int x, int y)方法。

到此為止,已經(jīng)有了大致的解決思路,接下來(lái)看看具體實(shí)現(xiàn)。

最終彈出效果如下圖所示

android中如何在某個(gè)控件彈出菜單?

你這是

menu

吧,

就是在

activity中有個(gè)

@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;

}

這個(gè)函數(shù)中就是

調(diào)用顯示了R。menu。main菜單的類(lèi)容出來(lái),并且原屏幕會(huì)變暗

Android選擇條目時(shí)下方出現(xiàn)菜單選項(xiàng)

底部是菜單欄,點(diǎn)擊就可以查看。

菜單是用戶界面中最常見(jiàn)的元素之一,使用非常頻繁,在Android中,菜單被分為如下三種,選項(xiàng)菜單(OptionsMenu)、上下文菜單(ContextMenu)和子菜單(SubMenu),以下說(shuō)的是創(chuàng)建OptionsMenu。

默認(rèn)樣式是在屏幕底部彈出一個(gè)菜單,這個(gè)菜單我們就叫他選項(xiàng)菜單OptionsMenu,一般情況下,選項(xiàng)菜單最多顯示2排每排3個(gè)菜單項(xiàng),這些菜單項(xiàng)有文字有圖標(biāo),也被稱作Icon Menus,如果多于6項(xiàng),從第六項(xiàng)開(kāi)始會(huì)被隱藏,在第六項(xiàng)會(huì)出現(xiàn)一個(gè)More里,點(diǎn)擊More才出現(xiàn)第六項(xiàng)以及以后的菜單項(xiàng),這些菜單項(xiàng)也被稱作Expanded Menus。

android,彈出菜單,監(jiān)聽(tīng)

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

// TODO Theme?

mContext = context;

mMenu = new MenuBuilder(context);

mMenu.setCallback(this); //設(shè)置了回調(diào)

mAnchor = anchor;

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

mPopup.setGravity(gravity);

mPopup.setCallback(this); //設(shè)置了回調(diào)

}

可以看到,PopupMenu已經(jīng)幫你設(shè)置好了回調(diào),也就是你點(diǎn)擊菜單項(xiàng),調(diào)用Popupshow()方法來(lái)顯示彈出菜單,此時(shí)點(diǎn)擊菜單項(xiàng)會(huì)調(diào)用 mPopup.setCallback(this); 設(shè)置好的回調(diào),也就是PopupMenu類(lèi)中定義了的

public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) {

if (mMenuItemClickListener != null) {

return mMenuItemClickListener.onMenuItemClick(item);

}

return false;

}

所以,你只能通過(guò)設(shè)置mMenuItemClickListener來(lái)響應(yīng)PopupMenu中的菜單點(diǎn)擊事件。

android如何彈出一個(gè)占屏幕一半的菜單

android彈出一個(gè)占屏幕一半的菜單,可以使用popupwindow,設(shè)置彈出的xy軸的距離占據(jù)屏幕一半即可,如下代碼:

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)?{

//?一個(gè)自定義的布局,作為顯示的內(nèi)容

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

R.layout.pop_window,?null);

//?設(shè)置按鈕的點(diǎn)擊事件

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不被調(diào)用,這樣點(diǎn)擊外部區(qū)域無(wú)法dismiss

}

});

//?如果不設(shè)置PopupWindow的背景,無(wú)論是點(diǎn)擊外部區(qū)域還是Back鍵都無(wú)法dismiss彈框

//?我覺(jué)得這里是API的一個(gè)bug

popupWindow.setBackgroundDrawable(getResources().getDrawable(

R.drawable.selectmenu_bg_downward));

//?設(shè)置好參數(shù)之后再show

popupWindow.showAsDropDown(view);

}

}

android的這種彈出菜單(窗口)怎么實(shí)現(xiàn)

可以用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);

// 創(chuàng)建PopupWindow對(duì)象

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

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

// 需要設(shè)置一下此參數(shù),點(diǎn)擊外邊可消失

pop.setBackgroundDrawable(new BitmapDrawable());

//設(shè)置點(diǎn)擊窗口外邊窗口消失

pop.setOutsideTouchable(true);

// 設(shè)置此參數(shù)獲得焦點(diǎn),否則無(wú)法點(diǎn)擊

pop.setFocusable(true);

}

}

popupWindow.showAsDropDown(v);讓它出現(xiàn)在上方標(biāo)題欄的下方

布局里可以寫(xiě)成listview,也可以寫(xiě)成死布局

還有就是ActionBar,但個(gè)人感覺(jué)ActionBar沒(méi)有popupWindow靈活,反正我一般這種情況都會(huì)用popupWindow,看個(gè)人愛(ài)好

本文名稱:android菜單彈出,android彈出選擇框
URL地址:http://chinadenli.net/article49/dsiiceh.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)網(wǎng)站設(shè)計(jì)公司電子商務(wù)外貿(mào)網(wǎng)站建設(shè)網(wǎng)站營(yíng)銷(xiāo)企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站