Android 硬布局item的高级写法

效果:

Android 硬布局item的高级写法


这种布局应该是非常常见了,且写的比较多。


今天简单探讨一下效果图中上下两种布局的写法。

比较


可以看出,对比还是很明显的,精简到最后只有最开始的四分之一。

上部分

先看常规item写法,横向的LinearLayout嵌套三个子View,分别是


  • 左边的ImageView,
  • 中间的TextView,
  • 和右边的ImageView。


然后每个横向的LinearLayout之间添加一个高度1dp的View来作为横线。


    

        

            

            

            

        

        

        

            

            

            

        

        

        

            

            

            

        

    


最外层LinearLayout的background:


<?xml version="1.0" encoding="utf-8"?>

    
    


可以看到嵌套虽然不深,但是已经拉的很长,不易阅读修改。


且 哪怕是一层的嵌套优化,也是优化,积少成多。

下部分

利用TextView的drawableStart和drawableEnd属性,来做简化,可以直接去掉左右两边的ImageView。


至于分割线,利用LinearLayout的divider和showDividers属性,写个shape,来做简化,去掉item之间做横线的View。


    

        

        

        

    


shape:


<?xml version="1.0" encoding="utf-8"?>

    
        
            
            
        
    


可以看到,层级减少了,行数也减少了,看起来清爽多了。

style简化

尽管如此,我们还是有可以简化的空间。


TextView有一些共同属性,可以抽取做一个style。


    


再看简化后的代码


    

        

        

        

    


更加精简了,只有简化前的一半,共同属性封装,只需要关注业务参数。

核心属性

LinearLayout

  • divider,分割线
  • showDividers,分割线的显示方式
  • layout_marginVertical,代替原来的layout_marginTop、layout_marginBottom
  • layout_marginHorizontal,代替原来的layout_marginStart、layout_marginEnd


题外话,LinearLayout的android:animateLayoutChanges="true",可以在其子view添加移除的时候添加简单的动画。

TextView

  • drawableEndCompat,即原来的drawableEnd,设置右边的drawable,其他方向同理
  • drawablePadding,drawable与文字之前的内边距
  • includeFontPadding,TextView默认top是有6dp的padding的,false可去掉,小细节
  • foreground,添加这个属性会有水波纹的点击效果,省了写selector



ok,到此结束,无聊的知识又增加了。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章