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

如何检测ListPopupWindow显示在锚视图的上方还是下方?

要检测ListPopupWindow显示在锚视图的上方还是下方,可以通过以下步骤进行:

  1. 获取锚视图的屏幕坐标:使用getLocationOnScreen()方法获取锚视图在屏幕上的坐标。
  2. 获取屏幕的高度:使用getDisplayMetrics()方法获取屏幕的高度。
  3. 计算锚视图的中心点坐标:将锚视图的屏幕坐标与锚视图的高度相加,得到锚视图的中心点坐标。
  4. 计算ListPopupWindow的高度:使用getHeight()方法获取ListPopupWindow的高度。
  5. 判断ListPopupWindow的显示位置:比较锚视图的中心点坐标与屏幕高度的一半,如果中心点坐标小于屏幕高度的一半,则ListPopupWindow显示在锚视图的下方;反之,显示在锚视图的上方。

以下是一个示例代码:

代码语言:java
复制
ListPopupWindow listPopupWindow = new ListPopupWindow(context);
// 设置ListPopupWindow的适配器和内容

View anchorView = findViewById(R.id.anchor_view);
int[] anchorLocation = new int[2];
anchorView.getLocationOnScreen(anchorLocation);

DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int screenHeight = displayMetrics.heightPixels;

int anchorCenterY = anchorLocation[1] + anchorView.getHeight();
int listPopupWindowHeight = listPopupWindow.getHeight();

if (anchorCenterY < screenHeight / 2) {
    // ListPopupWindow显示在锚视图的下方
    listPopupWindow.setAnchorView(anchorView);
    listPopupWindow.show();
} else {
    // ListPopupWindow显示在锚视图的上方
    listPopupWindow.setAnchorView(anchorView);
    listPopupWindow.setVerticalOffset(-listPopupWindowHeight);
    listPopupWindow.show();
}

在腾讯云的产品中,可以使用腾讯云移动推送(https://cloud.tencent.com/product/umeng)来实现消息推送功能,通过向移动设备发送通知,可以在锚视图上方或下方显示相关信息。

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

相关·内容

扩容云硬盘,磁盘管理器下方显示扩容后大小了,上方还是扩容前大小,2种解决办法

扩容云硬盘,磁盘管理器下方显示扩容后大小了,上方还是扩容前大小,这个问题是扩展卷时分区结尾刷新失败没有对齐,我多家云厂商都遇到过,是OS内部偶发性问题,非云厂商原因,反馈过微软,大致就是重新刷新下分区...如下图,数据盘原本100G,扩容到150G后,磁盘管理器下方显示扩容后大小了,上方还是扩容前大小image.pngimage.png对第2块盘再扩容10G,点"重新扫描磁盘",发现后面多了10G空白空间...image.png如果不扩容,而是现有150G基础上,怎么让磁盘管理器上面的100G变成150G呢?...使用diskgenius,分区上右击点调整分区信息(Resize Partition),把分区后边那2MB空白空间变成0KB,即把那2MB空白空间纳入到前边分区里,跟上面介绍增加10GB空白空间再执行扩展卷操作同出一辙...至于用系统自带磁盘管理器,还是diskgenius还是PartAssist,看个人习惯。diskgenius bug很多,不断更新,不建议使用5.3以下版本。

1.6K60
  • Android开发笔记(一百二十一)列表弹窗PopupMenu和ListPopupWindow

    PopupMenu 基本用法 PopupMenu是种显示位置不固定弹出菜单,因为它显示参照控件下方,所以展示位置随着参照控件位置变化而变化。...而其他几种菜单显示位置都是固定,比如说选项菜单Options固定显示屏幕下方,上下文菜单ContextMenu固定显示屏幕中央,溢出菜单OverflowMenu固定显示屏幕右上角,有关其他菜单详细说明参见...基本用法 ListPopupWindow也是参照控件下方显示列表窗口,不同是,它在展示上更加灵活,开发者可以自定义列表弹窗大小与样式。...下拉列表显示时将展现在参照控件下方,注意:如果不设置参照控件就直接调用show函数,系统不知道要把下拉列表何处展示,只能是异常退出了。...区别 v7-appcompat库中也提供了新版ListPopupWindow,据我观察功能上没什么区别,主要是弹窗显示风格上有所差异,如旧版ListPopupWindow有明显窗口边框与边缘阴影

    3.3K30

    API 23 widget.RelativeLayout.LayoutParams——属性分析

    android:layout_toLeftOf 属性说明:将此视图右边缘定位到给定视图ID左侧。 左侧。...对应全局属性资源符号是layout_toLeftOf。 android:layout_toRightOf 属性说明:将此视图左边缘定位到给定视图ID右侧。 左侧。...对应全局属性资源符号是layout_toStartOf。 android:layout_toEndOf 属性说明:将此视图起始边缘定位到给定视图ID结尾处。 结尾处。...对应全局属性资源符号是layout_toEndOf。 android:layout_above 属性说明:将此视图底部边缘定位在给定视图ID上方上方。...对应全局属性资源符号是layout_above。 android:layout_below 属性说明:将此视图顶部边缘定位在给定视图ID下方下方

    64720

    商汤SenseAR⭐五、AR云

    AR云点作用 用不那么官方、可能存在偏差方式来解读,我理解中,AR云点起到了定位作用。 云点像Vuforia识别图,SenseAR将识别到一片点云称作AR云点。...第一台手机主机会将识别到物体上点云上传到服务器,当另外一台手机检测到相同物体,识别出点云。识别出点云跟云上点云对比,发现是相同,于是就确定位置了。接下来虚拟物体位置也就确定了。...这样,多台设备根据云点,完成了虚拟物体定位功能。 云使用方法 本博客基于官方视频演讲所编写,视频上讲述该功能,是基于SenseAR SDK,而不是packages里面的包。...设置横屏LandspaceLeft 4️⃣ 打包测试 1、打开应用——点击Play——识别完点云——点击创建房间——得到房间号(上方绿色数字)——放置物体 2、打开应用——点击Play——输入上方得到房间号...大家还有什么问题,欢迎在下方留言!

    11210

    建立您第一个AR体验

    下载 软件开发工具包 iOS 11.3+ Xcode 10.0+ Beta 概观 此示例应用程序运行ARKit世界跟踪会话,其内容显示SceneKit视图中。...() configuration.planeDetection = [.horizontal, .vertical] sceneView.session.run(configuration) 仅当将显示视图显示屏幕上时才运行会话...如果AR是您应用辅助功能,请使用该属性确定是否提供isSupported基于AR功能。 为检测平面放置3D内容 设置AR会话后,可以使用SceneKit视图中放置虚拟内容。...启用平面检测后,ARKit会为每个检测平面添加和更新点。默认情况下,ARSCNView类为每个点添加一个SCNNode对象到SceneKit场景。...您视图委托可以实现向场景添加内容renderer(_:didAdd:for:)方法。当您将内容添加为与对应节点子节点时,类会自动移动该内容,因为ARKit会细化其对平面位置估计。

    1.1K20

    平面检测-搜索真实世界表面

    现在我们已经完成了正确运行ARKit项目的所有基本设置,我们希望我们设备能够坐在水平表面上。这是飞机检测本节中,我们将学习如何激活平面检测。我们将熟悉点以及如何使用它们将对象放置点上。...,以允许视图渲染场景时接收信息。...我们例子中,ViewController将自己指定为ARSCNView委托,委托者,从场景视图中检索内容任务,管理其更新并处理其事件。...你Scene Editor中看过它。您现在正在学习如何在代码中应用它。 飞机位置 所以,就像我们为手表所做步骤一样,我们需要定位它。将平面节点放在检测曲面的中心。...检测平面点是允许我们添加模型,就像它们坐在它们上一样,使其成为更真实体验。您在本教程中学到内容不仅可以让您了解如何模拟真实曲面,还可以模拟现实生活中事件。

    2.9K30

    聚焦位置-选择您喜欢位置放置虚拟物体

    在上一个视频中,您学习了如何检测水平曲面并能够透视它。正如我所提到,它们是放置物体点。但是,飞机上我们应该添加我们物体?为此,我们需要在屏幕上选择一个点。...我们将在didAdd方法中生成焦点方块,仅在检测到表面时才在场景中显示。让我们首先设置一个安全措施,如果焦点平方为零,则继续。否则,退出。换句话说,如果它已经存在,那么不要创建一个新。...viewDidLoad中,将屏幕中心设置为视图中心。...默认情况下,我们将其设置为true,因为它只我们检测到曲面时才会显示屏幕上。如果isClosed为true,请使用图像FocusSquare / close。...查看转换 当我们切换到横向模式时,我们将不得不更新屏幕中心点。首先,让我们updateFocusSquare()函数上方添加一个viewWillTransition子类。

    2.4K30

    TKDE2023 | 为推荐系统注入先验知识: 基于近邻增强对比学习推荐算法

    然后,其他节点表示被视为负样本。然而,对比学习推荐任务中显示出有效性,但也带来了新挑战,可能会使锚定节点与它们近邻信息产生距离。...SGL论文(见表II)中, 研究人员直接利用基于排名损失函数将点及其互动邻域拉近。而NCL 作者研究了如何基于聚类方法找到点正样本。 图1. 我们随机选择一个项目i作为节点。...由于在这幅图中最近邻居和交互邻居非常清晰,我们在此图中突出显示节点对比视角正样本。 邻域增强监督对比学习 本文旨在修改传统对比学习技术,以推荐任务中纳入不同类型正样本。...我们认为,构建节点i对比损失时,不仅应将其两个视图表示视为其正样本,还应将其近邻信息表示也视为其正样本。我们要解决挑战是如何建模节点多个正样本。...模型前置计算过程 模型前向过程中,我们将介绍如何实现锚定节点及其正样本表示。

    36810

    代码实验室--带你一步步理解使用 ConstraintLayout

    删除约束 使用这个 显示布局中删除约束按钮以删除选中控件上 所有 约束. 要删除单个约束, 点击设定了该约束点 如果你打算删除布局中所有约束, 使用菜单图标....继续, 从布局中删除 TextView 创建 ImageView 底点和容器底部约束 UI 生成器应该看起来是这样 Inspector 显示出控件控件一个方形区域中间....现在布局里只有单一个 ImageView, 我们来看一下 Autoconnect 是如何创建约束 这里是本节下一部分步骤, 作为指导, 上面的动画显示下方使用步骤: 把 ImageView 对齐到顶部并使用... Design 视图中打开布局文件. 默认情况下, 此文件中布局定义如下: 显示 @drawable/singapore 和 @drawable/ic_star ImageViews....自动连接和推理通过布局引擎断定如何为布局中各个元素创建约束协助你. 然后你可以进一步按照你认为合适方式自由地修改这些约束, 无论它们是由自动连接还是推理引擎生成.

    2.7K60

    深入浅出Yolo系列之Yolox核心基础完整讲解

    注意:以上所有模型,可点击最下方,阅读原文,查看下载。 2.2.1 Netron工具 如果有同学对netron工具还不是很熟悉,这里还是放上netron工具安装详细流程。...都是采用Darknet53网络结构,大白Yolov3视频中,对于它来源,结构,各个组件细节,都有很清晰讲解,如何有不了解,可以点击最下方,阅读原文,查看视频《Yolov3相关算法原理及实现...训练过程中,基础上,不断预测,然后不断迭代,从而更新网络参数,让网络预测越来越准。 那么Yolox中,是如何挑选正样本呢? 这里就涉及到两个关键点:初步筛选、SimOTA。...为了大家容易理解,大白还是以人脸检测任务绘制图片: 左面的人脸图片中,基于人脸标注框中心点,利用上面的公式,绘制了一个边长为5正方形。...4 深入浅出Yolox之自有数据集训练 因为Yolox代码,和之前Yolov3、Yolov4、Yolov5版本还是有很多不同地方。 很多同学可能对于如何利用自有数据集训练?还是有些疑惑。

    3.1K31

    视错觉升级版:多个视错觉效果实现

    圆框区域中显示图片是彩色,圆框外是黑白。我们可以通过手指移动来变化彩色区域。下方就是我们要实现最终效果。 ? 还是那句话,你看到不一定是你看到。...下方代码就是给上方彩色ImageView添加mask, 然后touchesMoved事件中随着手指移动来改变mask位置即可。至此上述这个效果就使用mask实现完毕了。 ?...下方是我们使用AutoLayout来实现上述效果,在下方效果中,并没有用到上述Mask,不过也是手动加了一层蒙版。下方就是我们没有使用mask最终效果。效果还是上方差不多少。 ?...上图就是我们为我们Label添加Mask,添加后,文字就会出现渐变效果。当然原理是一样下方就是上述效果视图层级。也是两层不同文字,通过mask来显示指定区域。...当然上面的Hello World是讲Mask添加在了Lable上了,而下方效果是讲Mask添加在了上层视图上,上层视图背景色是红色,上层视图上贴了一些列白色Label,当然显示只是mask区域内东西了

    842100

    第 15 篇:优化博客功能细节,提升使用体验—— HelloDjango 系列教程

    作者:HelloGitHub-追梦人物 文中涉及示例代码,已同步更新到 HelloGitHub-Team 仓库 点击本文最下方“阅读原文”即可获取 之前系列教程中,我们已经实现了:文章发布、展示...让我们博客更加完美,使用起来更加顺手~ 模型中指定排序 为了让文章(Post)按发布时间逆序排列,让最新发表文章排在文章列表最前面,我们对返回文章列表进行了排序,即各个视图函数中都有类似于...显示正确评论量 有两处地方显示评论量(首页文章列表和文章详情页),显示评论量方法很简单。回顾一下我们是如何获取某篇文章下评论列表?...我们可以评论区域增加一个点,2 处显示评论量地方超链接都指向这个点处,这样点击这两个地方将直接跳转到评论列表区域,方便用户快速查看评论内容。...包括如何编写模型(Model)、如何编写视图函数(View)、如何使用 django 内置模板系统(Template)以及如何配置路由(URL),这四大模块是 django 开发核心所在,现在我们已经能够基本掌握这些模块使用方法了

    54020

    iOS动画-CALayer基础知识

    6.中心点(position)与点(anchorPoint) 7.视图与图层坐标系 一、理解视图与图层 UIView我们都非常熟悉, 但它其实是对于CALayer一层封装,我们创建UIView...视图职责就是创建并管理这个图层,以确保子视图层级关系中添加或者被移除时候,它们关联图层也同样对应在层级关系树当中有相同操作。...为了能清楚区分,图层用了position,视图用了center,但它们都代表了同样值,另外CALayer点(anchorPoint)没有UIView中公开。...;但这时候我们又不得不考虑一个问题:修改点可以让我们动画围绕非中心点旋转,但是这也改变了原有视图位置frame,这是我们不想要结果,该如何解决呢?...(或视图)坐标系下点或者矩形转换为另一个图层(或视图)坐标系下点或者矩形;开发过程中我们通常操作对象都是视图,所以下面以视图为例简单演示其用法:首先创建添加两个宽高都是100*100橙色、紫色视图控制器

    1.9K50

    Android开发笔记(三十六)展示类控件

    代码中实现时,可调用如下方法: setGravity : 设置文本对齐方式。 setLines : 设置文本行数。 setMaxLines : 设置文本最大行数。...XML布局文件中实现时,可设置如下属性: drawableTop : 指定文本上方图形。 drawableBottom : 指定文本下方图形。...代码中实现时,可调用如下方法: setCompoundDrawables : 设置文本周围图形。该方法有四个参数,分别表示左边、上方、右边、下方图形。...该功能有两种实现方式: 方式一:布局文件EditText节点中加入singleLine属性,但该方式只视觉上起作用,真正字符串还是带有回车换行符; android:singleLine="true...,与图形显示有关属性说明如下: XML布局文件中指定: scaleType : 指定图形拉伸类型。

    1.5K30

    UIKit Dynamics:抛出视图 —《Graphics & Animation系列三》

    animator.removeAllBehaviors() // 创建一个UIAttachmentBehavior,它将图像视图点附加到用户点击一个点(碰巧是完全相同点)。...稍后,更改定位点使图像视图移动。 // 将点附加到视图就像安装一个将点连接到视图固定附件位置不可见杆。...当用户手指移动时,手势识别器调用此方法更新点以跟随触摸。 另外,animator 会自动更新视图以跟随定位点。 运行demo,拖动视图会出现如下效果: ?...注意视图不仅仅是屏幕上进行旋转; 如果您在图像某个角落开始手势,则由于缘故,视图会随着手指移动而旋转。 但是,当完成拖动时,将视图恢复到原始位置会更好。...在这里阅读复杂计算。 其中一些取决于手指在启动手势时距离手指边缘距离。 调整这块value,观察运动如何改变效果。

    1.1K20
    领券