浅谈Android动态页面(一)

这是一个很微妙的东西,可能平时经常用到,但是没注意,我想对这个内容进行一个总结并提出一些看法,谈的是动态页面,不是动态布局。

一.什么是动态页面

什么是动态页面?我认为是一种在开发时的设计思想,最终展示的页面会随着数据的改变而改变,或者说会根据数据而展示页面。

我的观点是:
页面由数据去决定,我称它为动态页面(主要是我不知道专业术语叫什么)

比如我们经常使用的RecyclerView,我觉得它就是一个动态页面,因为它的展示会随数据的改变而改变,比如说RecyclerView要展示多少条数据,一个Item里面要展示成什么样子的。这些都是由数据去决定的。还有RecyclerView也体现出了动态页面的一个特性,复用性。不管在什么地方都能使用RecyclerView并且还能展示出来不同的效果,而展示出不同效果的原因是因为数据不同。

二.举个例子

img_23de50e1f8bed88ab526cdbab641b0cd.png
image.png

比如说,我们经常有这样的操作,我做一个学社区APP,你的首页会根据我是否登录而展示不同的状态,比如说我登录了,这个activity就展示更多内容,我没登录,这个activity就展示较少的内容。
有人会说,这样的需求我们经常做啊。是的,我们经常会有这样的需求,而有些大屌做多了,一拿到这样的需求就能很快的去完成,甚至每次搭页面的时候都会优先考虑动态。而很多新人,比如我这种,没有做多,没这样的概念,做起来会很容易出问题,所以我才想写一个总结以免以后再犯错,为什么大神不写,大神都不屑写这些东西。

再举个栗子。我开发一个多列项选择的模块,比如我们经常会看到这样的功能。

img_305b1e449ff72b6bc8cae13b2ff71040.png
image.png

左边一个列表,右边一个列表,如果你把布局写死,那它始终就是两列,而我可以把这样的需求用动态页面去实现,这样的话,我就能很轻易的实现3个列表,4个列表,甚至更多个列表。
先展示一下写的一个小demo吧。

img_f5b0c8895e4b554ac155d4d47f56a849.gif
15051384411381505138249369.gif

还有一张两列的gif坏掉了,没事,我就只展示多页的吧。我这里写了一个4页的demo
用法很简单

<com.example.kylinarm.multilisttest.MultiListView
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        app:count = "4"
        android:id="@+id/mv_content"
        >
    </com.example.kylinarm.multilisttest.MultiListView>

app:count 是最大展示多少列,默认为两页.

        mvContent.setAllWeight(1,1,1);
        mvContent.setLayoutManager();
        mvContent.setAdapter(mockResult(),this);

第一行是设置每一列的比例,第二行是初始化布局,第三行是设置数据。

这么简单的调用,就能实现一扩展性这么好的动态布局。但是我也总结出了一个规律,虽然调用简单,但是封装的内容很复杂,越是复杂的布局,使用的算法就越复杂。

三.动态布局总结

1.概念
首先希望要有这样的一个概念(讲给自己听),搭建一个模块时,优先考虑去实现动态,如果实在无法实现,再去写静态的。什么叫静态,比如我们(新手)经常做的,把布局写死,这样要你改布局的话你要怎么做,要么加上需要改动后的布局隐藏,但这样也只能适应两种情况啊,多加一种情况你又要改xml布局。要么写两套布局,那如果多加一种情况你又要多写一套布局。这样就每次改需求你都要去动布局。而像我上面写的demo,你要求展示多少列,我就改个数字就行,而且返回多少列的情况我都能适配。

2.写成动态的虽然比静态的更耗时间,但是代码量比静态的多不了多少,而且功能比静态的强大很多。

3.动态页面依赖于数据,页面会根据数据的改变而改变,还有需要适配,你可以把适配想成一种数据与页面对接的逻辑的封装,就像RecyclerView有适配器一样。

4.动态页面需要真正的涉及到数据结构和算法。页面的展示会根据返回数据的结构而定,展示的逻辑也需要相应的算法去实现。

5.总的一句话,动态的东西肯定比静态的牛X,所以不光是页面,很多地方,如果使用动态的思维去开发模块,一定会比静态的功能强大很多。

关于我写的demo我想放到下篇去讲,现在太晚了,也写不了太多东西。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值