说几个常见的问题,这些问题一般都是由逻辑问题引起,google工程师这样设计布局模式,是有逻辑上的道理的。

 

错误一,

Circular dependencies cannot exist in RelativeLayout

这个错误,发生在相对布局模式中,

在相对布局模式中,我们喜欢用同时使用android:layout_below和android:layout_above两个属性,

前者是表示我在某某的上面,后者表示我在某某的上面,

如果存在对象A和对象B,假设对象A在对象B的上面,

肯定对象B一定在对象A的下面,

如果我们再定义一次,对象B在对象A的下面,那么,从逻辑上讲,是多此一举。

 

疑惑二,

 

对象的android:layout_gravity="right"属性, 在线性模式中无效,线性模式中的对象不能居右?

google工程师设计这麽多的模式,不是没有道理的,就是要让设计人员根据需求找到最优和最方便的布局模式,

至于能不能居右,我想说是能做到的,可以设置Layout的重心居右(android:gravity="right"),

这样也能是线性模式中的对象居右。

  但我建议是,凡是涉及到有相对的居右居左或者居底居顶的对象,优先采用相对布局。

 

错误三,

 

android:layout_gravity android:layout_alignParentRight属性用错了布局模式

这个错误,我以前也经常犯,在线性模式中,我会使用android:layout_alignParentRight属性

虽然不会报错,但这个属性在线性模式中,也不起作用。

 

android:layout_alignParentRight等 属性是专门用在相对布局模式中的属性,不要搞到其他模式中。

 

疑惑三,

搞不清楚带layout和不带layout的关系

记住一点,凡是带layout字样的对是来描写对象与对象之间的关系的,不是对象内部的关系。

 

疑惑四,

在动态给组件设置布局参数的时候,getLayoutParams返回null,这有是个逻辑问题,如果组件是我们动态构建的,并且没有初始化任何LayoutParams参数,这个对象当然为null,这时我们需要主动创建这个对象。

LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

 

五,慎用android:layout_below和android:layout_above

假设有个这样的场景,LayoutA和LayoutB,两个容器,A在B的上面,而B又靠近父容器的底部android:layout_alignParentBottom="true",如果把android:layout_above=B用在A上面,那么A的底部永远挨着B的顶部,而不管A容器里是否有组件。

posted on 2012-11-16 11:23  wstczlt  阅读(401)  评论(0)    收藏  举报