整理旧笔记
实现如下布局:
Eclipse拖出来的布局要求:
1、不用weight控制;
2、不写死大小;
3、只能一个ViewGoup套3个子View,不能多东西。
这是个典型的TitleBar布局,实现起来很简单,在Eclipse里面几下就拖出来了,但是换到AS里面,却怎么都拖不出来,只能手写代码实现。
AS拖出来的布局1 AS拖出来的布局2其实并不是AS比Eclipse差,而是出了新属性之后,AS默认用了新属性,而新旧属性存在一些差异。
对比Eclipse的代码和AS的代码,重点差异在中间的TextView。
*** “#” 号用于标识差异部分 ***
Eclipse代码:(对应上面第一张图)
<TextView android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView2"
android:gravity="center"
android:layout_alignBottom="@+id/button2"
android:layout_alignParentTop="true"
# android:layout_toLeftOf="@+id/button3"
# android:layout_toRightOf="@+id/button2" />
AS代码1:(对应上面第二张图)
<TextView android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView2"
android:gravity="center"
android:layout_alignBottom="@+id/button2"
android:layout_alignParentTop="true"
# android:layout_toLeftOf="@+id/button3"
# android:layout_toRightOf="@+id/button2"
# android:layout_toEndOf="@+id/button2" />
AS代码2:(对应上面第三张图)
<TextView android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView2"
android:gravity="center"
android:layout_alignBottom="@+id/button2"
android:layout_alignParentTop="true"
# android:layout_toRightOf="@+id/button2"
# android:layout_toLeftOf="@+id/button3"
# android:layout_toStartOf="@+id/button3" />
可以看到,AS拖出来的代码里面多了一个新属性:layout_toStartOf / layout_toEndOf 。也正是应为这个多出来的属性,导致怎么都拖不出想要的效果。
解决方法:
1、去掉多出来的属性,回到Eclipse的状态。
不建议,因为新属性出来是有它的用处的,如果去掉,那么可能在某些地方就会出现问题。
2、补齐对应的新属性,保持兼容状态。
如下面的代码,当这两个新属性同时出现时,布局效果就回到了上面第一张图的状态。
<TextView android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView2"
android:gravity="center"
android:layout_alignBottom="@+id/button2"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/button2"
# android:layout_toEndOf="@+id/button2"
android:layout_toLeftOf="@+id/button3"
# android:layout_toStartOf="@+id/button3" />
Start/End是新加的,是为RTL设计的,用AS写Left/Right时,会建议换用(或者同步写上)Start/End,如果不需要适配RTL,可以忽略AS的提示。此外,涉及Android版本兼容性问题时,请参考下面官方说明。
NOTE:
If your minSdkVersion is less than 17, you should add both the older left/right attributes as well as the new start/right attributes. On older platforms, where RTL is not supported and the start/right attributes are unknown and therefore ignored, you need the older left/right attributes.
网友评论