推荐使用LoadingLayout:简化Android页面状态管理

推荐使用LoadingLayout:简化Android页面状态管理

loadinglayout简单实用的页面多状态布局(content,loading,empty,error) 项目地址:https://gitcode.com/gh_mirrors/lo/loadinglayout

项目介绍

在移动应用开发中,页面状态管理是一个常见但又繁琐的任务。无论是加载中、空数据、错误还是内容展示,都需要开发者精心设计和管理。为了简化这一过程,LoadingLayout应运而生。这是一个简单实用的开源项目,旨在帮助开发者轻松管理页面的多种状态,包括内容、加载中、空数据和错误状态。

项目技术分析

LoadingLayout通过提供一个灵活的布局容器,允许开发者根据需要切换不同的页面状态。项目支持通过XML布局文件直接定义状态布局,也支持在Java代码中动态设置和切换状态。此外,LoadingLayout还提供了丰富的自定义选项,包括图片、文本、颜色和尺寸等,以满足不同设计需求。

项目及技术应用场景

LoadingLayout适用于所有需要管理页面状态的Android应用场景。无论是电商应用、新闻阅读器还是社交平台,都可以利用LoadingLayout来提升用户体验。例如,在加载数据时显示加载动画,数据为空时显示提示信息,网络错误时显示错误页面并提供重试按钮。

项目特点

  1. 简单易用:通过简单的API调用即可切换不同的页面状态,无需复杂的逻辑处理。
  2. 高度自定义:支持通过XML和Java代码自定义各种状态的布局和样式。
  3. 灵活性强:既可以在布局文件中直接使用,也可以在代码中动态包裹和替换内容元素。
  4. 开源免费:基于Apache 2.0许可证,开发者可以自由使用和修改。

使用指南

Gradle依赖

首先,在项目的build.gradle文件中添加JitPack仓库:

repositories { 
    maven { url "https://jitpack.io" }
} 

然后在模块的build.gradle文件中添加依赖:

dependencies {
    implementation 'com.github.czy1121:loadinglayout:1.0.1'
}

在主题中设置默认样式

styles.xml中定义LoadingLayout的默认样式:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    ...
    <item name="styleLoadingLayout">@style/LoadingLayoutStyle</item>
</style>

<style name="LoadingLayoutStyle" parent="LoadingLayout.Style">
    <item name="llEmptyImage">@mipmap/empty</item>
    <item name="llErrorImage">@mipmap/error</item>
    ...
</style>

在布局中使用

在XML布局文件中直接使用LoadingLayout

<ezy.ui.layout.LoadingLayout
    android:id="@+id/loading"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="This is Content"/>
        
</ezy.ui.layout.LoadingLayout>

包裹并替换内容元素

在Java代码中动态包裹和替换内容元素:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    // ...
    
    vLoading = LoadingLayout.wrap(this); 
    vLoading.showContent(); 
    
    // ...
}

API调用

通过API调用切换不同的页面状态:

// 显示 content/loading/empty/error 布局
showContent()
showLoading()
showEmpty()
showError()

// 设置 loading/empty/error 布局
setLoading(int resId)
setEmpty(int resId)
setError(int resId)

// 设置空布局的图片与文本
setEmptyImage(int resId)
setEmptyText(String value)

// 设置错误布局的图片与文本,
setErrorImage(int resId)
setErrorText(String value) 

// 设置重试按钮文本
setRetryText(String value)

// 设置重试按钮的监听回调
setRetryListener(OnClickListener listener)

结语

LoadingLayout是一个强大且易用的开源项目,能够帮助Android开发者简化页面状态管理,提升应用的用户体验。无论你是个人开发者还是团队成员,LoadingLayout都值得一试。快来体验一下吧!

loadinglayout简单实用的页面多状态布局(content,loading,empty,error) 项目地址:https://gitcode.com/gh_mirrors/lo/loadinglayout

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

前言项目里都会遇到几种页面,分别为加载中、无网络、无数据、出错四种情况,经常要使用,所以封成库引用了,方便使用,顺便分享出来。先看一下效果: 原理比较简单,继承FrameLayout,在xml渲染完成后,加上加载中、无网络、无数据、出错四个页面,根据需要控制显示哪一层,花了些时间,开了很多方法出来,支持很多属性的设置,算是比较实用,源码里已对各个方法的作用都加了注释,就不做过多解释了,项目GitHub地址:https://github.com/weavey/LoadingLayoutDemo,感兴趣的可以看看,欢迎指出问题。使用方式gradle引用:compile 'com.lai.weavey:loadinglayout:1.2'使用说明LoadingLayout支持全局配置,对所有使用到的地方都起效,需要在Application中配置,如下: public class App extends Application {     @Override     public void onCreate() {         super.onCreate();         LoadingLayout.getConfig()                 .setErrorText("出错啦~请稍后重试!")                 .setEmptyText("抱歉,暂无数据")                 .setNoNetworkText("无网络连接,请检查您的网络···")                 .setErrorImage(R.mipmap.define_error)                 .setEmptyImage(R.mipmap.define_empty)                 .setNoNetworkImage(R.mipmap.define_nonetwork)                 .setAllTipTextColor(R.color.gray)                 .setAllTipTextSize(14)                 .setReloadButtonText("点我重试哦")                 .setReloadButtonTextSize(14)                 .setReloadButtonTextColor(R.color.gray)                 .setReloadButtonWidthAndHeight(150,40);     } }由于“加载中”的页面,可能每个App都不一样,因此,LoadingLayout支持自定义LoadingPage,如下: LoadingLayout.getConfig()      .setLoadingPageLayout(R.layout.define_loading_page);同时,为了适应个别界面的“特殊需求”,LoadingLayout也支持局部设置各种属性,仅对当前对象生效,不影响全局。如下:        LoadingLayout  loading = (LoadingLayout) findViewById(R.id.loading_layout);         loading.setLoadingPage(R.layout.define_loading_page)                 .setEmptyText("暂无报告数据")                 .setErrorText("")                 .setNoNetworkText("")                 .setErrorImage(R.mipmap.ic_launcher)                 .setErrorTextSize(16)                 .setReloadButtonText("点我重新加载哦"); //等等为ReloadButton设置监听:loadingLayout.setOnReloadListener(new LoadingLayout.OnReloadListener() {             @Override             public void onReload(View v) {             }         });设置显示的页面: loadingLayout.setStatus(LoadingLayout.Loading);//加载中  loadingLayout.setStatus(LoadingLayout.Empty);//无数据  loadingLayout.setStatus(LoadingLayout.Error);//错误  loadingLayout.setStatus(LoadingLayout.No_Network);//无网络  loadingLayout.setStatus(LoadingLayout.Success);//加载成功最后,在xml里面使用:<com.weavey.loading.lib.LoadingLayout     xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app="http://schemas.android.com/apk/res-auto"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:paddingBottom="@dimen/activity_vertical_margin"     android:paddingLeft="@dimen/activity_horizontal_margin"     android:paddingRight="@dimen/activity_horizontal_margin"     android:paddingTop="@dimen/activity_vertical_margin"     app:isFirstVisible="true">     <TextView         android:background="@color/colorPrimary"         android:visibility="visible"         android:gravity="center"         android:textColor="@android:color/white"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:text="ContentView"/> </com.weavey.loading.lib.LoadingLayout>注意: (1)isFirstVisible属性用来控制contentView一开始是否隐藏,由于LoadingLayout原理是在xml渲染完成后在contentView上铺上三层View,因此,一开始如果不隐藏,等contentView渲染完成后调用: loadingLayout.setStatus(LoadingLayout.Loading); 会造成界面闪烁的效果,影响体验,因此默认将contentView隐藏,所以数据加载完成后一定要调用loadingLayout.setStatus(LoadingLayout.Success);,将contentView显示出来。这样也能解决未获取到数据的情况下,被用户看到杂乱无章的布局,个人还是比较喜欢默认隐藏contentView; (2)为了方便管理LoadingLayout只能有一个直属子View,类似ScrollView,添加两个直属子View会抛出异常throw new IllegalStateException("LoadingLayout can host only one direct child");; (3)由于AS会直接将自定义View的特性反应在预览界面,所以在使用LoadingLayout的时候,会无法看到被LoadingLayout包裹住的布局(默认为gone),因此也可以将isFirstVisible属性暂时设为true,预览布局。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

农烁颖Land

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值