Android技巧1—使用weights来居中views

Android技巧1—使用weights来居中views

               适合于Android v1.6以上

 

       在我给一群开发者做演讲的时候,我正解释如何使用XML来创建视图(view),有人就问我说:“我想将一个按钮居中并且它的宽度是父元素宽度的一半,我该怎么写?“。一开始我还没明白他的意思,他画出来以后我就懂了。他的意思就是如图1.1和1.2所示那样。

 

       看起来很简单,对吧?现在请用5分钟来试着实现它吧。这里讲的技巧里,我们将学到如何使用线性布局(LinearLayout)的android:weightSum属性结合它的子属性android:layout_weight来解决这个问题。这看起来可能是个简单的任务,但这是我在招聘开发人员时经常问的问题之一,因为很多人都不知道解决这个问题的最好方法是什么。

 

同时使用weightSum和layout_weight

       安卓设备拥有不同的尺寸,作为开发者的我们需要使我们创建的XML在不同尺寸的屏幕上正常工作。硬编码不是我们的选择,我们需要别的方法来布局视图。

      

       我们将使用layout_weight和weightSum属性将布局剩余的的空间填满。android:weightSum的文档(见1.3部分)描述了一个类似我们正在试着完成的方案。

      

       指定weight的最大总值。如果没指定,则总值就是所有子元素的layout_weight之和。这样的话就可以指定一个子元素占总可用空间的50%,如指定它的layout_weight为0.5,并且指定weightSum为1.0。

 

       好比我们需要将东西放进一个盒子。整个盒子的空间就是weightSum,而layout_weight就是每个东西所占整个空间的百分比。例如,盒子的总空间weightSum为1,现在要放东西A和东西B进去,将A的layout_weight设置为0.25,同时将B的layout_weight设置为0.75,这样东西就会占用整个盒子空间的25%,而B占用75%。

 

       我们将父元素的weightSum设置为一个指定的值,并且把这个值的一半指定给按钮的android:layout_weight属性。结果XML文件如下:

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="horizontal"

    android:gravity="center"

    android:weightSum="1" >                   

 

    <Button

        android:layout_width="0dp"             ②

        android:layout_height="wrap_content"

        android:layout_weight="0.5"            ③

        android:text="Click me"

       />

 

</LinearLayout>

 

       线性布局(Linearlayout)读取到android:weightSum属性,并且知道所有子元素的weight之和为1。线性布局的第一个也是唯一的一个子元素Button的android:layout_weigth属性值设置为0dp,这就告诉线性布局根据可用空间也就是android:weightSum所指定的空间来决定按钮的宽度。因为按钮的android:layout_weight属性值为0.5,因此它将占据可用空间的50%。

 

       这里有个合适的例子,线性布局(LinearLayout)的宽为200dp,指定它的android:weightSum属性值为1。那么,按钮(Button)的宽度可以这样计算:

       按钮的宽 + 按钮的weight值 * 200 / sum(weight)

      

因为按钮的宽为0dp,它的weight为0.5。sum(weight)是1,结果如下所示:

       0+ 0.5 * 200 / 1 = 100

 

结果

       使用线性布局(LinearLayout)的weight是很重要的,特别是当你想根据百分比来分配可用空间而不是写死尺寸的时候。如果你的目标平台是Honeycomb,并且使用了碎片(Fragments),你将会注意到很多例子在布局里放置不同的碎片(Fragments)时使用了权重(weight)。所以,明白如何使用权重(weight)将会使你如虎添翼。

 

外部链接

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值