登录 注册
当前位置:主页 > 资源下载 > 10 > 一种简易的页面切换布

一种简易的页面切换布

  • 更新:2024-09-03 12:11:26
  • 大小:256KB
  • 推荐:★★★★★
  • 来源:网友上传分享
  • 类别:其它 - 开发技术
  • 格式:ZIP

资源介绍

作者Hankkin,源码PageLayoutDemo,一款简单的 page 切换 空布局、错误布局、加载布局,支持一键配置、定义,不需要 xml 编写该功能是支持单独为某个布局设置状态改变的,比如很多同学提到的我一个 listview 的数据没有获取到,fun initPage(targetView: Any),这个 targetView 你只需要设置成你的 listview 或者包裹你 listview 的 parent 布局就 OK 了,具体原理可以看下面的代码解析啊,遍历获取索引,然后记录索引值....项目中我们经常会用到的加载数据,加载完数据后显示内容,如果没有数据显示一个空白页,这是如果网络错误了显示一个网络错误页,自定义一个 PageLayout。绪论Android 中经常使用一个空白页和网络错误页用来提高用户体验,给用户一个较好的感官,如果获取到的数据为空,那么会显示一个空白数据页,如果在获取数据的过程中网络错误了,会显示一个网络异常页,像最近比较火的某东这样,见下图。网上也有一些开源的组件,大部分都是自定义继承某个布局在 xml 中让其作为跟布局,然后将自己的内容布局添加进去,效果也都不错,但是个人总觉得稍微有些麻烦,不是那么灵活,n 多个 xml 布局都去定义,写的心烦,所以有了今天的主角。 思考实现的思路实际上是和上面说的一样,只不过换了一种方式,我们手动获取到 contentView,将它从 DecorView 中移除,然后交给 PageLayout 取管理。当时考虑的时候就是不想在每个 xml 中去写页面切换的布局,那么我们可不可以用 Java 代码去控制?带着下面几个问题一起来看一下。1.自定义一个布局让其作为跟布局2.提供切换加载 loading、空白页 empty、错误页 errror、内容页 content功能3.怎么让其取管理上边的四个页面?4.contentView 怎么添加?5.如果我想切换的跟布局不是个 Activity 或者 Fragment 怎么办?6.因为切换页面状态的功能一般都是一个 APP 统一的,那么可不可以一键配置呢?实现1.代码设计首先我们定义 PageLayout 继承 FrameLayout 或者 LinearLayou 或者其他的布局都可以,然后我们需要提供切换四个布局的功能,当然如果支持自定义就更好了,还有状态布局里面的一些属性,还方便一键配置,所以最后采用了 Builder 模式来创建,使用方式就和 Android 里面的AlertDialog一样,通过 Builder 去构建一个 PageLayout。最后的样子是长这样的:方法注释showLoading()显示 loadingshowError()显示错误布局showEmpty()显示空布局hide()显示内容布局BuildersetLoading()setLoadingText()setError()setDefaultLoadingBlinkText()setEmpty()setLoadingTextColor()setDefaultEmptyText()setDefaultLoadingBlinkColor()setDefaultEmptyTextColor()setDefaultErrorText()setDefaultErrorTextColor()setEmptyDrawable()setErrorDrawable()默认样式PageLayout.Builder(this)                 .initPage(ll_default)                 .setOnRetryListener(object : PageLayout.OnRetryClickListener{                     override fun onRetry() {                         loadData()                     }                 })                 .create()自定义样式PageLayout.Builder(this)                 .initPage(ll_demo)                 .setLoading(R.layout.layout_loading_demo)                 .setEmpty(R.layout.layout_empty_demo,R.id.tv_page_empty_demo)                 .setError(R.layout.layout_error_demo,R.id