首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用editText的PopupWindow showAtLocation在键盘出现时不会保持位置

使用EditText的PopupWindow showAtLocation在键盘出现时不会保持位置是因为PopupWindow的位置是相对于整个屏幕的,而键盘的出现会导致屏幕的布局发生变化,从而使得PopupWindow的位置不再准确。

为了解决这个问题,可以使用软键盘的监听来动态调整PopupWindow的位置。具体步骤如下:

  1. 在Activity中,注册软键盘的监听器。可以通过重写Activity的onCreate方法,在其中添加如下代码:
代码语言:txt
复制
View rootView = findViewById(android.R.id.content);
rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        // 获取屏幕高度
        int screenHeight = rootView.getRootView().getHeight();
        // 获取键盘高度
        int keyboardHeight = screenHeight - rootView.getHeight();
        // 根据键盘高度调整PopupWindow的位置
        adjustPopupWindowPosition(keyboardHeight);
    }
});
  1. 在adjustPopupWindowPosition方法中,根据键盘的高度调整PopupWindow的位置。可以通过设置PopupWindow的y轴偏移量来实现位置的调整。具体代码如下:
代码语言:txt
复制
private void adjustPopupWindowPosition(int keyboardHeight) {
    // 获取PopupWindow的高度
    int popupWindowHeight = popupWindow.getHeight();
    // 计算PopupWindow的y轴偏移量
    int offsetY = keyboardHeight - popupWindowHeight;
    // 设置PopupWindow的y轴偏移量
    popupWindow.update(0, offsetY);
}
  1. 在需要显示PopupWindow的地方,调用showAtLocation方法显示PopupWindow。具体代码如下:
代码语言:txt
复制
popupWindow.showAtLocation(anchorView, Gravity.BOTTOM, 0, 0);

通过以上步骤,就可以实现在键盘出现时动态调整PopupWindow的位置,使其保持在正确的位置上。

在腾讯云的产品中,可以使用腾讯云移动直播(https://cloud.tencent.com/product/mlvb)来实现音视频直播功能,腾讯云云服务器(https://cloud.tencent.com/product/cvm)来提供稳定可靠的服务器运维,腾讯云云数据库MySQL版(https://cloud.tencent.com/product/cdb_mysql)来存储和管理数据,腾讯云云函数(https://cloud.tencent.com/product/scf)来实现云原生应用的开发和部署。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android 仿UC浏览器详情页评论弹框效果

大概就这种效果 额,突然发现UC被我卸载了,这个是QQ浏览器效果,不过都一样,如果当前页面不是全屏的话,把根布局设为相对布局,然后设置评论布局为处于底部,这样点击评论时弹开键盘会触发布局重绘,底部评论也会处于软键盘上方...,键盘消息,布局下移,但是我们要说是全屏情况下我们如何处理。...(getWindow().getDecorView(), Gravity.BOTTOM, 0, 0); } 当然,最后最关键popupWindow配置,要不然popupWindow会被软键盘遮挡...(editText, mContext); } public void showAtLocation(View parent, int gravity, int x, int y) {...); // 显示输入法之后调用,否则popupwindow会在窗口底层 super.showAtLocation(parent, gravity, x, y); }

1.3K30
  • ScrollView里面基于某个View弹出PopupWindowPopupWindow不会跟着View滚动?

    初看其实很简单,根据A位置和大小,算出PopupWindow位置,调用showAtLocation方法即可实现在A正上方弹出。...] + v.getMeasuredWidth() / 2 - measureWidth / 2, location[1] - measureHeight); } 如上,就可以textView正上方显示一个...这里写图片描述 可以发现,我们PopupWindow并没有跟随一起滚动,这是因为调用showAtLocation时候,PopupWindow位置已经确定了,所以并不会跟着A滚动而滚动。...这样效果产品经理肯定不会同意,所以就需要我们来动态更新PopupWindow位置了。...我们这里只需要让PopupWindow始终A正上方,所以重点就是确定随着ScrollView滚动PopupWindow位置

    1.3K20

    Android View 完美实现EditText 键盘上边示例

    此方法基于PopupWindow,适合需要回复内容时响应点击事件,打开软键盘,编辑框在软键盘上部。 优点,编辑框使用CleanEdittext,监听输入状态来更改回复按钮颜色,添加title等。...先展示效果 点击评论打开软键盘,编辑框在软键盘上部,点击其他区域消失收起软键盘: ? ? 1.BaseSelectPopupWindow 代码。...2.需要使用时候 private BaseSelectPopupWindow popWiw;// 回复 编辑框 声明之后使用时候初始化并调用: private void popWiw( ) { popWiw...DrawableRight,假如没有设置我们就使用默认图片 mClearDrawable = getCompoundDrawables()[2]; if (mClearDrawable == null...设置点击事件,所以我们用记住我们按下位置来模拟点击事件 * 当我们按下位置 EditText宽度 - 图标到控件右边间距 - 图标的宽度 和 * EditText宽度 - 图标到控件右边间距之间我们就算点击了图标

    1K41

    Android弹窗二则: PopupWindow和AlertDialog

    这里说两个常用弹窗类, PopupWindow和AlertDialog. 我理解就是, PopupWindow较为随性, 可以在任意位置弹窗, 比如你经常看到朋友圈点赞那个小弹窗....那AlertDialog就很正经了, 位置固定在中央, 比如无比烦人更新提示就是用它, 大多数都是消息标题+内容+确定按钮+取消按钮. 好, 不多废话了. ?...为了保护你眼睛, 图片已处理 ---- PopupWindow 官方文档传送门 实例解析 先来看一段常规PopupWindow使用, 然后逐行分析下....(false);这句之前那句为true前提下, true和false效果几乎一样....单选多选条目展示 ---- 内容补充 补充: 我们现在来说一个比较复杂, 也比较有意思. 就是弹窗中填充自定义view.

    1.6K60

    Android项目实战(二十七):数据交互(信息编辑)填写总结

    或者fragment中使用   ①、这里我把对话框写在一个方法里,方便使用 title 文本对话框标题 isSingleLine EditText是否限制一行显示 maxSize EditText中文字最大长度...textview 修改TextView控件,首先要讲该控件文本显示EditText中,点击确定后需要将编辑文本显示改控件中 private void showEditDialog(String...对象 // 设置popupWindow显示位置 // 此时设在界面底部并且水平居中 popup.showAtLocation...显示位置 // 此时设在界面底部并且水平居中 popup.showAtLocation(find_expert_ly,...对象 // 设置popupWindow显示位置 // 此时设在界面底部并且水平居中 popup.showAtLocation(feedback_list_ly

    3.5K70

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

    说到PopupWindow,应该都会有种熟悉感觉,使用起来也很简单 // 一个自定义布局,作为显示内容 Context context = null;  // 真实环境中要赋值 int layoutId...(contentView); 如果创建PopupWindow时候没有指定高宽,那么showAsDropDown默认只会向下弹出显示,这种情况有个最明显缺点就是:弹窗口可能被屏幕截断,显示不全,所以需要使用到另外一个方法...showAtLocation,这个坐标是相对于整个屏幕,所以需要我们自己计算位置。...如下图所示,我们可以根据屏幕左上角坐标A,屏幕高宽,点击View左上角坐标C,点击View大小以及PopupWindow布局大小计算出PopupWindow显示位置B ?...[1]);// windowContentViewRoot是根布局View 上面的例子只是提供了一种计算方式,实际开发中可以根据需求自己计算,比如anchorView左边情况,中间情况,可以根据实际需求写一个弹出位置能够自适应

    2.8K110

    Android PopupMenu and PopupWindow

    本文通过一个实例简单介绍下PopupMenu和PopupWindow区别和各自使用方式。...实例代码使用了Android Annotations,但是代码读起来应该是没有障碍,如果不太了解AA的话,可以参考下此文。...2.实例基础代码 我们要实现界面就是上面所示界面,上下各有两个按钮,点击按钮分别在正确位置弹出PopupMenu或者PopupWindow,下面是界面代码: <RelativeLayout...}); } 从上面代码可以看出,点击上面和下面的按钮代码略微不同,因为这里我希望PopupWindow一直是从界面的底部慢慢滑入进入,所以要控制下位置。...关于PopupWindow显示位置,它既提供了showAtLocation方法精确控制,也提供了showAsDropDown(view)方法简单控制。

    2.3K21

    Android底部弹窗实现示例代码

    利用PopWindow实现底部弹窗 因为本文主要是介绍实现底部弹窗方式,所以,不会PopupWindow进行具体讲解,大家可以到这里了解PopupWindow。...注:因为采用填充父布局方式,这里弹出窗口都是PopupWindow,所以点击左图中阴影弹窗不会消失,因为阴影也是PopupWindow呀!...第二个为从父布局哪里弹出,x和y是相对于父布局弹出位置偏移量。...由于,我们要将mPopWindow放在整个屏幕最低部,所以我们将R.layout.activity_main做为它父容器,将其显示BOTTOM位置。...,onStart方法中初始化弹窗数据,onCreateView中加载布局,同样,和Fragment使用方法也是一样,下面看下在Activity中使用 void showDialog() { FragmentTransaction

    4.3K31

    ToolBar使用方法详解

    ToolBar出现是为了替换之前ActionBar各种不灵活使用方式,相反,ToolBar使用变得非常灵活,因为它可以让我们自由往里面添加子控件.低版本要使用的话,可以添加support-v7包...--colorAccent 对应EditText编辑时、RadioButton选中、CheckBox等选中时颜色。...ToolBar颜色也是可以style中配置.然后清单文件application节点下需要确认使用style是Android:theme=”@style/AppTheme” ok,样式配置完后...attr/actionBarSize:表示根据屏幕分辨率采用系统默认高度 如果低版本也要使用的话,则需要使用v7包,否则只有api21上才能有效 -- <android.support.v7...mPopupWindow.showAtLocation(mToolbar, Gravity.RIGHT | Gravity.TOP, 0, yOffset); //设置item点击监听 popView.findViewById

    2K11

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

    说到PopupWindow,应该都会有种熟悉感觉,使用起来也很简单 // 一个自定义布局,作为显示内容 Context context = null;  // 真实环境中要赋值 int layoutId...(contentView); 如果创建PopupWindow时候没有指定高宽,那么showAsDropDown默认只会向下弹出显示,这种情况有个最明显缺点就是:弹窗口可能被屏幕截断,显示不全,所以需要使用到另外一个方法...showAtLocation,这个坐标是相对于整个屏幕,所以需要我们自己计算位置。...如下图所示,我们可以根据屏幕左上角坐标A,屏幕高宽,点击View左上角坐标C,点击View大小以及PopupWindow布局大小计算出PopupWindow显示位置B ?...[1]); // windowContentViewRoot是根布局View 上面的例子只是提供了一种计算方式,实际开发中可以根据需求自己计算,比如anchorView左边情况,中间情况,可以根据实际需求写一个弹出位置能够自适应

    3.5K10

    PopupWindow自定义位置显示实现代码

    一、概述 Android中弹出式菜单(以下称弹窗)是使用十分广泛一种菜单呈现方式,弹窗为用户交互提供了便利。...关于弹窗实现大致有以下两种方式AlertDialog和PopupWindow,当然网上也有使用Activity并配合Dialog主题方式实现弹窗,有兴趣朋友也可以去研究一下。...对于AlertDialog和PopupWindow两者最主要区别就是显示位置问题: (1)AlertDialog在位置显示上是固定 (2)PopupWindow相对比较随意,能够主屏幕任意位置显示...对象 final PopupWindow popupWindow = new PopupWindow(popupView,400,100); // 第二、第三个参数用来设置弹窗大小,也可以用...WRAP_CONTENT // 设置位置 popupWindow.showAtLocation(popupView, Gravity.NO_GRAVITY,x,y); new

    1K10
    领券