Android知识进阶(遥远的重头开始)随笔-生活工作点滴

Android-ConstraintLayout(约束布局)-m

2019-07-10  本文已影响0人  MonkeyLei

关于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用法更通用一些,除了和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做布局也蛮方便的,不过个人还是建议自己写代码,还便于加强记忆!

上一篇下一篇

猜你喜欢

热点阅读