我想知道我的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可见屏幕内相关推荐

  1. Android 判断手机是32位CPU还是64位CPU android.os.Build类字段含义

    手机cpu分32位与64位,下面介绍如何在所有android版本上判断手机cpu位数是32位还是64位. 1 Android 判断手机是32位CPU还是64位CPU Android从API level ...

  2. Android 判断view 是否在屏幕中展示出来(打点真实展现)

    这篇文章主要介绍如何判断 view在屏幕中已经展现,主要可用于打点,视频播放等 前段时间,PM提出一个打点需求.要求当某个模块/view 在用户可见的时候 打点,否则不打.   之前的打点都是在服务端 ...

  3. android framelayout view上下层_理解并测试什么是Android事件分发

    一.什么是事件分发 所谓事件分发,就是将一次完整的点击所包含的点击事件传递到某个具体的View或ViewGroup,让该View或该ViewGroup处理它(消费它).分发是从上往下(父到子)依次传递 ...

  4. 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]愿 ...

  5. Android自定义View高级动效之---安卓流星雨动效|Android流星雨专辑封面

    篇章目标要点 最近看到酷我音乐App出了一则<穹顶流星>动效,看完之后决定自己尝试一下实现,本文将围绕通过自定义View实现流星雨效果,可以看到流星雨环绕专辑图的高级动效.通过完成这项开发 ...

  6. 精通Android自定义View(十四)绘制水平向右加载的进度条

    1引言 1 精通Android自定义View(一)View的绘制流程简述 2 精通Android自定义View(二)View绘制三部曲 3 精通Android自定义View(三)View绘制三部曲综合 ...

  7. Android 判断用户2G/3G/4G移动数据网络

    2019独角兽企业重金招聘Python工程师标准>>> Android 判断用户2G/3G/4G移动数据网络 在做 Android App 的时候,为了给用户省流量,为了不激起用户的 ...

  8. Android自定义View绘制流程

    Android视图层次结构简介 在介绍View绘制流程之前,咱们先简单介绍一下Android视图层次结构以及DecorView,因为View的绘制流程的入口和DecorView有着密切的联系. 我们平 ...

  9. Android自定义View进阶-MotionEvent详解

    欢迎Follow我的GitHub, 关注我的CSDN. 其余参考Android目录 我们微信公众号:杨守乐 推荐文章: 如果你喜欢上了一个程序员小伙,献给所有的程序员女友 学习资料(干货汇集)不断更新 ...

最新文章

  1. 关于伪静态网站的好处
  2. CSS3新的鼠标样式介绍
  3. php中html富文本编辑器,php + wangEditor 富文本编辑器的配置
  4. 线段树优化的Dijkstra
  5. jstack 脚本 自动日志_GitLab从安装到全自动化备份一条龙
  6. GConf error:Failed to contact configuration server
  7. 【MySQL 5.7 】从库1032 报错处理
  8. 华为手机使用应用沙盒动态修改分辨率参数
  9. 什么可以代替pencil?pencil的平替推荐
  10. ppi 各代iphone_iPhone全机型尺寸分辨率PPI大全
  11. 使用WP-Salts-Update-CLI自动更新您的WordPress盐
  12. 2021110701-java前后台传递时间对象相差8个小时的时区问题
  13. Data too long for column解决方法
  14. 这,是一篇有“味道”的科普…
  15. 电源线的噪声共模干扰和差模干扰优化设计
  16. 微信号名称乱码什么情况_“微信号”与“微信账号”有什么区别?
  17. 电子计算机进行会计核算 其会计,1. 使用电子计算机进行会计核算,其软件与其生成会计 ….doc...
  18. (转)【如何快速的开发一个完整的iOS直播app】(原理篇)
  19. 再度盈利后提“冷静增长”,爱奇艺守住长视频初心
  20. Java中枚举类型Enum的一种使用方式

热门文章

  1. leetcode 88
  2. Linux系统添加永久静态路由的方法
  3. git add -A 、git add -u 、 git add . 三种区别
  4. UEditor1.2.6.0在.net环境下使用
  5. 马云卸任CEO演讲全文:明天起生活将是我的工作
  6. 46. Permutations
  7. [Leetcode][第977题][JAVA][有序数组的平方][排序][双指针]
  8. [Leedcode][JAVA][第209题][长度最小的子数组][滑动窗口][前缀和][二分查找][双指针]
  9. mysql一个表几亿数据_如何在mysql 造1亿条记录的大容量数据表?
  10. yum如何安装特定版本的gcc_linux下如何升级python