通过hierarchyview探寻flowlayout

前言在开发过程中遇到了一个很熟悉的控件,但是我不知道它叫啥名字,并且也不知道该用什么样的语言去描述它。然而,我却在很多的应用中看到了它的身影,QQ音乐,YouTube等,如下图所示:为了一探究竟,我猜想它属于RecyclerView,是RecyclerView的一种定制化。通过勾选开发者选项中的显示

前言

在开发过程中遇到了一个很熟悉的控件,但是我不知道它叫啥名字,并且也不知道该用什么样的语言去描述它。然而,我却在很多的应用中看到了它的身影,QQ音乐,YouTube等,如下图所示:

标签样式的控件

为了一探究竟,我猜想它属于RecyclerView,是RecyclerView的一种定制化。通过勾选开发者选项中的显示布局边界,得到QQ音乐的截图如下:

勾选显示布局边界之后的QQ音乐

看起来也挺像是一个高度定制了之后的RecyclerView,然后去搜索各种关于定制RecyclerView的博客,虽然没有得到很准确的答案,但是我收获到的东西有如下两件:

  • RecyclerView可以通过设置LinearLayoutManager.setOritention()方法,来实现横向滑动,这种样式在很多其它的应用中也有发现。
  • 对于一个应用,如果不知道它使用的是什么控件,可以通过Hierarchy View来进行查看。

关于Hierarchy View的使用

曲折

Hierarchy View一般在Android Studio的Tools->Android->Android Device Monitor中,打开后,选择添加,然后再选择Hierarchy View即可。 一开始拿着自己的小米手机,连上电脑,结果发现没有任何东西。网上查询了之后才知道,为了安全考虑,不是所有的Android手机都允许连接上Hierarchy View,一般是模拟器和开发版本的手机可以。当然也有使用真机连接Hierarchy View的教程,但是得不偿失,还是选择使用模拟器吧~ 使用模拟器还有一个问题,如果安装QQ音乐这种类型的应用,会安装失败,而且返回一条错误提示:

The APK failed to install.
Error: INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113

借用StackOverflow上面一个得票最高的一个回答:

INSTALL_FAILED_NO_MATCHING_ABIS is when you are trying to install an app that has native libraries and it doesn't have a native library for your cpu architecture. For example if you compiled an app for armv7 and are trying to install it on an emulator that uses the Intel architecture instead it will not work.

Android手机的处理器架构一般是ARM,模拟器的大多数推荐使用的架构的是X86,因为支持X86的模拟器在X86处理器的PC上运行更快。虽然网上还是有在X86模拟器上面安装并运行此类应用的办法,但是我觉得那是属于玩机类型的事物,玩玩可以,实用可能还差一点。所以接下来就下载一个ARM架构的模拟器,在它上面装QQ音乐就?了。 但是,Android自带的模拟器运行速度实在是太慢了,结果出不来啊。不得不换成BlueStacks,最可笑的事情来了,在BlueStacks中,找了半天没找到开发者选项,心想完了,网上百度也没个说法,结果我随手点了一下运行,结果APK在BlueStacks中跑起来了!!!所以,BlueStacks默认就是开启了开发者选项的啊!!不需要找到那个开发者选项,然后把它打开。不需要这样啊!各位别再百度了

结果

在模拟器中打开到QQ音乐搜索的那个界面,然后再使用Hierarchy View来打开应用,黑黑的界面突然变亮了!这就是当前应用的当前所在界面的控件结构图,上面有每一个控件的名称。抱着试一试的心态,终于找到了一个控件,叫做FlowLayout,双击它之后,便打开了一张图片,上面显示的内容正是我所探寻是何控件构成的那个界面!如图:

原形毕露

为了这个FlowLayout,真是一路坎坷,但是在路上就是最好的!

Read more

Volcano 与 Kubernetes GPU 调度学习笔记

本笔记系统整理 Volcano 调度器、Kubernetes 调度框架、GPU Device Plugin、HAMi 等云原生 AI 调度领域的核心知识,适合用于学习、复习和工程实践参考。 目录 * 第一部分:Volcano 入门 * 1. Volcano 是什么 * 2. 安装与快速使用 * 3. 核心特性一览 * 第二部分:Volcano 整体架构 * 4. Volcano 解决的核心问题 * 5. 整体架构与数据流 * 6. 三层抽象模型 * 第三部分:Volcano 核心实现原理 * 7. Session 机制 * 8. Gang Scheduling 实现 * 9. Queue 与 DRF 公平调度

容器镜像(4):镜像的常用工具箱

容器镜像(4):镜像的常用工具箱

前几篇在讲多架构镜像时已经用过 skopeo 和 crane 做镜像复制,这篇系统整理这两个工具的完整能力,同时介绍几个日常操作镜像时同样好用的工具。 一、skopeo:不依赖 Daemon 的镜像瑞士军刀 skopeo 的核心价值是绕过 Docker daemon,直接与 Registry API 交互。上一篇用它做镜像复制和离线传输,但它的能力远不止于此。 1.1 安装 # Ubuntu / Debian sudo apt install -y skopeo skopeo --version # skopeo version 1.15.1 1.2 inspect:免拉取检查镜像元数据 docker inspect 需要先把镜像拉到本地,skopeo inspect 直接向 Registry

容器镜像(3):多架构镜像构建

容器镜像(3):多架构镜像构建

一、什么是多架构镜像 1.1 OCI Image Index 上一篇介绍了单平台镜像的结构:一个 Manifest 指向 Config 和若干 Layer blob。多架构镜像在此之上多了一层——OCI Image Index(也叫 Manifest List),是一个轻量的索引文件,把多个单平台 Manifest 组织在一起: $ docker manifest inspect golang:1.22-alpine { "schemaVersion": 2, "mediaType": "application/vnd.oci.image.index.v1+json", "manifests&

容器镜像(2):containerd 视角下的镜像

容器镜像(2):containerd 视角下的镜像

一、为什么需要了解 containerd 如果你只用 docker run 跑容器,从来不关心底层,那可以不了解 containerd。但如果你在用 Kubernetes,或者想真正理解"容器运行时"是什么,containerd 是绕不开的。 事实上,当你执行 docker run 的时候,containerd 早就在后台悄悄工作了——Docker 从 1.11 版本开始,就把核心运行时剥离出来交给 containerd 负责。 1.1 Docker 的架构演变 早期的 Docker(1.10 及之前)是一个"大一统"的单体程序:一个 dockerd