当前位置:首页 » 安卓系统 » android弹出popupwindow

android弹出popupwindow

发布时间: 2022-09-03 06:08:54

① android popupwindow怎么合理控制弹出位置

/**
* 计算出来的位置,y方向就在anchorView的上面和下面对齐显示,x方向就是与屏幕右边对齐显示
* 如果anchorView的位置有变化,就可以适当自己额外加入偏移来修正
* @param anchorView 呼出window的view
* @param contentView window的内容布局
* @return window显示的左上角的xOff,yOff坐标
*/
private static int[] calculatePopWindowPos(final View anchorView, final View contentView) {
final int windowPos[] = new int[2];
final int anchorLoc[] = new int[2];
// 获取锚点View在屏幕上的左上角坐标位置
anchorView.getLocationOnScreen(anchorLoc);
final int anchorHeight = anchorView.getHeight();
// 获取屏幕的高宽
final int screenHeight = ScreenUtils.getScreenHeight(anchorView.getContext());
final int screenWidth = ScreenUtils.getScreenWidth(anchorView.getContext());
contentView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
// 计算contentView的高宽
final int windowHeight = contentView.getMeasuredHeight();
final int windowWidth = contentView.getMeasuredWidth();
// 判断需要向上弹出还是向下弹出显示
final boolean isNeedShowUp = (screenHeight - anchorLoc[1] - anchorHeight < windowHeight);
if (isNeedShowUp) {
windowPos[0] = screenWidth - windowWidth;
windowPos[1] = anchorLoc[1] - windowHeight;
} else {
windowPos[0] = screenWidth - windowWidth;
windowPos[1] = anchorLoc[1] + anchorHeight;
}
return windowPos;
}

② android中PopupWindow弹出窗体后,为什么不能点击其他控件

设置popupwindow可点击
mPopupWindow.setFocusable(true); // 设置PopupWindow可获得焦点
mPopupWindow.setTouchable(true); // 设置PopupWindow可触摸
补充:
默认打开popupwindow是没有焦点和不可点击的。因此需要设置点击事件。

③ Android PopupWindow怎么合理控制弹出位置

Android PopupWindow怎么合理控制弹出位置

php">privatevoidshowPopupWindow(Viewparent){
if(popupWindow==null){
LayoutInflaterlayoutInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view=layoutInflater.inflate(R.layout.group_list,null);
lv_group=(ListView)view.findViewById(R.id.lvGroup);

Collections.reverse(groups);
GroupAdaptergroupAdapter=newGroupAdapter(this,groups);
lv_group.setAdapter(groupAdapter);
popupWindow=newPopupWindow(view,200,220);
}
popupWindow.setFocusable(true);
popupWindow.setOutsideTouchable(true);//设置点击屏幕其它地方弹出框消失
popupWindow.setBackgroundDrawable(newBitmapDrawable());
WindowManagerwindowManager=(WindowManager)getSystemService(Context.WINDOW_SERVICE);
intxPos=-popupWindow.getWidth()/2
+getCustomTitle().getCenter().getWidth()/2;

popupWindow.showAsDropDown(parent,xPos,4);

lv_group.setOnItemClickListener(newOnItemClickListener(){
@Override
publicvoidonItemClick(AdapterView<?>adapterView,Viewview,
intposition,longid){
loadNew(((StringItem)(groups.get(position))).getId());
if(popupWindow!=null)
popupWindow.dismiss();
}
});
}

只需要设置proupwindows的setOutsideTouchable属性即可。

以下为示例代码:

window.showAtLocation(parent, Gravity.RIGHT | Gravity.BOTTOM, 10,10);//显示位置


第一个参数指定PopupWindow的锚点view,即依附在哪个view上。

第二个参数指定起始点

第三个参数设置以起始点的右下角为原点,向左、上各偏移的像素。

自己看下API

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

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

java">packagecom.example.hellopopupwindow;

importandroid.os.Bundle;
importandroid.app.Activity;
importandroid.content.Context;
importandroid.util.Log;
importandroid.view.LayoutInflater;
importandroid.view.MotionEvent;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.view.View.OnTouchListener;
importandroid.view.ViewGroup.LayoutParams;
importandroid.widget.Button;
importandroid.widget.PopupWindow;
importandroid.widget.Toast;

{

privateContextmContext=null;

@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mContext=this;

Buttonbutton=(Button)findViewById(R.id.button);
button.setOnClickListener(newView.OnClickListener(){

@Override
publicvoidonClick(Viewview){

showPopupWindow(view);
}
});
}

privatevoidshowPopupWindow(Viewview){

//一个自定义的布局,作为显示的内容
ViewcontentView=LayoutInflater.from(mContext).inflate(
R.layout.pop_window,null);
//设置按钮的点击事件
Buttonbutton=(Button)contentView.findViewById(R.id.button1);
button.setOnClickListener(newOnClickListener(){

@Override
publicvoidonClick(Viewv){
Toast.makeText(mContext,"buttonispressed",
Toast.LENGTH_SHORT).show();
}
});

finalPopupWindowpopupWindow=newPopupWindow(contentView,
LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,true);

popupWindow.setTouchable(true);

popupWindow.setTouchInterceptor(newOnTouchListener(){

@Override
publicbooleanonTouch(Viewv,MotionEventevent){

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

returnfalse;
//这里如果返回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 触发的事件是在初始化的时候。

new一个Handler变量,在OnCreate里面通过这个Handler去发送消息,handler在Onmessage里面收到消息后,在show出来就可以了;类似的情况还有在oncreate里面不能显示toast之类的,要用线程去处理

⑥ android popupwindow 弹出窗口按钮事件

这个view不能写在这里,除非你调用这个方法传入的是MainActivity这种继承Activity的View
view.getContext().startActivity(intent);

⑦ android service中怎么弹popupwindow

Android PopupWindow怎么合理控制弹出位置 void showPopupWindow(View parent) { if (popupWindow == null) { LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = layoutInflater.inflate(R.layout.group_list, null); lv_group = (ListView) view.findViewById(R.id.lvGroup); Collections.reverse(groups); GroupAdapter groupAdapter = new GroupAdapter(this, groups); lv_group.setAdapter(groupAdapter); popupWindow = new PopupWindow(view, 200, 220); } popupWindow.setFocusable(true); popupWindow.setOutsideTouchable(true); //设置点击屏幕其它地方弹出框消失 popupWindow.setBackgroundDrawable(new BitmapDrawable()); WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); int xPos = -popupWindow.getWidth() / 2 + getCustomTitle().getCenter().getWidth() / 2; popupWindow.showAsDropDown(parent, xPos, 4); lv_group.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { loadNew(((StringItem)(groups.get(position))).getId()); if (popupWindow != null) popupWindow.dismiss(); } }); }只需要设置proupwindows的setOutsideTouchable属性即可。 以下为示例代码: window.showAtLocation(parent, Gravity.RIGHT Gravity.BOTTOM, 10,10);//显示位置 第一个参数指定PopupWindow的锚点view,即依附在哪个view上。 第二个参数指定起始点 第三个参数设置以起始点的右下角为原点,向左、上各偏移的像素。 自己看下API

⑧ Android基础 (11) PopupWindow详解

(1)PopupWindow的使用
(2)自定义一个PopupWindow
(3)PopupWindow的源码分析
(4)AlertDialog,popupWindow,Activity区别
(5)Activity-Window-View三者的差别

Android的对话框有两种:PopupWindow和AlertDialog。它们的不同点在于:

PopupWindow的位置按照有无偏移分,可以分为偏移和无偏移两种;按照参照物的不同,可以分为相对于某个控件(Anchor锚)和相对于父控件。具体如下:
showAsDropDown(View anchor):相对某个控件的位置(正左下方),无偏移
showAsDropDown(View anchor, int xoff, int yoff):相对某个控件的位置,有偏移
showAtLocation(View parent, int gravity, int x, int y):相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移。

使用详述: https://blog.csdn.net/xiaanming/article/details/9121383

这里的WRAP_CONTENT可以换成fill_parent 也可以是具体的数值,它是指PopupWindow的大小,也就是contentView的大小,注意popupWindow根据这个大小显示你的View,如果你的View本身是从xml得到的,那么xml的第一层view的大小属性将被忽略。相当于popupWindow的width和height属性直接和第一层View相对应。

执行了一个attachToAnchor,意思是PopupWindow类似一个锚挂在目标view的下面,这个函数主要讲xoff、yoff(x轴、y轴偏移值)、gravity(比如Gravity.BOTTOM之类,指的是PopupWindow放在目标view哪个方向边缘的位置)这个attachToAnchor有点意思,通过弱引用保存目标view和目标view的rootView(我们都知道:通过弱引用和软引用可以防止内存泄漏)、这个rootview是否依附在window、还有保存偏差值、gravity

PopupWindow通过为传入的View添加一层包裹的布局,并重写该布局的点击事件,实现点击PopupWindow之外的区域PopupWindow消失的效果

封装库可前往:#### https://github.com/yangchong211/YCDialog

⑨ Android开发,如何让PopupWindow弹出时外部控件不可点击

// 用于PopupWindow的View 2 View contentView=LayoutInflater.from(context).inflate(layoutRes, null, false); 3 // 创建PopupWindow对象,其中: 4 // 第一个参数是用于PopupWindow中的View,第二个参数是PopupWindow的宽度, 5 // 第三个参数是PopupWindow的高度,第四个参数指定PopupWindow能否获得焦点 6 PopupWindow window=new PopupWindow(contentView, 100, 100, true); 7 // 设置PopupWindow的背景 8 window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 9 // 设置PopupWindow是否能响应外部点击事件10 window.setOutsideTouchable(true);11 // 设置PopupWindow是否能响应点击事件12 window.setTouchable(true);13 // 显示PopupWindow,其中:14 // 第一个参数是PopupWindow的锚点,第二和第三个参数分别是PopupWindow相对锚点的x、y偏移15 window.showAsDropDown(anchor, xoff, yoff);16 // 或者也可以调用此方法显示PopupWindow,其中:17 // 第一个参数是PopupWindow的父View,第二个参数是PopupWindow相对父View的位置,18 // 第三和第四个参数分别是PopupWindow相对父View的x、y偏移19 // window.showAtLocation(parent, gravity, x, y);

每个方法的作用都写在注解里了,相信大家都能看懂。不过这里要注意这两行:

1 window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));2 window.setOutsideTouchable(true);

只有同时设置PopupWindow的背景和可以响应外部点击事件,它才能“真正”响应外部点击事件。也就是说,当你点击PopupWindow的外部或者按下“Back”键时,PopupWindow才会消失。

热点内容
mongodbphp安装 发布:2025-01-12 04:41:08 浏览:578
sql存储文件路径 发布:2025-01-12 04:37:31 浏览:242
我的世界服务器小灰机 发布:2025-01-12 04:21:36 浏览:931
九通车联网账号密码多少 发布:2025-01-12 04:21:32 浏览:293
怎么把服务器的ip固定了 发布:2025-01-12 03:55:42 浏览:580
php服务器开发 发布:2025-01-12 03:55:35 浏览:674
软件自制编程 发布:2025-01-12 03:54:00 浏览:536
j2ee和java的区别 发布:2025-01-12 03:42:44 浏览:583
android6小米 发布:2025-01-12 03:38:35 浏览:87
redis与数据库 发布:2025-01-12 03:20:21 浏览:213