zoukankan      html  css  js  c++  java
  • 2.4 布局

    2.4.1 Android抽象布局

    在布局优化中,Androi的官方提到了这三种布局<include />、<merge />、<ViewStub />

    1、布局重用<include /> 该标签能够重用布局文件

    1) 签必须使用单独的layout属性:<include layout="@layout/titlebar"/>

        2) 可以使用其他属性。<include />标签若指定了ID属性,而会覆盖layout中的ID

        3) 所有的android:layout_*都是有效的,前提是必须要写layout_width和layout_height两个属性。

        4) 布局中可以包含两个相同的include标签,引用时可以使用如下方法解决(参考):

    View bookmarks_container_2  =  findViewById(R.id.bookmarks_favourite);  
    bookmarks_container_2.findViewById(R.id.bookmarks_list); 

    3、需要时使用<ViewStub />2、减少视图层级<merge />多用于替换FrameLayout

    当你需要时才会加载,使用他并不会影响UI初始化时的性能。各种不常用的布局想进度条、显示错误消息等可以使用<ViewStub />标签,以减少内存使用量,加快渲染速度。<ViewStub />是一个不可见的,大小为0的View。<ViewStub />标签使用如下:

    <ViewStub 
        android:id="@+id/stub_import" 
        android:inflatedId="@+id/panel_import" 
        android:layout="@layout/progress_overlay" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:layout_gravity="bottom" /> 
    
    当你想加载布局时,可以使用下面其中一种方法:
    ((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE); 
    // View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate(); 

      当调用inflate()函数的时候,ViewStub被引用的资源替代,并且返回引用的view。 这样程序可以直接得到引用的view而不用再次调用函数findViewById()来查找了。:ViewStub目前还不支持 <merge /> 标签。

    2.4.2 Android六大布局

    1. FrameLayout:         层叠布局,在同一位置依次放置View,会盖住原来的东西。
    2. LinearLayout:         线性布局,可分为垂直布局("vertical")和水平布局("horizontal" )。
    3. AbsoluteLayout:      绝对布局,不建议使用。
    4. RelativeLayout:       相对布局,可以理解为某一个元素为参照物,有各种参照属性。
    5. TableLayout:           表格布局,每一个TableLayout里面TableRow,用来具体定义每一个元素。
    6. GridLayout:          网格布局,android4.0以上版本出现的。

    GridLayout布局使用虚细线将布局划分为行、列和单元格,也支持一个控件在行、列上都有交错排列。而GridLayout使用的其实是跟LinearLayout类似的API,只不过是修改了一下相关的标签而已,GridLayout的布局策略简单分为以下三个部分:

    首先它与LinearLayout布局一样,也分为水平和垂直两种方式,默认是水平布局,一个控件挨着一个控件从左到右依次排列,但是通过指定android:columnCount设置列数的属性后,控件会自动换行进行排列。

    另一方面,对于GridLayout布局中的子控件,默认按照wrap_content的方式设置其显示,这只需要在GridLayout布局中显式声明即可。

    其次,若要指定某控件显示在固定的行或列,只需设置该子控件的android:layout_row和android:layout_column属性即可,但是需要注意:android:layout_row=”0”表示从第一行开始,android:layout_column=”0”表示从第一列开始。

    2.4.3 属性android:layout_weight

      首先声明只有在Linearlayout中,该属性才有效。设置android:layout_width或android:layout_height为"0dp"和match_parent会造成两种截然相反的效果。它的原理是:按比例分配剩余空间

    • 当android:layout_width="0dp"时,在分配剩余空间阶段,比例按照layout_weight,也就是越大分得越大。
    • 当android:layout_width="fill_parent"时,分配宽度能把所有空间分满,剩余的空间是负数,所以分配的越大,最终空间越小。
  • 相关阅读:
    随感
    Serializable方式实现数据传递
    Serializable方式实现数据传递
    MeterailDesign最佳UI设计
    MeterailDesign最佳UI设计
    Metarial Design之ToolBar
    Metarial Design之ToolBar
    Android"寻龙点穴"指南针
    如何完全卸载VS2010(亲自体验过)
    【杭电】[2049]不容易系列之(4)——考新郎
  • 原文地址:https://www.cnblogs.com/keyarchen/p/6060931.html
Copyright © 2011-2022 走看看