各种注意问题

来源:互联网 发布:淘宝下架的宝贝在哪 编辑:程序博客网 时间:2024/05/29 08:35

文章截取自:http://blog.csdn.net/kost_/article/details/13020401


文章是说:我放一个button在画面里面,位置居中,说白了就是左右预留空间要一样多,之前在公司有个项目中画面需要调整类似于这个,当时别人是用java动态设置宽高,达到布局,我用xml实现时,如果我要实现这个我估计会分成四等分,左右塞一个view占据,这样实现。但是傻瓜办法。

weight属性一直在使用,但总是没有静下心来仔细揣摩一下,有些地方还是忽略了。刚刚看了才恍然大悟。


忌浮躁、


    看上去很简单对不对?现在让我们花五分钟的时间来实现它。在这个Hack中,我们来看看如何用LinearLayout的android:weightSum属性与android:layout_weight这两个属性来实现这个效果。这看上去是一个很简单的任务,但是在我给Android开发者的面试中,好多的人都不知道实现它的最好的方法是什么。

      


1.1 结合使用weightSum属性与layout_weight属性

    Android设备有不同的屏幕分辨率的大小,所以开发者在写xml文件的时候需要用某种方式来适配这些不同大小的屏幕。为了适配屏幕大小写死代码是非常不可取的做法,所以我们需要一些其他的办法来组织我们的View。

    我们将会用到weightSum和layout_weight这两个属性来填充我们的布局Layout,android:weightSum的文档中描述了一种跟我们要达到的目的类似的场景:

    定义最大的WeightSum,如果没有注明,这个值就是把所有子view的layout_weight相加的和。这样如果我们想让一个child占据50%的可用空间,我们只要将它的android:layout_weight属性设定值为0.5,然后将android:weightSum设为1.0即可。

    假想一下,我们需要往一个盒子中放东西,weightSum代表的就是盒子可用空间的百分比,layout_weight表示的就是每个view所占据的百分比。举个例子来说,盒子的weightSum为1,我们需要放置A和B这两个物品,A的layout_weight的为0.25,B的weight_sum为0.75。这样的话A就占据了盒子的25%的空间,B占据了盒子的75%的空间。

    在开始我们谈到所要实现的场景跟这个是很类似的,我们给parent一个特定的weightSum,然后给这个Button的layout_weight一半的值即可,XML文件如下:

[html] view plaincopy
  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. <Button  
  10.     android:layout_width="0dp"  
  11.     android:layout_height="wrap_content"  
  12.     android:layout_weight="0.5"  
  13.     android:text="Click me"  
  14. />   
  15. </LinearLayout>  

    LinearLayout读取了它自己的android:weightSum属性,获取到他的所有的child的weight应该是1。他的第一个也是唯一的一个child就是这个Button,但是由于Button的layout_weidth设为了0dp,所以LinearLayout就知道了需要根据weight属性来判断这个button的宽度。Button的layout_weight设为了0.5,所以这个Button将准确的占据50%的位置。

    一个可能的例子是,Linearlayout的宽为200dp,weightSum设为1。那么Button的宽度将会被如下计算:

    Button's width + Button's weight * 200 / sum(weight)

    由于Button的width是0dp,button的weight是0.5,sum(weight)是1,所以结果如下:

    0 + 0.5 * 200 / 1 = 100

1.2 总结

    在你想按比例来分配布局的时候,用Linearlayout的weight属性是一个比写死代码再好不过的方法了。如果你在用Honeycomb的Fragments,你会发现大部分的例子都是将Fragment按照weight来进行布局的。懂得如何使用weight属性将会使你增添一个重要的技能。


1.3 相关链接

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





0 0
原创粉丝点击