zoukankan      html  css  js  c++  java
  • Android布局1

    一、FrameLayout

      1) android3.0以下系统中,FrameLayout包含的一级节点View的layout_margin依赖于layout_gravity属性(可以将layout_gravity理解为margin的参考点),必须设置layout_gravity属性layout_margin才生效。如果在开发中需要兼容2.x系统,在设置FrameLayout的margin时,一定要加上layout_gravity=“top|left”属性。

      2)  向FrameLayout添加多个控件时,一般最大控件确定了布局大小,所以如果最大控件在加载布局时不可见,那么在视图完全加载完毕后将其置为可见时,只能显示一部分。可以通过setMeasureAllChildren(true)来解决该问题。

      android:measureAllChilren=“true”

    二、LinearLayout

      1) layout_weight 属性是指LinearLayout先给里面的控件分配完大小之后剩余空间的权重。

    计算方式:(模拟一个LinearLayout容器内有3个TextView,weight分别为1:2:2,以width为例)

    1、计算出3个TextView的width总和;

    2、外层容器width-所有TextView的width总和=剩余可分配宽度(当TextView为fill_parent时,结果很可能是负数);

    3、TextView宽度 = TextView自身宽度+按TextView的weight比例计算的剩余分配宽度;

      所以当layout_width/layout_height设置为wrap_content或fill_parent时,实际宽度的分配并不是想象中的按weight比例来分配,因为还要加上view本身的宽度。而设置为0dp时,则可以完全按分配的weight比例来计算(因为按照如上计算方式,抛弃了View本身宽度时,就是按weight比例来计算了)。

      android:layout_weightSum属性可以指定weight的最大总值,一般我们没有指定时,这个总值就是所有子元素(例如上述例子中3个TextView的weight总和)的layout_weight之和。这样的话就可以指定一个子元素占总可用空间的百分比。如设置外层容器的weightSum为1.0,某个TextView的weight为0.5,则该TextView占剩余可用空间的50%。

    三、include

      1) include设置的id会覆盖layout中顶层容器的id;

      2) include可以设置layout_width和layout_height,但必须同时设置才能生效,并且会覆盖layout中顶层容器的设置,并且所有layout_*属性均可使用;

    四、merge

      1) <merge />只能作为XML布局的根标签使用;

      2) 当Inflate以<merge />开头的布局文件时,必须指定一个父ViewGroup,并且必须设定attachToRoot为true(参见inflate(int , android.view.ViewGroup, Boolean)方法);

    五、ViewStub

      在平时开发中,我们可以利用include实现布局的模块化,使比较复杂的布局文件结构更加清晰,也可以使用merge来优化布局。而ViewStub也可以用来优化布局,ViewStub不会影响UI初始化时的性能,他是一个不可见,不占布局位置,占用资源非常小的View。

      1) 可以通过android:inflatedId属性重写布局文件中根元素的id;

      2) 在ViewStub上设置的layout_*参数将会应用在包含的布局文件的根元素上;

      3) 当你准备inflate ViewStub时,调用inflate方法即可。还可以设置ViewSub的Visibility为VISIBLE或INVISIBLE,也会触发inflate。值得注意的是,使用inflate()方法能返回布局文件的根View,不用自己去查找;

      4) 当ViewStub inflate后,这个ViewStub就从View层次中移除了。因此,没有必要保留一个对ViewStub的引用(如在类的字段里);

      5) ViewStub不能反复inflate,只能inflate一次,可保留inflate方法或findById返回的ViewSub引用资源的根元素对象;

      6) ViewStub不支持merge;

    参考资源

    layout_weight

    http://blog.csdn.net/xiaanming/article/details/13630837

    http://blog.csdn.net/fiendvip/article/details/14516841

    merge

    http://blog.csdn.net/xyz_lmn/article/details/14524567

    http://blog.sina.com.cn/s/blog_62f987620100sf13.html

  • 相关阅读:
    解决url传递过程中加号变空格的问题<转>
    windows下CEF3的关闭流程《转》
    mfc封装cef浏览器 关闭整个窗口程序得时候又重启mfc 应用的程序
    雷神免费资源
    LCA的 RMQ解法模版
    最新的js焦点图库
    whereis+whatis+man
    Anroid 手机助手 详细解析 概述(二)
    <c:forEach varStatus="status">中 varStatus的属性简介
    JBoss 系列四十九:JBoss 7/WildFly 中端口使用列表
  • 原文地址:https://www.cnblogs.com/endure/p/3711367.html
Copyright © 2011-2022 走看看