• 【1】《50 Android Hacks(安卓五十技)》翻译——三顾频烦天下技


    然而这书已经有了地球人翻译的版本。

    http://item.jd.com/11431447.html

    地球人可以看这个。


    第一章 搞一搞布局

    第一技 使用权重(weight)居中控件(View)  [Android 1.6+]

      有一回我去参加谷歌开发者大会,我在讲怎么用XML创建控件的时候有个人插嘴,说“我要是想让一个控件居中而且宽度是父控件的一半该怎么写?”我一开始没听懂他说的什么玩意,不过他后来跑上来在黑板上画了图我就懂了。见图一和图二。

    ·图一 按钮宽度占父布局一半(纵向)

     

    ·图二 按钮宽度占父布局一半(横向)

      看起来是不是特别简单?有种你试试再说。在这一技里,我就来教教你怎么做人用线性布局(LinearLayout)里的android:weightSum属性加上子控件的android:layout_weight属性来解决这个问题。这任务看起来挺简单的,但是我经常在跟弱者开发者聊天的时候问起这个问题,因为很多人都不知道最好的解决方法。


    1.1 我来组成权重和(weightSum)和布局权重(layout_weight)

      Android设备有各种大小,作为开发者你就得写XML来应对各种大小。硬编码尺寸值并不可取,所以我们得想点别的招来组织控件。

      重要的事情说到了第三遍,我们要用权重和以及布局权重来把我们的布局里剩下的空间塞满。android:weightSum的API文档(详见我不一定能翻译到的1.3章)描述了一个跟我们想做的差不多的场景:

    定义最大权重和。如果没有指定,权重和就由所有子控件的layout_weight相加得到。如果想让单个子控件得到所有可用空间的一半,可以通过把它的layout_weight设为0.5,然后把weightSum设为1.0来实现。

    就像是我们要把小○○塞入一个小○里一样。weightSum就是可用空间的百分比,而layout_weight就是小○里的每个小○○能占的百分比。假设小红的小○的weightSum是1,里面放了两个小○○,分别是小明的小○○和小刚的小○○。小明的小○○的layout_weight是0.25,小刚的小○○则是0.75,于是小明的小○○就占有了小红的小○25%的空间,而小刚的小○○就占据了剩下的75%。

      本章开头的那个情况的解决办法也是差不多的。给父布局一个指定的weightSum,再把按钮的android:layout_weight指定成它一半的值。关门放XML:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="fill_parent"
     4     android:layout_height="fill_parent"
     5     android:background="#FFFFFF"
     6     android:gravity="center"
     7     android:orientation="horizontal"
     8     android:weightSum="1" >
     9 
    10     <Button
    11         android:layout_width="0dp"
    12         android:layout_height="wrap_content"
    13         android:layout_weight="0.5"
    14         android:text="Click me" />
    15 
    16 </LinearLayout>

      线性布局读到了android:weightSum,就知道了它所有子控件权重的和是1。又因为它第一个也是唯一一个子控件,按钮,的android:layout_width设成了0dp,线性布局就知道了它得用android:weightSum给的值来决定这个按钮的宽度。然后又因为按钮的android:layout_weight设成的0.5,于是它就正好占了所有可用空间的一半。

      比如线性布局的宽度是200dp,android:weightSum是1。按钮的实际宽度就是这么算的:

    按钮的指定宽度 + 按钮的权重 * 200 / 权重和

    ∵按钮的指定宽度 = 0(dp)

    又∵按钮的权重 = 0.5

    ∴按钮的实际宽度 = 0 + 0.5 * 200 / 1 = 100(dp)


    1.2 The bottom line 怎么翻译比较好,在线等,挺急的。

      如果想基于百分比给线性布局分配可用空间,权重还是挺重要的,反正比硬编码强。如果你在3.0以上搞开发而且用过Fragment,你可能发现大部分示例代码都是用权重来把不同的Fragment放到布局里的。学会用权重也算是get√了个新技能。


    1.3 外部链接

    http://developer.android.com/reference/android/widget/LinearLayout.html

  • 相关阅读:
    OpenFire源码学习之十九:在openfire中使用redis插件(上)
    OpenFire源码学习之十八:IOS离线推送
    OpenFire源码学习之十七:HTTP Service插件
    OpenFire源码学习之十六:wildfire
    OpenFire源码学习之十五:插件开发
    OpenFire源码学习之十四:插件管理
    OpenFire源码学习之十三:消息处理
    数据挖掘入门
    iOS小技巧
    图片加载完成之前对图片高度侦测
  • 原文地址:https://www.cnblogs.com/chihane/p/4450564.html
Copyright © 2020-2023  润新知