🎨 微信Hook UI组件说明文档


本文档详细介绍了项目中所有自定义UI组件的作用、功能和使用方法。

📋 目录


🔧 核心组件

CustomLayoutInflater

路径: com.xiaojieyahu.myapplication.hook.ui.CustomLayoutInflater

作用: 自定义XML布局解析器,负责将XML布局文件解析为Android视图

  • 支持解析标准Android组件(LinearLayout、RelativeLayout、TextView等)
  • 支持解析自定义组件(UI、AvatarView、Image等)
  • 自动处理布局参数和属性设置
  • 支持相对定位和margin属性

核心功能:

  • XML到View的转换
  • 属性解析和应用
  • 布局参数自动适配
  • 错误处理和日志记录

🎨 UI容器组件

UI

路径: com.xiaojieyahu.myapplication.hook.ui.UI

作用: 自定义容器组件,主要用于实现圆角效果

  • 通过 android:tag 属性设置圆角参数
  • 格式:左上{数值}右上{数值}左下{数值}右下{数值}
  • 自动应用圆角背景drawable

使用场景:

  • 卡片式布局
  • 圆角容器
  • 背景装饰

示例:

<com.xiaojieyahu.myapplication.hook.ui.UI
    android:tag="左上15右上15左下15右下15"
    android:background="#FFFFFFFF"
    android:layout_width="320dp"
    android:layout_height="wrap_content">
    <!-- 子视图 -->
</com.xiaojieyahu.myapplication.hook.ui.UI>

📝 文本组件

WeChatNameTextView

路径: com.xiaojieyahu.myapplication.hook.ui.WeChatNameTextView

作用: 显示微信用户信息的文本组件

  • 通过 android:tag 属性指定显示类型
  • 自动获取并显示对应的用户信息

支持的显示类型:

  • nick_name: 用户昵称
  • alias: 用户别名/备注
  • email: 邮箱地址
  • mobile: 手机号码
  • username: 微信号

示例:

<com.xiaojieyahu.myapplication.hook.ui.WeChatNameTextView
    android:textSize="18sp"
    android:textColor="#FF2C3E50"
    android:tag="nick_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

HitokotoTextView

路径: com.xiaojieyahu.myapplication.hook.ui.HitokotoTextView
别名: com.xiaojieyahu.myapplication.hook.ui.text

作用: 显示随机一言的文本组件

  • 自动获取网络上的随机名言
  • 支持多种一言API
  • 自动刷新和缓存

示例:

<com.xiaojieyahu.myapplication.hook.ui.text
    android:textSize="12sp"
    android:textColor="#FF95A5A6"
    android:tag="随机一言"
    android:layout_width="180dp"
    android:layout_height="wrap_content" />

🖼️ 图片组件

Image

路径: com.xiaojieyahu.myapplication.hook.ui.Image

作用: 自定义图片视图组件

  • 从指定目录加载图片文件
  • 支持多种缩放模式
  • 自动处理图片缓存和优化

图片目录: /data/user/0/com.tencent.mm/files/hook_dialog_config/img/

支持的ScaleType:

  • center: 居中显示
  • centerCrop: 居中裁剪(充满容器)
  • centerInside: 居中适应
  • fitCenter: 适应中心
  • fitXY: 拉伸充满

示例:

<com.xiaojieyahu.myapplication.hook.ui.Image
    android:tag="banck.png"
    android:scaleType="centerCrop"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

AvatarView

路径: com.xiaojieyahu.myapplication.hook.ui.AvatarView

作用: 微信头像显示组件

  • 自动获取用户最新头像
  • 支持头像缓存和更新
  • 圆形头像显示效果

示例:

<com.xiaojieyahu.myapplication.hook.AvatarView
    android:layout_width="80dp"
    android:layout_height="80dp" />

🔘 交互组件

WeChatNavigationButton

路径: com.xiaojieyahu.myapplication.hook.ui.WeChatNavigationButton
别名: com.xiaojieyahu.myapplication.hook.ui.SettingActivity

作用: 功能导航按钮组件

  • 通过 android:tag 属性设置功能类型
  • 自动处理点击事件和页面跳转
  • 支持多种微信功能页面

支持的功能类型:

  • 设置: 微信设置页面
  • 服务: 服务页面
  • 收藏: 收藏页面
  • 朋友圈: 朋友圈页面
  • 视频号: 视频号页面
  • 表情: 表情管理页面

示例:

<com.xiaojieyahu.myapplication.hook.ui.SettingActivity
    android:tag="设置"
    android:textColor="#FFFFFFFF"
    android:textSize="14sp"
    android:background="#FF3498DB"
    android:layout_width="100dp"
    android:layout_height="40dp" />

🔧 管理器组件

ImageManager

路径: com.xiaojieyahu.myapplication.hook.manager.ImageManager

作用: 图片资源管理器

  • 管理图片文件的加载和缓存
  • 检查图片文件是否存在
  • 提供图片文件列表功能

WeChatAvatarManager

路径: com.xiaojieyahu.myapplication.hook.manager.WeChatAvatarManager

作用: 微信头像管理器

  • 获取用户头像信息
  • 处理头像缓存和更新
  • 头像格式转换和优化

WeChatNameManager

路径: com.xiaojieyahu.myapplication.hook.manager.WeChatNameManager

作用: 微信用户信息管理器

  • 获取用户各种信息(昵称、微信号等)
  • 信息缓存和同步
  • 数据格式化和处理

⚙️ 配置组件

DialogConfigManager

路径: com.xiaojieyahu.myapplication.hook.config.DialogConfigManager

作用: 对话框配置管理器

  • 管理XML配置文件的加载
  • 处理配置文件的解析和应用
  • 提供配置更新和刷新功能

配置文件路径: /data/user/0/com.tencent.mm/files/hook_dialog_config/dialog_config.xml


📱 使用示例

完整的UI布局示例

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:background="#FFF5F7FA"
    android:padding="40dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- 用户信息卡片 -->
    <com.xiaojieyahu.myapplication.hook.ui.UI
        android:tag="左上15右上15左下15右下15"
        android:background="#FFFFFFFF"
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:padding="20dp">
        
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            
            <!-- 头像 -->
            <com.xiaojieyahu.myapplication.hook.ui.AvatarView
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:layout_margin="10dp" />
            
            <!-- 用户信息 -->
            <LinearLayout
                android:orientation="vertical"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="15dp">
                
                <com.xiaojieyahu.myapplication.hook.ui.WeChatNameTextView
                    android:tag="nick_name"
                    android:textSize="18sp"
                    android:textColor="#FF2C3E50"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />
                
                <com.xiaojieyahu.myapplication.hook.ui.text
                    android:tag="随机一言"
                    android:textSize="12sp"
                    android:textColor="#FF95A5A6"
                    android:layout_width="180dp"
                    android:layout_height="wrap_content" />
                    
            </LinearLayout>
        </LinearLayout>
    </com.xiaojieyahu.myapplication.hook.ui.UI>

    <!-- 功能按钮卡片 -->
    <com.xiaojieyahu.myapplication.hook.ui.UI
        android:tag="左上15右上15左下15右下15"
        android:background="#FFFFFFFF"
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:padding="20dp">
        
        <com.xiaojieyahu.myapplication.hook.ui.SettingActivity
            android:tag="设置"
            android:background="#FF3498DB"
            android:textColor="#FFFFFFFF"
            android:textSize="14sp"
            android:layout_width="280dp"
            android:layout_height="40dp"
            android:layout_margin="8dp" />
            
    </com.xiaojieyahu.myapplication.hook.ui.UI>

</LinearLayout>

🎯 最佳实践

1. 圆角设计

  • 使用 UI 组件包装需要圆角的元素
  • 统一使用相同的圆角值保持一致性
  • 推荐值:左上15右上15左下15右下15

2. 颜色搭配

  • 背景色:#FFF5F7FA (淡蓝灰)
  • 卡片背景:#FFFFFFFF (白色)
  • 主要文字:#FF2C3E50 (深灰)
  • 次要文字:#FF7F8C8D (中灰)

3. 尺寸规范

  • 卡片宽度:320dp
  • 按钮高度:40dp
  • 头像尺寸:80x80dp
  • 间距:15-20dp

4. 组件命名

  • 使用完整的包名路径
  • 保持命名的一致性
  • 注意别名的使用

🚀 扩展开发

如需添加新的自定义组件:

  1. 在对应的包下创建新的类
  2. CustomLayoutInflater 中添加解析支持
  3. 更新 isMatchingTagNamegetViewTagName 方法
  4. 编写对应的属性解析逻辑
  5. 更新本文档

文档版本:1.0
最后更新:2025年1月

最后修改:2025 年 07 月 18 日
如果觉得我的文章对你有用,请随意赞赏