android - 在设备上打印 View 层次结构

标签 android android-layout

在三星手机上调试我的应用程序时出现奇怪的结果,我没有物理访问权限。我想请用户运行一个经过检测的应用程序来帮助调试。我的应用程序获得一个 view,其中有一个未知的(对我来说 ;-) 层次结构(ViewGroups 等)。有没有一种方法可以“遍历”View 并打印出字符串/ddms View 中的所有组件(等等 ViewGroups 等)?

这类似于 HierarchyViewer 工具 - 如果我对设备具有 adb 级别的访问权限。

更新:我想我可以使用这个方法

void dumpViewHierarchyWithProperties(Context context, ViewGroup group, BufferedWriter out, int level)

来自 ViewDebug.java Android 操作系统源...

谁有更好的主意?

谢谢!

最佳答案

这是我刚刚为此目的制作的效用函数:

public static void printViewHierarchy(ViewGroup vg, String prefix) {
    for (int i = 0; i < vg.getChildCount(); i++) {
        View v = vg.getChildAt(i);
        String desc = prefix + " | " + "[" + i + "/" + (vg.getChildCount()-1) + "] "+ v.getClass().getSimpleName() + " " + v.getId();
        Log.v("x", desc);

        if (v instanceof ViewGroup) {
            printViewHierarchy((ViewGroup)v, desc);
        }
    }
}

关于android - 在设备上打印 View 层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6559520/

相关文章:

android - 如何使用 ConstraintLayout Flow 对齐元素

android - 更改 Android 底部导航栏中所选项目后面区域的背景颜色

android - 警报消息未显示在警报对话框中?

java - OnKeyListener.onKey 未被调用

android - 如何通过 navArgs 将参数传递给详细 ViewModel

Android Kotlin 检测测试是否在调用 finish() 开始另一个 Activity 后结束/完成一个 Activity

java - 使用 sqlite 更新数据库时没有错误,但没有更新(android 应用程序)

java - 数字格式异常 : Invalid int: "1"

java - 多个充气机上的 ViewHolder

android - ConstraintLayout 通知徽章