• [android] 相对布局和单位简介


    /**********************2016年4月23日 更新*******************************/

    知乎:为何Android的默认布局是RelativeLayout?而不是LinearLayout

    无论是Eclipse还是Android Studio,新建Blank Activity时默认的layout都是RelativeLayout,

    查询资料发现这是由

    android-sdk ools emplatesactivitiesBlankActivity oot eslayoutactivity_simple.xml.ftl 这个文件定义的,也就是说这是Google的选择,而非IDE的选择。

    我想知道的是为什么是RelativeLayout而不是LinearLayout?如果有可靠的数据支持的话再好不过,先谢过。

    猫叔:

    Google的意思是“性能至上”, RelativeLayout 在性能上更好,因为在诸如 ListView 等控件中,使用 LinearLayout 容易产生多层嵌套的布局结构,这在性能上是不好的。而 RelativeLayout 因其原理上的灵活性,通常层级结构都比较扁平,很多使用LinearLayout 的情况都可以用一个 RelativeLayout 来替代,以降低布局的嵌套层级,优化性能。所以从这一点来看,Google比较推荐开发者使用RelativeLayout,因此就将其作为Blank Activity的默认布局了。

    李板溪:

    你可以去看 Google I/O 中 Android 的 Session

    或者 Android 的文档。

    不过基本可以总结成以下3点:

    1. RelativeLayout 布局灵活一些。

    2. 实现复杂的布局时,由于 RelativeLayout 所需要的嵌套层次少,所以可能大概也许性能会好一些。 但是你应该根据实际情况测试,主观判断不准确,请参考下面第三点。

    3. 对于简单的布局,或者使用 LinearLayout 的嵌套布局层次不多的情况下。还是推荐 使用 LinearLayout 来实现。 因为 LinearLayout 布局性能更高一点,为什么? 因为 RelativeLayout 布局需要至少计算两次。

    知乎:px、dp、dip、dpi、sp 等到底有什么联系区别?产生的根源和设计时的影响如何?是否屏幕密度的决定原因?

    王拓翔:

    从UI设计师的角度理解:

    px(像素)是我们UI设计师在PS里使用的(不解释),同时也是手机屏幕上所显示的(也不解释)

    dp是开发写layout的时候使用的尺寸单位,sp是开发写layout时关于字体的字号单位,且dp与sp总为1:1关系。

    Android支持四种不同的dpi模式:ldpi mdpi hdpi xhdpi

    一般地,手机分辨率与所运行的dpi模式是匹配的,例如hvga(320x480像素)的手机屏幕一般在3.5英寸左右,运行在mdpi模式下(也有例外,稍后解释)(这个是ROM控制的,app不能改变)。当运行在mdpi下时,1dp=1px:也就是说设计师在PS里定义一个item高48px,开发就会定义该item高48dp;Photoshop中14px大的字体,开发会定义为14sp。

    对于一部wvga(480x800)手机(G7、N1、NS),一般是运行在hdpi模式下。当运行在hdpi模式下时,1dp=1.5px:也就是说设计师在PS里定义一个item高72px,开发就会定义该item高48dp;Photoshop中21px大的字体,开发会定义为14sp。

    所以,当你的app需要适配多个dpi模式的时候(例如同时适配mdpi与hdpi),若你在wvga下做设计,你需要将你的各数值都为3的倍数,并在切图标注时将所有的数字除以3乘以2换算成dp,这样开发的同一套layout就能用在两个不同的dpi模式下,而不是写两套layout。

    mdpi与hdpi是2:3的关系

    mdpi与xhdpi是1:2的关系

    ldpi与mdpi是3:4的关系

    Galaxy Nexus 是720P屏幕,就是运行在xhdpi下的。

    可以想见为什么iOS的开发者升级到 Retina Display 是多么的无痛

    再补充一种例外,有些比较山寨的Pad有可能是7英寸屏幕,分辨率为wvga(480x800)运行在mdpi下,所以一部wvga手机是320x533dp,一部wvga平板是480x800dp,可以显示的内容会多很多。

    /********************************************************************/

    相对布局一般就是控制控件与控件之间的相对位置来定位,如果不设置都是默认以屏幕的左上角的对齐

    常见: 位置,对齐

    layout_blow 在某控件的下面   layout_above 在某控件的上面

    Layout_toRightOf 在某控件的右面 layout_toLeftOf 在某控件的左面

    Layout_centerInParent 在父控件的中央

    Layout_centerHorizontal 在父控件水平方向剧中

    Layout_centerVerital  在父控件垂直方向剧中

    与同级别对齐,与父控件对齐

    Layout_alignRight 与某控件右边对齐

    Layout_alignParentBottom 与父控件底部对齐

    Layout_marginLeft  layout_marginTop 页边距

    Layout_textColor=”#66000000” 支持透明度 argb第一个是透明度

    单位:

    dp==dip  单位像素密度,在不同分辨率的手机上会自动进行变化,比例显示一致

    px  在不同分辨率的手机上会显示一致,因此有时会感觉app的比例不对

    sp 实际所代表的大小和dp一致,为了对文字缩放防止锯齿特意制定

    测试代码

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        tools:context="com.tsh.commonlayout.MainActivity" >
    
        <TextView
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="25sp"
            android:textColor="#000000"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"
            android:text="我是大文本" />
        <TextView
            android:layout_below="@id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:textColor="#66000000"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:text="我是小文本" />
        <CheckBox 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_alignParentRight="true"
            />
    </RelativeLayout>
  • 相关阅读:
    Atitit  Uncaught (in promise) SyntaxError Unexpected token < in JSON at position 0
    Atitit  验证 数字验证 非空验证的最佳算法  h5
    Atitit 转移特效attilax总结
    Atitit Loading 动画效果
    Atitit 项目管理 提升开发效率的项目流程方法模型 哑铃型  橄榄型 直板型
    Atitit hibernate3 hinernate4 hibernate5新特性attilax总结
    Atitit js es5 es6新特性 attilax总结
    Atitit mybatis 3 3.2 3.3  3.4 新特性attilax总结
    Atitit spring 3.0 3.1 3.2 4.0 4.3 5.0 新特性
    Atitit jquery  1.4--v1.11  v1.12  v2.0  3.0 的新特性
  • 原文地址:https://www.cnblogs.com/taoshihan/p/5218664.html
Copyright © 2020-2023  润新知