LoadingLayout扩展开发:如何自定义布局和添加新状态类型
LoadingLayout扩展开发如何自定义布局和添加新状态类型【免费下载链接】loadinglayout简单实用的页面多状态布局(content,loading,empty,error)项目地址: https://gitcode.com/gh_mirrors/lo/loadinglayoutLoadingLayout是一款简单实用的Android页面多状态布局库支持content内容、loading加载中、empty空数据和error错误四种基础状态能够帮助开发者轻松实现页面状态的切换与管理。本文将详细介绍如何扩展LoadingLayout实现自定义布局样式和添加新的状态类型让你的应用界面更加灵活和个性化。认识LoadingLayout的基本结构在开始扩展之前我们先来了解一下LoadingLayout的核心组成部分。从项目结构中可以看到主要的实现代码位于library/src/main/java/ezy/ui/layout/LoadingLayout.java文件中。这个类继承自FrameLayout通过包装Activity、Fragment或View来实现多状态管理。LoadingLayout默认提供了四种状态布局它们的定义文件分别位于加载中布局library/src/main/res/layout/_loading_layout_loading.xml空数据布局library/src/main/res/layout/_loading_layout_empty.xml错误布局library/src/main/res/layout/_loading_layout_error.xml这些布局文件定义了各状态的默认样式包括图片、文字和按钮等元素。自定义布局样式的简单方法如果你只是想修改现有状态的样式比如更改空数据提示文字或错误图片LoadingLayout提供了便捷的方法来实现。修改状态显示内容在LoadingLayout.java中我们可以看到一系列用于设置状态内容的方法public LoadingLayout setEmptyImage(DrawableRes int resId) { ... } public LoadingLayout setEmptyText(String value) { ... } public LoadingLayout setErrorImage(DrawableRes int resId) { ... } public LoadingLayout setErrorText(String value) { ... } public LoadingLayout setRetryText(String text) { ... }这些方法允许你在代码中动态修改各状态的图片和文字。例如要修改空数据状态的提示文字可以这样做vLoading.setEmptyText(暂无数据快去添加吧);使用自定义属性LoadingLayout还支持通过XML属性来自定义样式。在library/src/main/res/values/values-loading-layout.xml文件中定义了一系列可配置的属性如llEmptyImage、llEmptyText、llErrorImage等。你可以在布局文件中直接使用这些属性例如ezy.ui.layout.LoadingLayout android:idid/loading android:layout_widthmatch_parent android:layout_heightmatch_parent app:llEmptyImagedrawable/empty app:llEmptyText暂无数据 app:llErrorImagedrawable/error app:llErrorText加载失败 app:llRetryText点击重试 !-- 内容布局 -- TextView android:layout_widthmatch_parent android:layout_heightmatch_parent android:text这是内容区域/ /ezy.ui.layout.LoadingLayout完全自定义状态布局如果简单的样式修改不能满足需求你可以通过设置自定义布局文件来完全替换某个状态的显示效果。使用set方法设置自定义布局LoadingLayout提供了setLoading、setEmpty和setError方法允许你传入自定义的布局资源ID// 设置自定义加载中布局 vLoading.setLoading(R.layout.my_loading_layout); // 设置自定义空数据布局 vLoading.setEmpty(R.layout.my_empty_layout); // 设置自定义错误布局 vLoading.setError(R.layout.my_error_layout);监听布局加载事件如果你需要在布局加载后对其中的视图进行进一步的操作可以使用setOnEmptyInflateListener和setOnErrorInflateListener方法vLoading.setOnEmptyInflateListener(new LoadingLayout.OnInflateListener() { Override public void onInflated(View view) { // 在这里可以获取空数据布局中的视图并进行设置 ImageView imageView view.findViewById(R.id.empty_image); TextView textView view.findViewById(R.id.empty_text); // ... } });添加新的状态类型虽然LoadingLayout默认只提供了四种状态但通过扩展我们可以添加新的状态类型如网络异常、数据过期等。扩展LoadingLayout类首先我们需要创建一个新的类继承自LoadingLayout然后添加新的状态常量和相关方法public class ExtendedLoadingLayout extends LoadingLayout { public static final int STATE_NETWORK_ERROR 4; // 新的网络错误状态 private View mNetworkErrorView; public ExtendedLoadingLayout(Context context) { super(context); } // 其他构造方法... public void setNetworkError(LayoutRes int id) { mNetworkErrorView inflate(id); addView(mNetworkErrorView); mNetworkErrorView.setVisibility(GONE); } public void showNetworkError() { showOnly(mNetworkErrorView); } // 其他辅助方法... }添加自定义属性为了让新状态支持XML属性配置我们需要在values-loading-layout.xml中添加新的属性定义declare-styleable nameLoadingLayout !-- 已有的属性... -- attr namellNetworkErrorResId formatreference / attr namellNetworkErrorImage formatreference / attr namellNetworkErrorText formatstring / /declare-styleable在布局中使用新状态完成上述扩展后就可以在布局文件中使用新的状态了com.yourpackage.ExtendedLoadingLayout android:idid/loading android:layout_widthmatch_parent android:layout_heightmatch_parent app:llNetworkErrorResIdlayout/my_network_error_layout !-- 内容布局 -- /com.yourpackage.ExtendedLoadingLayout在代码中切换到新状态ExtendedLoadingLayout vLoading findViewById(R.id.loading); vLoading.showNetworkError();实际应用示例下面我们通过一个简单的示例来展示如何使用LoadingLayout的自定义功能。自定义空数据布局首先创建一个自定义的空数据布局文件my_empty_layout.xmlLinearLayout xmlns:androidhttp://schemas.android.com/apk/res/android android:layout_widthmatch_parent android:layout_heightmatch_parent android:gravitycenter android:orientationvertical ImageView android:layout_width120dp android:layout_height120dp android:srcmipmap/xxxhdpi/empty / TextView android:layout_widthwrap_content android:layout_heightwrap_content android:layout_marginTop16dp android:text暂无数据 android:textColor#ff666666 android:textSize18sp / Button android:idid/btn_add android:layout_widthwrap_content android:layout_heightwrap_content android:layout_marginTop24dp android:text添加数据 android:textColor#ffffff android:backgrounddrawable/_loading_layout_button / /LinearLayout然后在代码中应用这个布局vLoading.setEmpty(R.layout.my_empty_layout); vLoading.setOnEmptyInflateListener(new LoadingLayout.OnInflateListener() { Override public void onInflated(View view) { view.findViewById(R.id.btn_add).setOnClickListener(new View.OnClickListener() { Override public void onClick(View v) { // 处理添加数据的逻辑 addNewData(); } }); } });效果展示下面是使用自定义布局前后的效果对比这个示例展示了空数据状态的自定义效果图片使用了项目中的app/src/main/res/mipmap-xxxhdpi/empty.png资源显示暂无数据的提示文字。总结通过本文的介绍我们了解了如何扩展LoadingLayout来实现自定义布局和添加新状态类型。无论是简单的样式修改还是复杂的状态扩展LoadingLayout都提供了灵活的接口来满足各种需求。要开始使用LoadingLayout你可以通过以下命令克隆项目git clone https://gitcode.com/gh_mirrors/lo/loadinglayout希望本文能够帮助你更好地使用和扩展LoadingLayout为你的应用创建更加丰富和友好的用户界面【免费下载链接】loadinglayout简单实用的页面多状态布局(content,loading,empty,error)项目地址: https://gitcode.com/gh_mirrors/lo/loadinglayout创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

直流有刷电机双闭环控制原理与Simulink仿真实践

直流有刷电机双闭环控制原理与Simulink仿真实践

1. 直流有刷电机双闭环控制的核心原理直流有刷电机作为最早实现电能与机械能转换的装置,至今仍在工业自动化、机器人、电动工具等领域广泛应用。其双闭环控制架构通过内外环协同工作,能同时实现转速和电流的精确调节。这种控制方式相比单闭环系统具有更强…

2026/7/4 6:13:29阅读更多 →
VisualActivityViewController:让iOS分享体验更直观的终极解决方案

VisualActivityViewController:让iOS分享体验更直观的终极解决方案

VisualActivityViewController:让iOS分享体验更直观的终极解决方案 【免费下载链接】VisualActivityViewController A way to represent what you’re sharing. 项目地址: https://gitcode.com/gh_mirrors/vi/VisualActivityViewController 想要为你的iOS应用…

2026/7/4 6:13:29阅读更多 →
如何使用Video2X将低清视频无损放大到4K画质:终极AI视频增强指南

如何使用Video2X将低清视频无损放大到4K画质:终极AI视频增强指南

如何使用Video2X将低清视频无损放大到4K画质:终极AI视频增强指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trendin…

2026/7/4 6:13:29阅读更多 →
details-dialog-element性能优化:减少重绘和提升用户体验的7个技巧

details-dialog-element性能优化:减少重绘和提升用户体验的7个技巧

details-dialog-element性能优化:减少重绘和提升用户体验的7个技巧 【免费下载链接】details-dialog-element A modal dialog thats opened with . 项目地址: https://gitcode.com/gh_mirrors/de/details-dialog-element details-dialog-element是一个基于原生…

2026/7/4 7:18:38阅读更多 →
CANN/hcomm通信协议类型定义

CANN/hcomm通信协议类型定义

CommProtocol 【免费下载链接】hcomm HCOMM(Huawei Communication)是HCCL的通信基础库,提供通信域以及通信资源的管理能力。 项目地址: https://gitcode.com/cann/hcomm 功能说明 定义通信协议类型枚举。 定义原型 typedef enum {C…

2026/7/4 7:18:38阅读更多 →
VS Code 1.26 发布:新增安全模式,多维度功能升级助力开发者

VS Code 1.26 发布:新增安全模式,多维度功能升级助力开发者

VS Code 1.26:安全与功能双升级微软 Visual Studio Code(VS Code)编辑器 1.26 版本于 6 月 24 日发布,亮点颇多。新推出针对不可信代码的安全模式,即工作区信任(Workspace Trust),用…

2026/7/4 7:18:38阅读更多 →
Instatic权限报告:用户访问与操作审计分析

Instatic权限报告:用户访问与操作审计分析

Instatic权限报告:用户访问与操作审计分析 【免费下载链接】Instatic Instatic is a modern self-hosted visual CMS - get it running in 1 minute 项目地址: https://gitcode.com/GitHub_Trending/in/Instatic Instatic作为一款现代自托管视觉CMS&#xff…

2026/7/4 7:18:38阅读更多 →
CANN/cannbot-skills:网络用例映射

CANN/cannbot-skills:网络用例映射

Step 5b:映射网络用例 → S5_mapped_cases_network.json 【免费下载链接】cannbot-skills CANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。 项目地址: https://gitcode.com/cann/cannbot-skills 前…

2026/7/4 7:18:38阅读更多 →
Warcraft Helper终极指南:4步让魔兽争霸3在现代Windows系统上流畅运行 [特殊字符]

Warcraft Helper终极指南:4步让魔兽争霸3在现代Windows系统上流畅运行 [特殊字符]

Warcraft Helper终极指南:4步让魔兽争霸3在现代Windows系统上流畅运行 🎮 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在…

2026/7/4 7:13:38阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/3 14:18:39阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/3 14:38:35阅读更多 →
端到端自动驾驶:从GTC‘26看工程可信落地的核心逻辑

端到端自动驾驶:从GTC‘26看工程可信落地的核心逻辑

1. 项目概述:当算法工程师走进GTC26展厅,看到的不是芯片,而是“端到端”的呼吸节奏“端到端”这三个字,在GTC’26现场出现的频率,高得像NVLink带宽测试时的峰值曲线——它不再是一个论文里的技术路径选项,而…

2026/7/4 0:02:48阅读更多 →
缺牙修复科普:常见义齿类型与选择参考

缺牙修复科普:常见义齿类型与选择参考

缺牙修复科普:常见义齿类型与选择参考牙齿缺失是中老年人群中较为常见的口腔问题,不仅会造成咀嚼不便、进食受影响,长期还可能对营养摄入与日常社交带来困扰。义齿是改善缺牙问题的常用方式,目前市面上的义齿种类较多,…

2026/7/4 0:02:48阅读更多 →
STM32F091RC与LTC6904实现高精度方波信号生成

STM32F091RC与LTC6904实现高精度方波信号生成

1. 项目概述:LTC6904与STM32F091RC的精准方波生成方案在嵌入式系统开发中,精确的时钟信号和定时控制往往是项目成败的关键。LTC6904作为一款低功耗、高精度的可编程振荡器芯片,与STM32F091RC这款ARM Cortex-M0内核微控制器的组合,…

2026/7/4 0:02:48阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/4 1:16:56阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/4 2:33:55阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/4 2:33:55阅读更多 →