“我报名参加金石方案1期挑战——瓜分10万奖池,这是我的第2篇文章,点击检查活动详情”

关于作者

众所周知,人生是一个绵长的流程,不断克服困难,不断反思行进的进程。在这个进程中会发生许多对于人生的质疑和考虑,所以我决议将自己的考虑,经验和故事全部共享出来,以此寻觅共鸣!!!

专心于Android/Unity和各种游戏开发技巧,以及各种资源共享(网站、东西、资料、源码、游戏等)

欢迎重视公众号【空名先生】获取更多资源和沟通

前提

这是小空坚持写的Android新手向系列,欢迎品味。

新手(√√√)

大佬(√)

实践进程

代码修改束缚

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 android:id="@+id/idConstraintLayout"
 android:layout_width="match_parent"
 android:layout_height="match_parent">

 <TextView
 android:id="@+id/idTxt"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:background="@color/color_00ff00"
 android:padding="10dp"
 android:text="芝麻粒儿"
 app:layout_constraintBottom_toBottomOf="parent"
 app:layout_constraintStart_toStartOf="parent" />

 <Button
 android:id="@+id/idBtn"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="改变"
 app:layout_constraintBottom_toBottomOf="parent"
 app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
public class ActivityJavaConstraintLayout extends AppCompatActivity {
 @Override
 protected void onCreate(@Nullable Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_java_constraint);
 ConstraintLayout idConstraintLayout = findViewById(R.id.idConstraintLayout);
 findViewById(R.id.idBtn).setOnClickListener(v -> {
 ConstraintSet constraintSet = new ConstraintSet();
 constraintSet.clone(idConstraintLayout);
 //设置相对父布局剧中
 constraintSet.centerHorizontally(R.id.idTxt, ConstraintSet.PARENT_ID);
 constraintSet.centerVertically(R.id.idTxt, ConstraintSet.PARENT_ID);
 //能够添加动画
 TransitionManager.beginDelayedTransition(idConstraintLayout);
 constraintSet.applyTo(idConstraintLayout);
 });
 //还有其他方法 控件A底部和空间B顶部对其 等同于xml中特点 app:layout_constraintBottom_toTopOf
// constraintSet.connect(R.id.idTxtA, ConstraintSet.BOTTOM, R.id.idTxtB, ConstraintSet.TOP);
 }
}

Android修行手册 - ConstraintLayout代码修改约束以及辅助功能

除了上面的效果,我们还能完结切换布局的时分,相同控件动画化。我们准备两个布局,布局内id共同,可是方位不同。

布局A如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 android:id="@+id/idConstraintLayout"
 android:layout_width="match_parent"
 android:layout_height="match_parent">
 <TextView
 android:id="@+id/idTxt"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:background="@color/color_00ff00"
 android:padding="10dp"
 android:text="芝麻粒儿"
 app:layout_constraintBottom_toBottomOf="parent"
 app:layout_constraintStart_toStartOf="parent" />

 <Button
 android:id="@+id/idBtn"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="改变"
 app:layout_constraintBottom_toBottomOf="parent"
 app:layout_constraintEnd_toEndOf="parent" />
 <Button
 android:id="@+id/idBtnBack"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="回去"
 app:layout_constraintBottom_toBottomOf="parent"
 app:layout_constraintStart_toStartOf="parent"
 app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

布局B如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 android:id="@+id/idConstraintLayout"
 android:layout_width="match_parent"
 android:layout_height="match_parent">

 <TextView
 android:id="@+id/idTxt"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:background="@color/color_00ff00"
 android:padding="10dp"
 android:text="芝麻粒儿"
 app:layout_constraintTop_toTopOf="parent"
 app:layout_constraintEnd_toEndOf="parent" />

 <Button
 android:id="@+id/idBtn"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="改变"
 app:layout_constraintTop_toTopOf="parent"
 app:layout_constraintStart_toStartOf="parent" />
 <Button
 android:id="@+id/idBtnBack"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="回去"
 app:layout_constraintTop_toTopOf="parent"
 app:layout_constraintBottom_toBottomOf="parent"
 app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
public class ActivityJavaConstraintLayout extends AppCompatActivity {
 @Override
 protected void onCreate(@Nullable Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_java_constraint);
 ConstraintLayout idConstraintLayout = findViewById(R.id.idConstraintLayout);
 //改变
 findViewById(R.id.idBtn).setOnClickListener(v ->{
 ConstraintSet constraintSet = new ConstraintSet();
 constraintSet.clone(this,R.layout.activity_java_constraint_b);
 TransitionManager.beginDelayedTransition(idConstraintLayout);
 constraintSet.applyTo(idConstraintLayout);
 });
 //康复
 findViewById(R.id.idBtnBack).setOnClickListener(v->{
 ConstraintSet constraintSet = new ConstraintSet();
 constraintSet.clone(this,R.layout.activity_java_constraint);
 TransitionManager.beginDelayedTransition(idConstraintLayout);
 constraintSet.applyTo(idConstraintLayout);
 });
 }
}

Android修行手册 - ConstraintLayout代码修改约束以及辅助功能

辅佐功用

Guideline

表明辅佐线,需求运用单独的不是你实践布局的View控件来做,因为是辅佐东西,所以真实运行的时分不会制作,仅在你写布局的时分协助你制作,辅佐你完结布局,有三个相关特点:

app:layout_constraintGuide_percent=“0.5” 在父布局的百分比方位。

app:layout_constraintGuide_begin=“10dp” 间隔父布局开始方位,横向为左,纵向为顶部。

app:layout_constraintGuide_end=“10dp” 间隔父布局末尾方位。

需求和android:orientation结合运用,vertical是纵辅佐线,horizontal是横向辅佐线。

Android修行手册 - ConstraintLayout代码修改约束以及辅助功能

Barrier

涵义屏障,比方我们有几个不固定宽度或高度的控件,而有一个控件想一直在这几个中的最长的那个控件边缘对其,依照以前我们是将这几个控件包裹嵌套一层来完结。可是ConstraintLayout能够运用Barrier辅佐东西完结。要点有两个特点app:barrierDirection表明屏障在方针控件的哪个方向,app:constraint_referenced_ids指定方针控件,注意多个逗号离隔。

<TextView
 android:id="@+id/idTxt1"
...
/>
<TextView
 android:id="@+id/idTxt2"
 app:layout_constraintTop_toBottomOf="@+id/idTxt1"
...
/>
<androidx.constraintlayout.widget.Barrier
 android:id="@+id/idBarrier"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 app:barrierDirection="right"
 app:constraint_referenced_ids="idTxt1,idTxt2" />
<TextView
 android:id="@+id/idTxt3"
 app:layout_constraintLeft_toRightOf="@id/idBarrier"
...
/>

Flow

这是网格布局,不详细介绍了,就说一下特点吧。

  • app:flow_wrapMode=”aligned”:有3个值:aligned-肯定对齐(和网格对齐类似);none-默许方法,成为一排,宽度不行,从两边出去;chain-和肯定对齐有点收支的是,比方6个元素,第一排4个,第二排是2个,这2个元素会平分横屏宽度
  • app:flow_verticalGap和app:flow_horizontalGap:表明竖直距离或横向距离
  • android:orientation=”horizontal”:水平方向的流式还是竖直方向的流式
  • app:flow_maxElementsWrap=””:表明一行几个元素
  • app:flow_verticalAlign=”top”:有四个值:top,bottom,center,baseline。每一行元素的对齐方法
  • app:flow_horizontalBias=”float”:low的bias偏移,只在style为packed时收效
  • app:flow_horizontalStyle=”spread|spread_inside|packed”:当wrapMode为chain或ALIGNED时收效

Placeholder

这节其实算是和小要点,感兴趣的自己去查找吧,主要作用是占位功用,占位之后其他控件能够经过setContentId移动到该方位。

Group和Layer

能很好的操控多个控件的显示和隐藏。app:constraint_referenced_ids指定方针控件的id,多个逗号离隔。

<androidx.constraintlayout.widget.Group
 android:id="@+id/idGroup"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:visibility="visible"
    app:constraint_referenced_ids="idTxt,idBtn" />

Layer不仅能完结Group的隐藏,还能修改背景,运用方法和Group共同。

其他

作者:小空和小芝中的小空

转载说明-务必注明来源:芝麻粒儿 的个人主页 – 专栏 – ()

这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气,日后定有一番大作为!!!周围有点赞保藏今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。