返回顶部
首页 > 资讯 > 移动开发 >Android 遍历界面所有的View
  • 754
分享到

Android 遍历界面所有的View

androidview面试遍历 2023-09-27 08:09:36 754人浏览 薄情痞子
摘要

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 目录 一、导

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。
专注于分享各领域原创系列文章 ,擅长java后端移动开发、商业变现、人工智能等,希望大家多多支持。

目录

在这里插入图片描述

一、导读

我们继续总结学习,温故知新。

二、概览

本文讲述如何遍历获取页面中所有的view,并输出对应的id,textview文本内容,imageview实际大小及设置的图片大小。

可用于检测Android应用中的大图。

三、实践

在Android开发中,有时我们需要遍历界面上的所有View,以便进行某些操作。例如,我们可能需要查找特定类型的View,或者对所有的View进行某种操作。这里是一个简单的示例,展示如何遍历界面上的所有View。
首先,假设你有一个Activity或Fragment,里面有一个布局文件,里面包含各种各样的View,例如Button、TextView、ImageView等。

然后,你可以在Activity或Fragment的代码中,通过递归的方式遍历所有的View。

不多说,直接上代码,

图片大小检测思路。

    fun checkBitmapFromView(){        //1、遍历activity中的各个View控件        //2、获取View控件加载的Bitmap        //3、对比Bitmap宽高与View宽高    }

示例代码:
遍历获取所有的view,并输出相应的信息

    List<View> viewList=new ArrayList<>();    @Override    protected void onResume() {        super.onResume();        loGoIcon.postDelayed(new Runnable() {            @Override            public void run() {                getAllViews((ViewGroup) getWindow().getDecorView());                for (View view: viewList) {                    if(view instanceof TextView) {                        Log.d("xyz", view.toString());                        Log.d("xyz", ((TextView)view).getText().toString());                    } else if(view instanceof ImageView) {                        Log.d("xyz", view.toString());                        checkBitmap(view, ((ImageView)view).getDrawable());                    } else {                        Log.d("xyz", view.toString());                    }                }            }        }, 3000);    }
    //获取所有的子view,我们这里只保存imageview及textview,用于测试    private List<View> getAllViews(ViewGroup viewGroup){        for(int i=0;i< viewGroup.getChildCount(); i++){            View view = viewGroup.getChildAt(i);            if(view instanceof ViewGroup) {                getAllViews((ViewGroup) view);            } else {                if(view instanceof ImageView || view instanceof TextView) {                    viewList.add(view);                }                if(view.getVisibility() == View.VISIBLE) {                }            }        }        return viewList;    }

这个示例代码会遍历界面上的所有View,并将image view和textview加入到list中。注意,这里使用了递归方法来遍历ViewGroup中的所有子View。如果View是一个ViewGroup(例如RelativeLayout、LinearLayout等),那么我们就递归遍历它的所有子View。如果View是一个叶子视图(例如Button、TextView等),那么我们就执行想要的操作。

当我们获取到页面上的imageview后,就可以做一些操作,如
ImageView大小检测

    private void checkBitmap(Object thiz, Drawable drawable) {        if (drawable instanceof BitmapDrawable && thiz instanceof View) {            final Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();            final View view = (View) thiz;            int width = view.getWidth();            int height = view.getHeight();            if (bitmap != null) {                if (width > 0 && height > 0) {                    // 图标宽高都大于view带下的2倍以上,则警告                    if (bitmap.getWidth() >= (width << 1)&& bitmap.getHeight() >= (height << 1)) {//                        warn(bitmap.getWidth(), bitmap.getHeight(), width, height, new RuntimeException("Bitmap size too large"));                    }                    warn(bitmap.getWidth(), bitmap.getHeight(), width, height, new RuntimeException("log"));                } else {                    final Throwable stackTrace = new RuntimeException();                    view.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {                        @Override                        public boolean onPreDraw() {int w = view.getWidth();int h = view.getHeight();if (w > 0 && h > 0) {    if (bitmap.getWidth() >= (w << 1)            && bitmap.getHeight() >= (h << 1)) {//        warn(bitmap.getWidth(), bitmap.getHeight(), w, h, stackTrace);    }    warn(bitmap.getWidth(), bitmap.getHeight(), w, h, stackTrace);    view.getViewTreeObserver().removeOnPreDrawListener(this);}return true;                        }                    });                }            } else {                warn(bitmap.getWidth(), bitmap.getHeight(), width, height, new RuntimeException("bitmap null"));            }        }    }    private void warn(int bitmapWidth, int bitmapHeight, int viewWidth, int viewHeight, Throwable t) {        String warnInfo = new StringBuilder("Bitmap info: ")                .append("\n real size: (").append(bitmapWidth).append(',').append(bitmapHeight).append(')')                .append("\n desired size: (").append(viewWidth).append(',').append(viewHeight).append(')')                .append("\n call stack trace: \n").append(Log.getStackTraceString(t)).append('\n')                .toString();        Log.d("xyz", warnInfo);    }

我们看下log输出

com.xxx.xxx.xxx.ImageViewFor{e292c7e VFED..C.. ........ 540,1348-900,1528 #7f0a024e app:id/bt_phone}2023-08-23 18:28:47.956 12556-12556 xyz                com.xxx.xxx                      D  Bitmap info:          real size: (144,144)         desired size: (360,180)         call stack trace:         java.lang.RuntimeException: log            at com.xxx.xxx.ui.LoginActivity.checkBitmap(LoginActivity.java:235)            at com.xxx.xxx.ui.LoginActivity.access$100(LoginActivity.java:79)            at com.xxx.xxx.ui.LoginActivity$2.run(LoginActivity.java:193)            at android.os.Handler.handleCallback(Handler.java:900)            at android.os.Handler.dispatchMessage(Handler.java:103)            at android.os.Looper.loop(Looper.java:219)            at android.app.ActivityThread.main(ActivityThread.java:8673)            at java.lang.reflect.Method.invoke(Native Method)            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109)

四、 推荐阅读

Java 专栏

SQL 专栏

数据结构与算法

Android学习专栏

ddd

来源地址:https://blog.csdn.net/fumeidonga/article/details/133070036

--结束END--

本文标题: Android 遍历界面所有的View

本文链接: https://lsjlt.com/news/419300.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android 遍历界面所有的View
    关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 目录 一、导...
    99+
    2023-09-27
    android view 面试 遍历
  • android自定义view之实现日历界面实例
    现在网上有很多自定义view实现日历的demo,今天讲一讲如何自己实现这个自定义view。 看一下最终效果图: 在这个自定义view中,我使用了各种奇技淫巧的方法来实现这个日...
    99+
    2022-06-06
    view 界面 Android
  • Android如何遍历特定目录下所有文件
    第一个案例为大家分享了Android遍历特定目录下所有文件,包含子目录的,并删除最新创建的。 private boolean deleteLastFromFlod...
    99+
    2022-06-06
    遍历 Android
  • Android 遍历文件夹中所有文件的实例代码
    可以获得文件夹中所有文件的路径及文件名。代码很简单,直接上车,车上再解释: public static JSONArray getAllFiles(String dirPath, String _type) { File f = n...
    99+
    2023-05-31
    android 遍历文件夹 roi
  • 如何在Redis中遍历所有key
    本篇文章给大家分享的是有关如何在Redis中遍历所有key,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。当我们需要遍历Redis所有key或者指定模式的key时,首先想到的是K...
    99+
    2023-06-14
  • python如何遍历字典中所有的键
    这篇文章将为大家详细讲解有关python如何遍历字典中所有的键,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。遍历字典中所有的键使用for循环和key()方法遍历字典中的所有键,如下例所示:car ...
    99+
    2023-06-17
  • 如何遍历LINQ序列的所有子集
    小编给大家分享一下如何遍历LINQ序列的所有子集,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!遍历LINQ序列的所有子集有的时候,遍历数组的所有子集很有用。子集和...
    99+
    2023-06-17
  • python如何遍历字典中所有的值
    小编给大家分享一下python如何遍历字典中所有的值,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!遍历字典中所有的值使用for循环和values()方法遍历字典中...
    99+
    2023-06-17
  • Android遍历所有文件夹和子目录搜索文件
    本文实例为大家分享了android遍历所有文件夹和子目录来搜索文件,供大家参考,具体内容如下 java代码: import java.io.File; import and...
    99+
    2022-06-06
    Android
  • jquery怎么将信息遍历到界面上
    本篇内容主要讲解“jquery怎么将信息遍历到界面上”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“jquery怎么将信息遍历到界面上”吧!示例代码:<script> &nb...
    99+
    2023-06-17
  • node.js如何遍历对象所有节点
    今天小编给大家分享一下node.js如何遍历对象所有节点的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。实例代码var&nbs...
    99+
    2023-07-04
  • java如何遍历m取n的所有组合
    这篇文章将为大家详细讲解有关java如何遍历m取n的所有组合,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 示例:  * 求m取n的所有组合。  ...
    99+
    2023-06-03
  • Python遍历目录中的所有文件的方法
    os.walk生成器 os.walk(PATH), PATH是个文件夹路径,当然可以用.或者../这样啦. 返回的是个三元元组为元素的列表, 每个元素代表了一个文件夹下的内容.第一个就是当前文件夹下内容. ...
    99+
    2022-06-04
    遍历 文件 方法
  • node.js中如何遍历对象所有节点
    今天小编给大家分享一下node.js中如何遍历对象所有节点的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。代码如下:var&n...
    99+
    2023-06-17
  • 用java遍历本地目录所有文件
    使用 Java 遍历本地目录中的所有文件,您可以使用 java.io.File 类。 首先,您需要创建一个 File 对象,并指定要遍历的目录的路径。然后,您可以使用 listFiles() 方法获取该目录中的所有文件。您可以使用 is...
    99+
    2023-09-29
    java jvm 开发语言
  • python怎么遍历文件夹所有文件
    可以使用os模块来遍历文件夹中的所有文件。以下是一个示例代码:```pythonimport os# 遍历文件夹def traver...
    99+
    2023-08-12
    python
  • Redis遍历所有key的两个命令(KEYS 和 SCAN)
    当我们需要遍历Redis所有key或者指定模式的key时,首先想到的是KEYS命令: KEYS pattern 官网对于KEYS命令有一个提示:  KEYS 的速度非...
    99+
    2024-04-02
  • python如何遍历字典中所有的键值对
    这篇文章将为大家详细讲解有关python如何遍历字典中所有的键值对,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。遍历字典中所有的键-值对使用for循环和item()方法遍历字典中的所有键值对,如下例所示:...
    99+
    2023-06-17
  • linux怎么遍历目录下所有的文件夹
    在Linux中,可以使用以下命令来遍历目录下所有的文件夹: 使用find命令: find /path/to/directory ...
    99+
    2023-10-21
    linux
  • Python遍历文件夹下所有文件的方法
    在这里跟大家分享一个Python编程过程中的知识点——遍历文件夹下所有文件! 在python中,遍历文件夹及其子文件夹中的所有文件有两种方法。 两者均返回文件名列表(可以选择文件名列表或者是包含完整路径的文件名列表)。 一种是使用...
    99+
    2023-01-31
    遍历 文件夹 文件
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作