美文网首页
AS不能拖出满意的布局效果

AS不能拖出满意的布局效果

作者: 灰灰手记 | 来源:发表于2016-12-25 01:38 被阅读267次

    整理旧笔记


    实现如下布局:

    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.

    相关文章

      网友评论

          本文标题:AS不能拖出满意的布局效果

          本文链接:https://www.haomeiwen.com/subject/tnurvttx.html