Android-ConstraintLayout(约束布局)-m

作者: MonkeyLei | 来源:发表于2019-07-10 10:18 被阅读0次

    关于margin这部分,我们快速简单来实践下。重点还要去搞下Android注解反射的Demo....

    官方文档列了一下一些属性:

    If side margins are set, they will be applied to the corresponding constraints (if they exist) (Fig. 3), enforcing the margin as a space between the target and the source side. The usual layout margin attributes can be used to this effect:

    • start、end在某些情况(应该是大部分情况)下和left, right差不多;从目前来看,官方建议使用start, end。你在AS界面编辑里面去拖动生成一些布局默认也是start,end(一会我们看下效果), so.....
    • android:layout_marginStart
    • android:layout_marginEnd
    • 下面四个属性比较简单,都是以前经常用的,就不怎么说了
    • android:layout_marginLeft
    • android:layout_marginTop
    • android:layout_marginRight
    • android:layout_marginBottom

    之前有一篇文章也说道了关于start,end与left,right类似。为什么又两套?从了解资料看一方面是兼容旧版,改进新版,慢慢的或许逐渐替代了也说不准。另外start用法更通用一些,除了和left同样效果,还有自己的一些东西。我们就说下这个start和end吧!

    1.普通的start,end使用(效果和left,right一毛一样)

         <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".Main2Activity">
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="20dp"
            android:text="fuck button 1"
            android:textSize="15sp"
            app:layout_constraintLeft_toLeftOf="parent" />
    
        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="20dp"
            android:background="#e23bca"
            android:text="fuck button 2"
            android:textSize="15sp"
            app:layout_constraintLeft_toRightOf="@id/button1" />
    
        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="20dp"
            android:background="#0febca"
            android:text="fuck button 3"
            android:textSize="15sp"
            app:layout_constraintRight_toRightOf="@id/button2" />
    
    </android.support.constraint.ConstraintLayout>
    
    image

    2. start、end可能会怎么用呢?

    先来了解**android:supportsRtl="true"和android:layoutDirection="rtl" **了一个是开启支持从右向左的布局特性,一个是设置布局方向,可以是"rtl"、"ltr","local", "inherit", 前两个倒是好懂,后两个就蒙圈了,也没具体用过。做了简单demo发现local和Inherit都是从左到右,具体的区别目前了解的知识还不能够彻底理解。 后面专门针对RTL布局做一个学习分析吧!!!

    如果我们设置了AndroidMainifest.xml里面开启支持这种特性,然后设置从右向左的布局,那么第一个控件将会从右边开始,第二个控件就在第一个控件的左边,相当于做了左右反转:

        <LinearLayout
            app:layout_constraintBottom_toBottomOf="parent"
            android:layout_width="match_parent"
            android:orientation="horizontal"
            android:layoutDirection="rtl"
            android:layout_height="wrap_content">
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="fuck button a"/>
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="fuck button b"/>
        </LinearLayout>
    
    
    image

    这个时候我们准备加上间距,你会怎么做了?有时候我们会这样做:

    image

    注意:这个时候如果你想从左到右,不想从右到左,怎么办?修改下android:layoutDirection="rtl" -> android:layoutDirection="ltr"试试 :

    image

    那么你肯定就去把button a的marginRight->marginLeft,也是可以的。这个时候我们不妨想想start,从字面意思理解就是从起点开始: 假使你的起点是从左开始,那我们就距离左边多远就行了嘛,同理从右边开始,那控件就距离右边控件多远就可以了塞!

    来来来:

    image

    想左就左,想右就右,不管怎样,算是找到了一种解释start好处的例子。至于别的专门的这种深入,后期专门去分析具体的点。

    到这里我们就把margin简单过一下下,然后去继续注解反射部分(这段时间不是很忙,就同时两个方向去研究下吧,顺便可以换换思维方式);

    (昨天的下一天)忘记了说下AS的Layout的Design里面怎么简单去设置布局,以及简单看下设置之后是怎样的效果:

    首先打开Design界面可以看到控件列表栏,下面是容器树形结构

    image

    1.我们随意拖动一个按钮过去,你点击下按钮,上下左右可以看到四个圆圈

    image

    2.此时你先拖动右边圆圈到界面右侧,然后拖动底部圆圈到底部,此时底部和右侧便与界面产生了布局相对位置和间距的效果,不妨看下生成的布局代码:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".Main2Activity"
        tools:layout_editor_absoluteY="81dp">
    
        <Button
            android:id="@+id/button"
            android:layout_width="84dp"
            android:layout_height="48dp"
            android:layout_marginBottom="28dp"
            android:layout_marginEnd="44dp"
            android:text="Button"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent" />
    
    </android.support.constraint.ConstraintLayout>
    

    3.默认使用的就是约束布局,其中右侧间距采用的是end,而不是right,也验证了之前说的,就是google推荐使用的是start、end这样的方式(再补充一点,系统如果切换为阿拉伯语,Android会自动将某些布局以从右向左的方式渲染,具体是全部还是哪些?这个后面我觉得可以去尝试研究一下)。

    This page End. 貌似Design做布局也蛮方便的,不过个人还是建议自己写代码,还便于加强记忆!

    相关文章

      网友评论

        本文标题:Android-ConstraintLayout(约束布局)-m

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