Android判断view在屏幕可见,如何检查TextView是否在Android可见屏幕内
我想知道我的textview是否在可见的屏幕区域内.
但似乎没有什么对我有用.
我以前检查过的代码是
Rect rect = new Rect();
//textview intialized in onCreate as text1
text1.getHitRect(rect);
text1.measure(0, 0);
//layout is the parent layout (linear) in which i am adding the text view
Rect acctualView = new Rect(Math.round(layout.getX()), Math.round(layout.getY()),
Math.round(layout.getX() + layout.getWidth()), Math.round(layout.getY() +layout.getHeight()));
if(Rect.intersects(acctualView, rect))
{
Toast.makeText(context, "visible", Toast.LENGTH_LONG).show();
}else {
Toast.makeText(context, "Not visible ", Toast.LENGTH_LONG).show();
}
textview和layout的每个宽度和高度都给我0“零”,
请让我知道如何解决这个问题,并知道视图是否在可见区域内
这是我的完整活动代码
public class MainActivity extends Activity {
private TextView text1, text2, text3, text4, text5, text6;
private Context context;
private LinearLayout layout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = getLayoutInflater().getContext();
layout = (LinearLayout) findViewById(R.id.parentLayout);
setTextViews();
checkViewAndUpdate();
}
private void checkViewAndUpdate() {
Rect rect = new Rect();
layout.getHitRect(rect);
if (text1.getLocalVisibleRect(rect)) {
Toast.makeText(context, "visible", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(context, "Not visible", Toast.LENGTH_LONG).show();
}
}
private void setTextViews() {
text1 = new TextView(context);
text2 = new TextView(context);
text3 = new TextView(context);
text4 = new TextView(context);
text5 = new TextView(context);
text6 = new TextView(context);
text1.setText("text1");
text2.setText("text2");
text3.setText("text3");
text4.setText("text4");
text5.setText("text5");
text6.setText("text6");
text1.setTextSize(30);
text2.setTextSize(30);
text3.setTextSize(30);
text4.setTextSize(30);
text5.setTextSize(30);
text6.setTextSize(30);
//layout.removeAllViews();
layout.addView(text1);
layout.addView(text2);
layout.addView(text3);
layout.addView(text4);
layout.addView(text5);
layout.addView(text6);
}
}
我的布局只包含LinearLayout(空)
解决方法:
正如我在评论中写的那样,检查onCreate上的可见rect是行不通的.
在onCreate结束时尝试此代码(而不是直接调用checkAndUpdate()).
layout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
checkViewAndUpdate();
}
});
如果您在onCreate中添加了视图,则视图布局无法完成.是的,这次用户无法看到实际活动,并且未设置视图的实际大小.
onGlobalLayout将在视图布局结束时调用(并且活动可见).
在那个时刻,我们现在可以获得它们的大小和位置!
仅供参考,您可以通过在onGlobalLayout()中调用layout.getViewTreeObserver().removeOnGlobalLayoutListener(this)来删除此侦听器.
标签:android,textview
来源: https://codeday.me/bug/20190624/1276903.html
Android判断view在屏幕可见,如何检查TextView是否在Android可见屏幕内相关推荐
- Android 判断手机是32位CPU还是64位CPU android.os.Build类字段含义
手机cpu分32位与64位,下面介绍如何在所有android版本上判断手机cpu位数是32位还是64位. 1 Android 判断手机是32位CPU还是64位CPU Android从API level ...
- Android 判断view 是否在屏幕中展示出来(打点真实展现)
这篇文章主要介绍如何判断 view在屏幕中已经展现,主要可用于打点,视频播放等 前段时间,PM提出一个打点需求.要求当某个模块/view 在用户可见的时候 打点,否则不打. 之前的打点都是在服务端 ...
- android framelayout view上下层_理解并测试什么是Android事件分发
一.什么是事件分发 所谓事件分发,就是将一次完整的点击所包含的点击事件传递到某个具体的View或ViewGroup,让该View或该ViewGroup处理它(消费它).分发是从上往下(父到子)依次传递 ...
- Android自定义View实战:简约风歌词控件,Android开发者值得深入思考的几个问题
57[02:41.62]从不知 她的痛苦 58[02:52.02] 59[02:54.11]喜欢你 那双眼动人 60[03:00.13]笑声更迷人 61[03:02.38] 62[03:03.14]愿 ...
- Android自定义View高级动效之---安卓流星雨动效|Android流星雨专辑封面
篇章目标要点 最近看到酷我音乐App出了一则<穹顶流星>动效,看完之后决定自己尝试一下实现,本文将围绕通过自定义View实现流星雨效果,可以看到流星雨环绕专辑图的高级动效.通过完成这项开发 ...
- 精通Android自定义View(十四)绘制水平向右加载的进度条
1引言 1 精通Android自定义View(一)View的绘制流程简述 2 精通Android自定义View(二)View绘制三部曲 3 精通Android自定义View(三)View绘制三部曲综合 ...
- Android 判断用户2G/3G/4G移动数据网络
2019独角兽企业重金招聘Python工程师标准>>> Android 判断用户2G/3G/4G移动数据网络 在做 Android App 的时候,为了给用户省流量,为了不激起用户的 ...
- Android自定义View绘制流程
Android视图层次结构简介 在介绍View绘制流程之前,咱们先简单介绍一下Android视图层次结构以及DecorView,因为View的绘制流程的入口和DecorView有着密切的联系. 我们平 ...
- Android自定义View进阶-MotionEvent详解
欢迎Follow我的GitHub, 关注我的CSDN. 其余参考Android目录 我们微信公众号:杨守乐 推荐文章: 如果你喜欢上了一个程序员小伙,献给所有的程序员女友 学习资料(干货汇集)不断更新 ...
最新文章
- 关于伪静态网站的好处
- CSS3新的鼠标样式介绍
- php中html富文本编辑器,php + wangEditor 富文本编辑器的配置
- 线段树优化的Dijkstra
- jstack 脚本 自动日志_GitLab从安装到全自动化备份一条龙
- GConf error:Failed to contact configuration server
- 【MySQL 5.7 】从库1032 报错处理
- 华为手机使用应用沙盒动态修改分辨率参数
- 什么可以代替pencil?pencil的平替推荐
- ppi 各代iphone_iPhone全机型尺寸分辨率PPI大全
- 使用WP-Salts-Update-CLI自动更新您的WordPress盐
- 2021110701-java前后台传递时间对象相差8个小时的时区问题
- Data too long for column解决方法
- 这,是一篇有“味道”的科普…
- 电源线的噪声共模干扰和差模干扰优化设计
- 微信号名称乱码什么情况_“微信号”与“微信账号”有什么区别?
- 电子计算机进行会计核算 其会计,1. 使用电子计算机进行会计核算,其软件与其生成会计 ….doc...
- (转)【如何快速的开发一个完整的iOS直播app】(原理篇)
- 再度盈利后提“冷静增长”,爱奇艺守住长视频初心
- Java中枚举类型Enum的一种使用方式
热门文章
- leetcode 88
- Linux系统添加永久静态路由的方法
- git add -A 、git add -u 、 git add . 三种区别
- UEditor1.2.6.0在.net环境下使用
- 马云卸任CEO演讲全文:明天起生活将是我的工作
- 46. Permutations
- [Leetcode][第977题][JAVA][有序数组的平方][排序][双指针]
- [Leedcode][JAVA][第209题][长度最小的子数组][滑动窗口][前缀和][二分查找][双指针]
- mysql一个表几亿数据_如何在mysql 造1亿条记录的大容量数据表?
- yum如何安装特定版本的gcc_linux下如何升级python