Android布局“小众派”——PercentFrameLayout & PercentRelativeLayout

前言

Google为开发者提供了多种布局方案,以应对复杂的用户界面,简化了开发者的工作。那么除了常用的布局之外,还有哪些比较“小众”的布局呢?今天我们来回顾一下常用布局,认识PercentFrameLayout&PercentRelativeLayout

Android常用布局

  • LinearLayout 线性布局
  • RelativeLayout 相对布局
  • FrameLayout 帧布局

LinearLayout & RelativeLayout回顾

LinearLayout 的小技巧:
  1. 利用LinearLayout自带属性为其子View添加分割线:
android:divider="@drawable/divider"
android:showDividers="beginning|middle|end">

divider.xml内容如下:


    
    

  1. layout_weight属性
    在使用weight属性时,把对应方向上的height/width指定为0dp(具体看LinearLayout的方向);需要将子View填满剩余布局时,指定该View的 layout_weight属性为1即可。


    
    
    

RelativeLayout&LinearLayout 性能对比?

1.RelativeLayout会让子View调用2次onMeasure,LinearLayout 在有weight时,也会调用子View2次onMeasure
2.RelativeLayout的子View如果高度和RelativeLayout不同,则会引发效率问题,当子View很复杂时,这个问题会更加严重。如果可以,尽量使用padding代替margin。
3.在不影响层级深度的情况下,使用LinearLayout和FrameLayout而不是RelativeLayout。
详情见:Android中RelativeLayout和LinearLayout性能分析

今日主菜:

Android布局“小众派”——PercentFrameLayout

有了这个布局,我们就可以轻易的实现任意比例分割的布局了,但是为什么说是小众派呢,一是因为因为LinearLayout的替代性,二是这个布局是在support library下的,需要单独引入使用:
compile 'com.android.support:percent:25.0.1'
正如名字,它是FrameLayout的子类,也就是说它具有了FrameLayout的属性。

Android布局“小众派”——PercentFrameLayout & PercentRelativeLayout_第1张图片
percentFrameLayout.png

PercentFrameLayout用法:



     

 

这里一定要定义app命名空间,用来引用PercentFrameLayout的属性

其他属性:

  app:layout_marginRightPercent
  app:layout_marginBottomPercent
  app:layout_marginStartPercent
  app:layout_marginEndPercent
  app:layout_aspectRatio

细心的同学可能发现了,上面的ImageView没有定义宽高啊!?是的,在这里并不需要,但是,可以在某些占百分比比价笑小的空间中加入layout_width/height="wrap_content,防止太小的百分比致使该控件无法正常显示,保证能显示出内容。

app:layout_aspectRatio 这个属性有点陌生,其实它是屏幕的宽高比,如:

     android:layout_width="300dp"
     app:layout_aspectRatio="200%"

PercentFrameLayout.xml实例




    

布局效果

可以看到我们用PercentFrameLayout轻松实现了这个布局,大家可以想想用其他布局怎么实现。笔者认为它相对于LinearLayout减少了层级,相对于RelativeLayout则简单了很多,不失为一种优雅的写法。

Android布局“小众派”——PercentFrameLayout & PercentRelativeLayout_第2张图片
PercentFrameLayout实例

Android布局“小众派”——PercentRelativeLayout

PercentRelativeLayout则是RelativeLayout的子类,继承了它的所有属性,并且扩展了百分比属性,跟前文介绍的PercentFrameLayout百分比属性以及宽高比属性一样。这里就不做过多介绍了。

你可能感兴趣的:(Android布局“小众派”——PercentFrameLayout & PercentRelativeLayout)