如何获得dialog下的activity焦点

如何获得dialog下的activity焦点,第1张

我懂了,但是只能通过d窗的按钮让d窗消失吧,我是这样理解的,那个dialogd出来就想当进入另一个界面。,所以原来的界面自然是失效的,只有在dialog这个界面结束才能返回原界面,所以你的想法我还真是没有试过,所以抱歉我帮不到了。

popUpWindowsetBackgroundDrawable(getResources()getDrawable(Rdrawablepage2));

设置的是popupwindow(window容器)的背景

popUpWindow = new PopupWindow(show_popvieView,LayoutParamsWRAP_CONTENT,LayoutParamsWRAP_CONTENT); //是将show_popvieView放入容器中,以自适应作为大小,且容器也采用自适应。

综上,如果你设置大小,导致show_popvieView沾满整个屏幕,那么window容器最为底层,设置的背景坑定是看不见的。

建议:背景设置采用设置show_popvieView的背景。如果有多层,可以在内容里面镶嵌,最好别直接设置外层popupwindow容器

我今天也遇到这个问题了

开始以为当spinner在scrollview时 存在android版本兼容问题

于是改成了popupwindow 比spinner麻烦好多 页面有多个EditText用于d出popupwindow展示不同的下拉数据 点击TextView要记录当前的EditText当点击popupwindow的列表项关闭popupwindow时要取到数据手动调用之前记录的EditText的setttext方法

而用spinner 这一切都是自动的

前面都是废话 结果用popupwindow实现完后还是一样 会自动滚动到顶部 这时才仔细分析问题原因

原来是在点击EditText(设置了clickable=true;focusable=false)d出spinner/popupwindow时焦点在页面外的EditText上 ,于是关闭spinner/popupwindow时页面自动滚动到获取焦点的EditText

解决方法很简单 在focusable=false的EditText的点击事件里去掉焦点

if (getCurrentFocus()!=null) {

getCurrentFocus()clearFocus();

}

使用PopupWindow可实现d出窗口效果,,其实和AlertDialog一样,也是一种对话框,两者也经常混用,但是也各有特点。下面就看看使用方法。

首先初始化一个PopupWindow,指定窗口大小参数。

PopupWindow mPop = new PopupWindow(getLayoutInflater()inflate(Rlayoutwindow, null),

LayoutParamsWRAP_CONTENT, LayoutParamsWRAP_CONTENT);

也可以分开写:

LayoutInflater mLayoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);

//自定义布局

ViewGroup menuView = (ViewGroup) mLayoutInflaterinflate(

Rlayoutwindow, null, true);

PopupWindow mPop = new PopupWindow(menuView, LayoutParamsWRAP_CONTENT,

LayoutParamsWRAP_CONTENT, true);

当然也可以手动设置PopupWindow大小。

mPopsetContentView(menuView );//设置包含视图

mPopsetWidth(int )

mPopsetHeight(int )//设置d出框大小

设置进场动画:

mPopsetAnimationStyle(RstyleAnimationPreview);//设置动画样式

mPopsetOutsideTouchable(true);//这里设置显示PopuWindow之后在外面点击是否有效。如果为false的话,那么点击PopuWindow外面并不会关闭PopuWindow。当然这里很明显只能在Touchable下才能使用。

当有mPopsetFocusable(false);的时候,说明PopuWindow不能获得焦点,即使设置设置了背景不为空也不能点击外面消失,只能由dismiss()消失,但是外面的View的事件还是可以触发,back键也可以顺利dismiss掉。当设置为popuWindowsetFocusable(true);的时候,加上下面两行设置背景代码,点击外面和Back键才会消失。

mPopsetFocusable(true);

需要顺利让PopUpWindow dimiss(即点击PopuWindow之外的地方此或者back键PopuWindow会消失);PopUpWindow的背景不能为空。必须在popuWindowshowAsDropDown(v);或者其它的显示PopuWindow方法之前设置它的背景不为空:

mPopsetBackgroundDrawable(new ColorDrawable(0));

mPopshowAsDropDown(anchor, 0, 0);//设置显示PopupWindow的位置位于View的左下方,x,y表示坐标偏移量

mPopshowAtLocation(findViewById(Ridparent), GravityLEFT, 0, -90);(以某个View为参考),表示d出窗口以parent组件为参考,位于左侧,偏移-90。

mPopsetOnDismissListenerd(new PopupWindowOnDismissListener(){})//设置窗口消失事件

注:windowxml为布局文件

总结:

1、为PopupWindow的view布局,通过LayoutInflator获取布局的view如:

LayoutInflater inflater =(LayoutInflater)

thisanchorgetContext()getSystemService(ContextLAYOUT_INFLATER_SERVICE);

View textEntryView = inflaterinflate(Rlayoutpaopao_alert_dialog, null);

2、显示位置,可以有很多方式设置显示方式

popshowAtLocation(findViewById(Ridll2), GravityLEFT, 0, -90);

或者

popshowAsDropDown(View anchor, int xoff, int yoff)

3、进出场动画

popsetAnimationStyle(RstylePopupAnimation);

4、点击PopupWindow区域外部,PopupWindow消失

thiswindow = new PopupWindow(anchorgetContext());

thiswindowsetTouchInterceptor(new OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

if(eventgetAction() ==MotionEventACTION_OUTSIDE) {

BetterPopupWindowthiswindowdismiss();

return true;

}

return false;

}

});

PopupWindow 自适应宽度实例

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

int maxWidth = meathureWidthByChilds() + getPaddingLeft() + getPaddingRight(); superonMeasure(MeasureSpecmakeMeasureSpec(maxWidth,MeasureSpecEXACTLY),heightMeasureSpec);

}

public int meathureWidthByChilds() {

int maxWidth = 0;

View view = null;

for (int i = 0; i < getAdapter()getCount(); i++) {

view = getAdapter()getView(i, view, this);

viewmeasure(MeasureSpecUNSPECIFIED, MeasureSpecUNSPECIFIED);

if (viewgetMeasuredWidth() > maxWidth){

maxWidth = viewgetMeasuredWidth();

}

}

return maxWidth;

}

PopupWindow自适应布局

Android自带的Menu菜单,常常无法满足我们的需求,所以就只有自己写menu菜单,通常的选择是用PopupWindow来实现自定义的menu菜单,先看代码,再来说明要注意的几点:

View menuView = inflaterinflate(Rlayoutmenu_popwindow, null);

final PopupWindow p = new PopupWindow(mContext);

psetContentView(menuView);

psetWidth(ViewGroupLayoutParamsFILL_PARENT);

psetHeight(ViewGroupLayoutParamsWRAP_CONTENT);

psetAnimationStyle(RstyleMenuWindow);

psetOnDismissListener(this);

psetOutsideTouchable(false);

psetBackgroundDrawable(new ColorDrawable(androidRcolortransparent));

psetFocusable(true); // 如果把焦点设置为false,则其他部份是可以点击的,也就是说传递事件时,不会先走PopupWindow

mPopwindow = p;

以上就是关于如何获得dialog下的activity焦点全部的内容,包括:如何获得dialog下的activity焦点、android的popupwindow控件的大小的问题、android Spinner控件 选择后为什么会自动d到界面顶部等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9273242.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存