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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Modern OpenGL】摄像机系统 Camera

说明:跟着learnopengl的内容学习,不是纯翻译,只是自己整理记录。 强烈推荐原文,无论是内容还是排版。 原文链接 本文地址:http://blog.csdn.net/aganlengzi/article/details/50448469 摄像机 Camera 在前面的教程中…

jQuery操作cookie

First of all&#xff0c;引用jq的一个插件jquery.cookie.js 1<span style"font-size:14px">$.cookie(’the_cookie’, ‘the_value’); //新建cookie2 $.cookie(’the_cookie’, null); //删除一个cookie</span><span style"font-size:14px&quo…

linux ntp时间同步

一、搭建时间同步服务器1、编译安装ntp serverrpm -qa | grep ntp若没有找到&#xff0c;则说明没有安装ntp包&#xff0c;从光盘上找到ntp包&#xff0c;使用rpm -Uvh ntp***.rpm进行安装2、修改ntp.conf配置文件vi /etc/ntp.conf①、第一种配置&#xff1a;允许任何IP的客户机…

android jni release,Android NDK 设置编译模式debug和release

原文&#xff1a;http://stackoverflow.com/questions/14564918/android-ndk-release-buildUnless you have created the Application.mk or defined your application as debuggable inside the AndroidManifest.xml you dont have to do anything because by default the app…

android setimageresource取list的,Java ImageView.setImageTintList方法代码示例

import android.widget.ImageView; //导入方法依赖的package包/类public static void show(Context context, CharSequence charSequence, int type) {View layout;if (toast null) {toast Toast.makeText(context, "", Toast.LENGTH_SHORT);initToast(toast);layo…

MFC之CAsyncSocket详解

CAsyncSocket类是从Object类派生而来。CAsyncSocket对象称为异步套接字对象 使用CAsyncSocket进行网络编程&#xff0c;可以充分利用Windows操作系统提供的消息驱动机制&#xff0c;通过应用程序框架来传递消息&#xff0c;方便地处理各种网络事件。另一方面&#xff0c;作为M…

codevs1040 统计单词个数

题目描述 Description给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入&#xff0c;且保证每行一定为20个)。要求将此字母串分成k份(1<k<40)&#xff0c;且每份中包含的单词个数加起来总数最大(每份中包含的单词可以部分重叠。当…

UE MATH

1. 求两点的单位向量

root 密码丢失后的重新设置

/usr/local/mysql/bin/mysqld_safe --skip-grant-tables & mysql> use mysql; mysql> update user set passwordPASSWORD("root") where userroot;service mysqld stop; service mysqld start;/usr/local/mysql/bin/mysql -u root -p 转载于:https://w…

yum安装git

此方法对于RHEL、Fedora、CentOS有效&#xff1a; 1.yum install git 2.yum istall git-svn git-email git-gui gitk 转载于:https://www.cnblogs.com/moqiang02/p/4061129.html

材质

1. 随摄像机变化的镜面放射效果 2. 给物体表面增加抛光度 3. 菲涅耳透镜效果

Metasploit Framework命令汇总

一、msfconsole ? 帮助菜单back 从当前环境返回banner 显示一个MSF bannercd 切换目录color 颜色转换connect 连接一个主机exit 退出MSFhelp 帮助菜单info 显示一个或多个模块的信息irb 进入irb脚本模式jobs 显示和管理作业kill 杀死一个作业load 加载一个插件loadpath 在一个…

html keyup事件,jquery keyup事件为什么不执行?

先指出你的一个错误点$(#skillKey).on(click, tr, function () {$(this).css(color,red);$(this).keyup(function(){alert(123)});});你这样绑定事件&#xff0c;结果是点击一次tr绑定一次&#xff0c;点了多少次就绑定了多少次&#xff0c;这个例子还是不明显&#xff0c;你在…

cable

1. 建立一个actor&#xff0c;添加一个cable, 然后添加两个mesh作为cable的两个端点 2. 在编辑器中只能设置cable终点attach的mesh和mesh的socket, 因此需要在actor的构成函数里手动的设置 cable起点attach的mesh和socket

windows下memcache的安装总结

一、memcache软件的安装&#xff1a; 1、下载memcache的windows版本&#xff0c;把memcached.exe放在F:盘符&#xff0c;&#xff08;memcached.exe文件位置不可变动&#xff09;。 2、进入cmd命令终端&#xff0c;进入到F:盘符。 3、memcached.exe -d install 命令进行memcach…

html 调用c#dll中的控件,C#调用ActiveX控件的方法

C#调用ActiveX控件时通常要进行两步操作&#xff1a;第一步&#xff1a;注册控件&#xff0c;例如ABE.DLL&#xff0c;将ABE.DLL拷贝至系统文件夹SYSTEM32下&#xff0c;然后在开始中执行CMD命令&#xff0c;regsvr32 ABE.DLL&#xff0c;会提示注册成功&#xff1b;第二步&…

Android-将切换tabs的指示器合并到ActionBar上

最近比较忙&#xff0c;好久没更新过博客。国庆第一天没回家&#xff0c;闲下来可以把之前就想贴上来的东西写一下。 使用过Smooth和Fuubo这两个优秀的第三方微博客户端的同学应该见过他们的主页UI&#xff0c;如下图&#xff1a; 他们把切换tabs的指示器放在了ActionBar上&…

html5教学文档笔记,4.HTML 教程- (HTML5 基础)

HTML 教程- (HTML5 基础)1.HTML 标题HTML 标题(Heading)是通过- 标签来定义的.2.HTML 段落HTML 段落是通过标签 来定义的.3.HTML 链接HTML 链接是通过标签 来定义的.提示:在 href 属性中指定链接的地址。菜鸟教程(runoob.com)这是一个链接使用了 href 属性这是一个链接使用了 …