1.简介

约束布局ConstraintLayout 是一个ViewGroup,可以在Api9以上的Android系统使用它,它的出现主要是为了解决布局嵌套过多的问题,以灵活的方式定位和调整小部件。从 Android Studio 2.3 起,官方的模板默认使用 ConstraintLayout。

ConstraintLayout 官方文档

2.为什么要用ConstraintLayout

在开发过程中经常能遇到一些复杂的UI,可能会出现布局嵌套过多的问题,嵌套得越多,设备绘制视图所需的时间和计算功耗也就越多。简单举个例子:

在这里插入图片描述

假设现在要写一个这样的布局,可能有人会这么写:
首先是一个垂直的LinearLayout,里面放两个水平的LinearLayout,然后在水平的LinearLayout里面放TextView。这样的写法就嵌套了两层LinearLayout。
在这里插入图片描述

有些人考虑到了嵌套布局带来的风险,所以用一个RelativeLayout来装下所有的控件。那么问题来了,既然用RelativeLayout可以解决问题,为什么还要使用ConstraintLayout呢?因为ConstraintLayout使用起来比RelativeLayout更灵活,性能更出色!解析ConstraintLayout的性能优势
还有一点就是ConstraintLayout可以按照比例约束控件位置和尺寸,能够更好地适配屏幕大小不同的机型。

3.如何使用ConstraintLayout

3.1 添加依赖

首先我们需要在app/build.gradle文件中添加ConstraintLayout的依赖,如下所示。

implementation “androidx.constraintlayout:constraintlayout:2.0.1

3.2 相对定位

相对定位是部件对于另一个位置的约束,这么说可能有点抽象,举个例子:
在这里插入图片描述
如图所示,TextView2在TextView1的右边,TextView3在TextView1的下面,这个时候在布局文件里面应该这样写:

<TextViewandroid:id="@+id/TextView1"...android:text="TextView1" /><TextViewandroid:id="@+id/TextView2"...app:layout_constraintLeft_toRightOf="@+id/TextView1" /><TextViewandroid:id="@+id/TextView3"...app:layout_constraintTop_toBottomOf="@+id/TextView1" />

上面代码中在TextView2里用到了app:layout_constraintLeft_toRightOf="@+id/TextView1"这个属性,他的意思是把TextView2的左边约束到TextView1的右边,如下图所示:
在这里插入图片描述
同理TextView3在TextView1的下面,就需要用到app:layout_constraintTop_toBottomOf="@+id/TextView1",即把TextView3的上面约束到TextView1的下面。

下面来看看相对定位的常用属性:

layout_constraintLeft_toLeftOf
layout_constraintLeft_toRightOf
layout_constraintRight_toLeftOf
layout_constraintRight_toRightOf
layout_constraintTop_toTopOf
layout_constraintTop_toBottomOf
layout_constraintBottom_toTopOf
layout_constraintBottom_toBottomOf
layout_constraintBaseline_toBaselineOf
layout_constraintStart_toEndOf
layout_constraintStart_toStartOf
layout_constraintEnd_toStartOf
layout_constraintEnd_toEndOf

上面属性中有一个比较有趣的layout_constraintBaseline_toBaselineOf
Baseline指的是文本基线,举个例子:
在这里插入图片描述
如图所示,两个TextView的高度不一致,但是又希望他们文本对齐,这个时候就可以使用layout_constraintBaseline_toBaselineOf,代码如下:

<TextViewandroid:id="@+id/TextView1".../><TextViewandroid:id="@+id/TextView2"...app:layout_constraintLeft_toRightOf="@+id/TextView1" app:layout_constraintBaseline_toBaselineOf="@+id/TextView1"/>

效果如下:
在这里插入图片描述
ConstraintLayout相对定位的用法跟RelativeLayout还是比较相似的,下面用一个图来总结相对定位:
在这里插入图片描述

3.3 角度定位

layout_constraintCircle : 圆心,值是某个view的id
layout_constraintCircleRadius : 半径
layout_constraintCircleAngle :角度,值是从0-360,0是指整上方

角度定位指的是可以用一个角度和一个距离来约束两个空间的中心。举个例子:

<TextViewandroid:id="@+id/TextView1"android:layout_width="wrap_content"android:layout_height="wrap_content" /><TextViewandroid:id="@+id/TextView2"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintCircle="@+id/TextView1"app:layout_constraintCircleAngle="120"app:layout_constraintCircleRadius="150dp" />

上面例子中的TextView2用到了3个属性:

app:layout_constraintCircle="@+id/TextView1"
app:layout_constraintCircleAngle="120"(角度)
app:layout_constraintCircleRadius="150dp"(距离)

指的是TextView2的中心在TextView1的中心的120度,距离为150dp,效果如下:

在这里插入图片描述
在这里插入图片描述
妙用ConstraintLayout的Circular positioning

3.4 边距

  • 3.4.1 常用margin
    ConstraintLayout的边距常用属性如下:
android:layout_marginStart
android:layout_marginEnd
android:layout_marginLeft
android:layout_marginTop
android:layout_marginRight
android:layout_marginBottom

看起来跟别的布局没有什么差别,但实际上控件在ConstraintLayout里面要实现margin,必须先约束该控件在ConstraintLayout里的位置,举个例子:

<android.support.constraint.ConstraintLayout android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/TextView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:layout_marginTop="10dp" /></android.support.constraint.ConstraintLayout>

如果在别的布局里,TextView1的位置应该是距离边框的左边和上面有一个10dp的边距,但是在ConstraintLayout里,是不生效的,因为没有约束TextView1在布局里的位置。正确的写法如下:

<android.support.constraint.ConstraintLayout android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/TextView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:layout_marginTop="10dp" app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toTopOf="parent"/></android.support.constraint.ConstraintLayout>

把TextView1的左边和上边约束到parent的左边和上边,这样margin就会生效,效果如下:
在这里插入图片描述
在使用margin的时候要注意两点
1、控件必须在布局里约束一个相对位置
2、margin只能大于等于0

  • 3.4.2 goneMargin

goneMargin主要用于约束的控件可见性被设置为gone的时候使用的margin值,属性如下:
layout_goneMarginStart
layout_goneMarginEnd
layout_goneMarginLeft
layout_goneMarginTop
layout_goneMarginRight
layout_goneMarginBottom

举个例子:
假设TextView2的左边约束在TextView1的右边,并给TextView2设一个app:layout_goneMarginLeft=“10dp”,代码如下:

<android.support.constraint.ConstraintLayout android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/TextView1".../><TextViewandroid:id="@+id/TextView2"...app:layout_constraintLeft_toRightOf="@+id/TextView1"app:layout_goneMarginLeft="10dp"/></android.support.constraint.ConstraintLayout>

效果如下,TextView2在TextView1的右边,且没有边距。
在这里插入图片描述
这个时候把TextView1的可见性设为gone,效果如下:
在这里插入图片描述
TextView1消失后,TextView2有一个距离左边10dp的边距。

3.5 居中和偏移

在RelativeLayout中,把控件放在布局中间的方法是把layout_centerInParent设为true,而在ConstraintLayout中的写法是:

app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"

意思是把控件的上下左右约束在布局的上下左右,这样就能把控件放在布局的中间了。同理RelativeLayout中的水平居中layout_centerHorizontal相当于在ConstraintLayout约束控件的左右为parent的左右;RelativeLayout中的垂直居中layout_centerVertical相当于在ConstraintLayout约束控件的上下为parent的上下。
由于ConstraintLayout中的居中已经为控件约束了一个相对位置,所以可以使用margin,如下所示:

<TextViewandroid:id="@+id/TextView1"...android:layout_marginLeft="100dp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent" />

效果如下:
在这里插入图片描述
上面TextView1在水平居中后使用layout_marginLeft="100dp"向右偏移了100dp。除了这种偏移外,ConstraintLayout还提供了另外一种偏移的属性:
layout_constraintHorizontal_bias 水平偏移
layout_constraintVertical_bias 垂直偏移

举个例子:

<TextViewandroid:id="@+id/TextView1"...app:layout_constraintHorizontal_bias="0.3"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent" />

效果如下:
在这里插入图片描述
假如现在要实现水平偏移,给TextView1的layout_constraintHorizontal_bias赋一个范围为 0-1 的值,假如赋值为0,则TextView1在布局的最左侧,假如赋值为1,则TextView1在布局的最右侧,假如假如赋值为0.5,则水平居中,假如假如赋值为0.3,则更倾向于左侧。
垂直偏移同理。

3.6 尺寸约束

控件的尺寸可以通过四种不同方式指定:

  • 使用指定的尺寸
  • 使用wrap_content,让控件自己计算大小
    当控件的高度或宽度为wrap_content时,可以使用下列属性来控制最大、最小的高度或宽度:
    android:minWidth 最小的宽度
    android:minHeight 最小的高度
    android:maxWidth 最大的宽度
    android:maxHeight 最大的高度
    注意!当ConstraintLayout为1.1版本以下时,使用这些属性需要加上强制约束,如下所示:
    app:constrainedWidth=”true”
    app:constrainedHeight=”true”
  • 使用 0dp (MATCH_CONSTRAINT)
    官方不推荐在ConstraintLayout中使用match_parent,可以设置 0dp (MATCH_CONSTRAINT) 配合约束代替match_parent,举个例子:
<TextViewandroid:id="@+id/TextView1"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginLeft="50dp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"android:visibility="visible" />

宽度设为0dp,左右两边约束parent的左右两边,并设置左边边距为50dp,效果如下:
在这里插入图片描述
0dp在constraint可不是指大小是0dp,而是有特殊含义的。他的作用会随着不同的设置有不同的含义:

1、layout_constraintWidth_default
layout_constraintWidth_default有三个取值,作用如下:

(1)spread,默认值,意思是占用所有的符合约束的空间
在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout ...><Buttonandroid:id="@+id/a"android:layout_width="0dp"...android:layout_marginLeft="20dp"android:layout_marginRight="20dp"app:layout_constraintWidth_default="spread"app:layout_constraintRight_toRightOf="parent"app:layout_constraintLeft_toLeftOf="parent"/></android.support.constraint.ConstraintLayout>

可以看到layout_width为0dp,实际的效果则是宽度和约束一样,左右两边的留白是margin的效果。

(2)percent,意思是按照父布局的百分比设置,需要layout_constraintWidth_percent设置百分比例
在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout ><android.support.constraint.ConstraintLayoutandroid:layout_width="300dp"android:layout_height="400dp"app:layout_constraintHorizontal_bias="0.3"><Buttonandroid:id="@+id/a"android:layout_width="0dp"...app:layout_constraintRight_toRightOf="parent"app:layout_constraintWidth_default="percent"app:layout_constraintWidth_percent="0.4" /></android.support.constraint.ConstraintLayout></android.support.constraint.ConstraintLayout>

A的宽度设为0.4,则其宽度为父布局的0.4倍。另外,设置了layout_constraintWidth_percent属性,可以不用指定layout_constraintWidth_default,他会自动设置为percent

(3)wrap,意思匹配内容大小但不超过约束限制,注意和直接指定宽度为wrap_content的区别就是不超过约束限制,如下:
在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout ...><Buttonandroid:id="@+id/a"...app:layout_constraintLeft_toLeftOf="parent" /><Buttonandroid:id="@+id/c"...app:layout_constraintRight_toRightOf="parent" /><Buttonandroid:id="@+id/b"android:layout_width="0dp"...app:layout_constraintWidth_default="wrap"app:layout_constraintLeft_toRightOf="@id/a"app:layout_constraintRight_toLeftOf="@id/c"/><Buttonandroid:id="@+id/d"android:layout_width="wrap_content"...app:layout_constraintTop_toBottomOf="@id/b"app:layout_constraintLeft_toRightOf="@id/a"app:layout_constraintRight_toLeftOf="@id/c"/></android.support.constraint.ConstraintLayout>

可以看到虽然文字很长,但第一行的绿色button宽度达到约束时,就不在增加,而第二行的button显示了完整的内容,超过约束的限制。
在1.1上 对于wrap_content会超过约束限制,谷歌又新增了如下属性

app:layout_constrainedWidth=”true|false”
app:layout_constrainedHeight=”true|false”

设置为true也可以限制内容不超过约束(这样感觉layout_constraintWidth_default这个属性已经没什么用了)

  • 宽高比
    当宽或高至少有一个尺寸被设置为0dp时,可以通过属性layout_constraintDimensionRatio设置宽高比,举个例子:
<TextViewandroid:id="@+id/TextView1"android:layout_width="0dp"android:layout_height="wrap_content"app:layout_constraintDimensionRatio="1:1"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent" />

宽设置为0dp,宽高比设置为1:1,这个时候TextView1是一个正方形,效果如下:
在这里插入图片描述
除此之外,在设置宽高比的值的时候,还可以在前面加W或H,分别指定宽度或高度限制。 例如:
app:layout_constraintDimensionRatio="H,2:3"指的是 高:宽=2:3
app:layout_constraintDimensionRatio="W,2:3"指的是 宽:高=2:3

(1)如果只有一项为0dp,则该项值按照比例计算出来。比如高为20dp,宽为0dp,radio为"2:1",则最终宽为40dp
(2)如果两项都为0dp,则尺寸会设置为满足约束的最大值并保持比例。因为这是系统计算的,有的时候不是我们想要的,我们也可以通过在前面加H、W来指定是哪一个边需要计算。例如"H,2:1",则是指宽度匹配约束,高度是宽度的1/2

  • max min

有如下属性可以设置其的最大最小值,含义如字面值一样:

layout_constraintWidth_min
layout_constraintWidth_max
layout_constraintHeight_max
layout_constraintHeight_min

3.7 链

如果两个或以上控件通过下图的方式约束在一起,就可以认为是他们是一条链(图为横向的链,纵向同理)。
在这里插入图片描述
在这里插入图片描述

用代码表示:

<TextViewandroid:id="@+id/TextView1"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toLeftOf="@+id/TextView2" /><TextViewandroid:id="@+id/TextView2"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintLeft_toRightOf="@+id/TextView1"app:layout_constraintRight_toLeftOf="@+id/TextView3" /><TextViewandroid:id="@+id/TextView3"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintLeft_toRightOf="@+id/TextView2"app:layout_constraintRight_toRightOf="parent" />

3个TextView相互约束,两端两个TextView分别与parent约束,成为一条链,效果如下:
在这里插入图片描述
一条链的第一个控件是这条链的链头,我们可以在链头中设置 layout_constraintHorizontal_chainStyle来改变整条链的样式。chains提供了3种样式,分别是:
CHAIN_SPREAD —— 展开元素 (默认);
CHAIN_SPREAD_INSIDE —— 展开元素,但链的两端贴近parent;
CHAIN_PACKED —— 链的元素将被打包在一起。
如图所示:
在这里插入图片描述
在这里插入图片描述

上面的例子创建了一个样式链,除了样式链外,还可以创建一个权重链。
可以留意到上面所用到的3个TextView宽度都为wrap_content,如果我们把宽度都设为0dp,这个时候可以在每个TextView中设置横向权重**layout_constraintHorizontal_weight(constraintVertical为纵向)**来创建一个权重链,如下所示:

 <TextViewandroid:id="@+id/TextView1"android:layout_width="0dp"android:layout_height="wrap_content"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toLeftOf="@+id/TextView2"app:layout_constraintHorizontal_weight="2" /><TextViewandroid:id="@+id/TextView2"android:layout_width="0dp"android:layout_height="wrap_content"app:layout_constraintLeft_toRightOf="@+id/TextView1"app:layout_constraintRight_toLeftOf="@+id/TextView3"app:layout_constraintHorizontal_weight="3" /><TextViewandroid:id="@+id/TextView3"android:layout_width="0dp"android:layout_height="wrap_content"app:layout_constraintLeft_toRightOf="@+id/TextView2"app:layout_constraintRight_toRightOf="parent"app:layout_constraintHorizontal_weight="4" />

效果如下:
在这里插入图片描述
可以看出,链与LinearLayout效果大致一样。和LinearLayout一样,链也可以使用layout_constraintHorizontal_weight,来分割剩余空间。但又和 android:layout_weight不太一样,不一样的地方如下:

  • layout_weight ,不管当前view的大小设的是多大,都会继续占据剩余空间
  • layout_constraintHorizontal_weight,这个只对0dp并且layout_constraintWidth_default为spread的view生效,使其大小按比例分割剩余空间,对于已经设定大小的view不生效

如下面的示例:
在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout ...><LinearLayout...android:orientation="horizontal"><Buttonandroid:layout_width="10dp"android:layout_height="50dp"android:layout_weight="1"... /><Buttonandroid:layout_width="wrap_content"android:layout_height="50dp"android:layout_weight="1"... /><Buttonandroid:layout_width="0dp"android:layout_height="50dp"android:layout_weight="1"... /></LinearLayout><android.support.constraint.ConstraintLayout....><Buttonandroid:id="@+id/a"android:layout_width="10dp"android:layout_height="50dp"....app:layout_constraintHorizontal_weight="1"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toLeftOf="@id/b" /><Buttonandroid:id="@+id/b"android:layout_width="wrap_content"android:layout_height="50dp"....app:layout_constraintHorizontal_weight="1"app:layout_constraintLeft_toRightOf="@id/a"app:layout_constraintRight_toLeftOf="@id/c" /><Buttonandroid:id="@+id/c"android:layout_width="0dp"android:layout_height="50dp"...app:layout_constraintHorizontal_weight="1"app:layout_constraintLeft_toRightOf="@id/b"app:layout_constraintRight_toRightOf="parent" />/></android.support.constraint.ConstraintLayout></LinearLayout>

可以看出,LinearLayout和ConstraintLayout虽然三个子view的layout_width值是一样的,weight也都设置了1,但效果完全不一样

4.辅助工具

4.1 Optimizer

当我们使用 MATCH_CONSTRAINT 时,ConstraintLayout 将对控件进行 2 次测量,ConstraintLayout在1.1中可以通过设置 layout_optimizationLevel 进行优化,可设置的值有:
none:无优化
standard:仅优化直接约束和屏障约束(默认)
direct:优化直接约束
barrier:优化屏障约束
chain:优化链约束
dimensions:优化尺寸测量

4.2 Barrier

屏障,一个虚拟View。他主要解决下面遇到的问题:
在这里插入图片描述
如上图布局,两个TextView,一个button位于他们的右边。现在button设置的是在下面TextView的右边。假设有时候上面的TextView文本变长了,则布局会变为下面这个样子:
在这里插入图片描述
上面的TextView和Button重叠了。这时该怎么解决这个问题呢?Button只能设置一个View作为锚点,设置了上面就顾不了下面了。
所以就诞生了Barrier,他可以设置N个View作为锚点,使用方式如下:

<android.support.constraint.Barrierandroid:id="@+id/barrier"android:layout_width="wrap_content"android:layout_height="wrap_content"app:barrierDirection="end"//end,left,right,top,bottomapp:constraint_referenced_ids="text1,text2" />

则Barrier始终位于text1,text2两个View最大宽度的右边,示意图如下:
在这里插入图片描述
这里基本的用法就讲完了。
下面再考虑一个情况,假如有如下的布局:

在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout ...><Buttonandroid:id="@+id/a"...android:layout_marginTop="20dp"/><Buttonandroid:id="@+id/b"...android:layout_marginTop="40dp"/><android.support.constraint.Barrierandroid:id="@+id/barrier"...app:barrierDirection="top"app:constraint_referenced_ids="a,b" /><Buttonandroid:id="@+id/c"...app:layout_constraintTop_toTopOf="@+id/barrier" />
</android.support.constraint.ConstraintLayout>

目前Button C和Button a、b的最上值对齐,没有问题。但如果a Gone了呢?效果如下:
在这里插入图片描述
其实也是符合逻辑,a gone后,会变为一个点,所以C顶齐父布局也没问题。但有的时候这不符合我们的需求,我们希望Barrier不要关注Gone的View了,所以谷歌提供了属性barrierAllowsGoneWidgets,设为false后,就不在关注Gone的View了,效果如下:
在这里插入图片描述

在这里插入图片描述
假设有3个控件ABC,C在AB的右边,但是AB的宽是不固定的,这个时候C无论约束在A的右边或者B的右边都不对。当出现这种情况可以用Barrier来解决。Barrier可以在多个控件的一侧建立一个屏障,如下所示:
在这里插入图片描述
这个时候C只要约束在Barrier的右边就可以了,代码如下:

<TextViewandroid:id="@+id/TextView1"android:layout_width="wrap_content"android:layout_height="wrap_content" /><TextViewandroid:id="@+id/TextView2"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintTop_toBottomOf="@+id/TextView1" /><android.support.constraint.Barrierandroid:id="@+id/barrier"android:layout_width="wrap_content"android:layout_height="wrap_content"app:barrierDirection="right"app:constraint_referenced_ids="TextView1,TextView2" /><TextViewandroid:id="@+id/TextView3"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintLeft_toRightOf="@+id/barrier" />

app:barrierDirection为屏障所在的位置,可设置的值有:bottom、end、left、right、start、top
app:constraint_referenced_ids为屏障引用的控件,可设置多个(用“,”隔开)

4.3 Group

Group可以把多个控件归为一组,方便隐藏或显示一组控件,举个例子:

<TextViewandroid:id="@+id/TextView1"android:layout_width="wrap_content"android:layout_height="wrap_content" /><TextViewandroid:id="@+id/TextView2"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintLeft_toRightOf="@+id/TextView1" /><TextViewandroid:id="@+id/TextView3"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintLeft_toRightOf="@id/TextView2" />

在这里插入图片描述
现在有3个并排的TextView,用Group把TextView1和TextView3归为一组,再设置这组控件的可见性,如下所示:

   <android.support.constraint.Groupandroid:id="@+id/group"android:layout_width="wrap_content"android:layout_height="wrap_content"android:visibility="invisible"app:constraint_referenced_ids="TextView1,TextView3" />

效果如下:
在这里插入图片描述
Group有一些注意事项

  • xml中,可见性配置的优先级:Group优先于View,下层Group优先于上层。
  • Group只可以引用当前ConstraintLayout下的View,子Layout 下的View不可以。
  • app:constraint_referenced_ids里直接写的是id的字符串,初始化后会通过getIdentifier来反射查找叫该名字的id。所以如果你的项目用了类似AndResGuard的混淆id名字的功能,切记不要混淆app:constraint_referenced_ids里的id,否则在release版本就会因找不到该id而失效。或者也可以通过代码setReferencedIds来设置id。

4.4 Placeholder

Placeholder指的是占位符。在Placeholder中可使用setContent()设置另一个控件的id,使这个控件移动到占位符的位置。举个例子:

<android.support.constraint.Placeholderandroid:id="@+id/placeholder"android:layout_width="wrap_content"android:layout_height="wrap_content"app:content="@+id/textview"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/textview"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="#cccccc"android:padding="16dp"android:text="TextView"android:textColor="#000000"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" />

新建一个Placeholder约束在屏幕的左上角,新建一个TextView约束在屏幕的右上角,在Placeholder中设置 app:content="@+id/textview",这时TextView会跑到屏幕的左上角。效果如下:
在这里插入图片描述

大概总结可以认为,Placeholder的大小设置并没有生效,Placeholder引用A后的效果是,原本位置的A gone,原本位置的Placeholder变为Placeholder的约束属性(不包含宽高)+A的内容属性(包含宽高)。另外,Placeholder也支持使用代码setContentId动态的修改设置内容。

4.5 Guideline

Guildline像辅助线一样,在预览的时候帮助你完成布局(不会显示在界面上)。
Guildline的主要属性:

android:orientation 垂直vertical,水平horizontal
layout_constraintGuide_begin 开始位置 距离父布局的左边或者上边多大距离
layout_constraintGuide_end 结束位置 距离父布局的右边或者下边多大距离
layout_constraintGuide_percent 百分比,0~1,距离父布局的左边或者上边占父布局的比例 (如orientation = horizontal时则为距离左边)

举个例子:

<android.support.constraint.Guidelineandroid:id="@+id/guideline1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_begin="50dp" /><android.support.constraint.Guidelineandroid:id="@+id/guideline2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintGuide_percent="0.5" />

guideline1为水平辅助线,开始位置是距离顶部50dp,guideline2位垂直辅助线,开始位置为屏幕宽的0.5(中点位置),效果如下:
在这里插入图片描述

Flow

Flow 是一种新的虚拟布局,它专门用来构建链式排版效果,当出现空间不足的情况时,它能够自动换行,甚至是自动延展到屏幕的另一区域。当您需要对多个元素进行链式布局,但不确定在运行时布局空间的实际大小是多少,那么 Flow 对您来说就非常有用。您可以使用 Flow 来实现让布局随着应用屏幕尺寸的变化 (比如设备发生旋转后出现的屏幕宽度变化) 而动态地进行自适应。
在这里插入图片描述
图片 : 该动画展示了 Flow 创建多个链将布局元素充裕地填充一整行

Flow 是一种虚拟布局。在 Constraint Layout 中,虚拟布局 (Virtual layouts) 作为 virtual view group 的角色参与约束和布局中,但是它们并不会作为视图添加到视图层级结构中,而是仅仅引用其它视图来辅助它们在布局系统中完成各自的布局功能。
在这里插入图片描述
图片 : flow 三种模式 &quot;none&quot;, &quot;chain&quot; 和 &quot;align&quot; 的可视化效果

在 Constraint Layout 2.0 中,您可以用 Flow 标签来使用这一功能。Flow 会通过您传递的 constraint_referenced_ids 参数来获取到要引用的所有视图,然后根据这些视图创建一个虚拟的 virtual view group,再对这些视图进行链式布局。

<androidx.constraintlayout.helper.widget.Flowandroid:layout_width="0dp"android:layout_height="wrap_content"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintTop_toTopOf="parent"app:flow_wrapMode="chain"app:constraint_referenced_ids="card1, card2, card3"/>

在 Constraint Layout 中使用 Flow 的用例

Flow 中最重要的一个配置选项是 wrapMode,它可以决定在内容溢出 (或出现换行) 时的布局行为。

您可以对 wrapMode 指定三种模式:

  • none – 所有引用的视图以一条链的方式进行布局,如果内容溢出则溢出内容不可见;
  • chain – 当出现溢出时,溢出的内容会自动换行,以新的一条链的方式进行布局;
  • align – 同 chain 类似,但是不以行而是以列的方式进行布局。
    若您想要了解更多有关 Flow 的内容,请查阅 官方文档。

Layer

Layer 作为一种新的辅助工具,可以让您在多个视图上创建一个虚拟的图层 (layer)。同 Flow 不同,它并不会对视图进行布局,而是对多个视图同时进行变换 (transformation) 操作。

如果您想对多个视图整体进行旋转 (rotate)、平移 (translate) 或缩放 (scale) 操作,那么 Layer 将会是最佳的选择。
在这里插入图片描述
图片 : 使用 Layer 对多个视图同时进行变换操作

图层 (layer) 在布局期间会调整大小,其大小会根据其引用的所有视图进行调整。

您可以使用 Layer 标签在 Constraint Layout 2.0 中增加一个图层 (layer)。

<androidx.constraintlayout.helper.widget.Layerandroid:layout_width="wrap_content"android:layout_height="wrap_content"app:constraint_referenced_ids="card1, card2, card3"/>

在 Constraint Layout 中使用 Layer 的示例

参考文章

约束布局ConstraintLayout看这一篇就够了
ConstraintLayout 用法全解析
Android新特性介绍,ConstraintLayout完全解析
ConstraintLayout 完全解析 快来优化你的布局吧
Constraint Layout 2.0 用法详解

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 我用Python训练了一个拳皇模型,从此在各地游戏厅再也没输过

    从世界瞩目的围棋游戏 AlphaGo。 突然袭来的回忆杀~ 今天为大家介绍一个在街机游戏《街头霸王 3》中进行模拟来训练改进强化学习算法的工具包。不仅在 MAME 游戏模拟器中可以使用&#xff0c;这个 Python 库可以在绝大多数的街机游戏中都可以训练你的算法。 下面营长就从安装、…...

    2024/4/16 9:17:20
  2. springboot配置阿里云日志服务与log4j2 lookup

    阿里云日志服务与log4j lookup配置springboot阿里云日志服务配置application.yml配置log4j2.xml配置springboot启动程序阿里云日志服务 文档&#xff1a;https://help.aliyun.com/product/28958.html 材料准备&#xff1a;project、logstore、accessKeyId、accessKeySecret、…...

    2024/4/15 6:44:12
  3. DeepStream6.0系列之filesink保存文件

    点击查看系列文章目录 0 背景 在做 deepstream 功能测试时&#xff0c;常常需要将结果保存为 mp4 视频文件&#xff0c;而 sdk 中并未直接提供相关代码&#xff0c;不熟悉功能的同学改起来有点困难&#xff0c;因此&#xff0c;今天整理一下修改 pipeline 的方法&#xff0c;…...

    2024/4/15 22:00:39
  4. ffmpeg filter 实现画面旋转

    工作中发现一个问题&#xff1a;手机设备在拍摄视频时&#xff0c;是通过竖屏拍摄&#xff0c;文件存放时的缩略图也是竖屏 但是其分辨率却是横屏的格式。 所以在做播放器时&#xff0c;没经过处理的播放器会发现播放时是横着的。 究其原因是因为存放时确实是按照横着来存放…...

    2024/4/15 6:44:32
  5. python入门需要有什么基础?

    往期推荐文章&#xff1a; Python自学真的可以学好嘛? 想轻松入门Python编程&#xff0c;必须看这10个经典案例&#xff0c;学完就能找到工作 Python学习&#xff1a;快速搭建python环境 随着Python应用在生活中的不断增多&#xff0c;越来越多的朋友选择学习Python语言&#…...

    2024/4/7 0:16:37
  6. ubuntu 添加systemctl 启动程序

    1.添加service启动文件 cd /lib/systemd/system sudo touch test.service添加启动内容&#xff1a; sudo vim test.service # 将下列信息添加到test.service [Unit] Descriptionmy_test[Service] ExecStart/usr/local/test_server/bin/test #服务程序地址&#xff0c;一般为可…...

    2024/4/16 22:30:28
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的二手书交易系统

    初始化项目 创建一个名为bookshop的数据库&#xff0c;将bookshop.sql导入打开IntelliJ IDEA&#xff0c;将项目导入修改jdbc.properties文件配置&#xff0c;同时配置Tomcat开始运行&#xff0c;访问http://localhost:8080/home.do 实现功能 登录上传二手图书编辑二手图手图…...

    2024/4/16 22:56:22
  8. SQL注入:爆破库、表、字段

    MySQL注入&#xff1a; user&#xff08;&#xff09;函数判断注入的身份&#xff0c;在靶场中默认是root&#xff0c;在源码中&#xff1a; 因为高权限用户可以管理到更多的数据库和网站&#xff0c;比如本网站A注入的的是A数据库的root用户&#xff0c;而B网站连接的是B数据…...

    2024/4/15 6:44:12
  9. MySQL MHA 部署

    文章目录引言一、什么是 MHA二、MHA 的组成三、MHA 的特点引言 一、什么是 MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。MHA 的出现就是解决MySQL 单点故障的问题。MySQL故障切换过程中&#xff0c;MHA能…...

    2024/4/7 0:16:33
  10. 选择第三方软件测试公司这5大原因你得看看

    互联网是一项重要的发明&#xff0c;因为它有助于消磨空闲时间和娱乐&#xff1b;此外&#xff0c;这是与其他组织和资源接触的有用方式。许多软件的上线和验收都需要进行相关的检验检测&#xff0c;一航软件测评告诉大家选择第三方软件检测公司更加快捷、可靠&#xff0c;这5个…...

    2024/4/15 6:44:42
  11. hadoop日常小问题

    1 org.apache.hadoop.hdfs.server.namenode.SafeModeException 启动HDFS处于安全模式&#xff0c;不能读写&#xff0c;安全模式会运行一段时间自动退出的。只需要我们稍等一会再运行就可以了 2 org.apache.hadoop.security.AccessControlException: Permission denied: 权限…...

    2024/4/15 6:44:37
  12. Java基础_135. 集合_ArrayList_构造方法和添加方法

    一个构造方法, 两个添加方法. 集合对象创建完成. 左右都有一个尖括号, 左边的尖括号里面有东西, 右边的尖括号没有东西, 也不会报错, 这是jdk 7以后的新特性, 右边的尖括号里面的内容是可以根据左边的推断出来的. 所以也可以改成这种形式. 接下来输出集合. 没有元素就返回一个中…...

    2024/4/5 6:31:37
  13. Java重点 —— 类和对象

    类和对象什么是类、对象&#xff1f;类和类的实例化字段的初始化类当中实现方法static 静态关键字封装private 实现封装setter 和 getter 方法构造方法this 关键字匿名对象什么是类、对象&#xff1f; 因为计算机并不能像我们人这样去理解世界上的东西&#xff0c;所以为了更好…...

    2024/4/15 6:44:37
  14. winform自定义消息提示框定时自动关闭

    在窗体加载事件中写入如下内容 System.Windows.Forms.Timer timer new System.Windows.Forms.Timer(); timer.Tick new System.EventHandler(this.timer_Tick); timer.Interval 3000;//3000毫秒 timer.Enabled true;//控件生效计时器添加 private void timer1_Tick(objec…...

    2024/4/15 6:44:17
  15. c中在一条语句中连续自加一个变量的问题

    int s1;printf("%d\n%d",s,s); 比如上面这一段代码&#xff0c;这一段的正确结果应该是 2 3&#xff0c;输出结果却是 3 2 使用连续自加会导致一些离谱的结果&#xff0c;不同编译器对连续自加的编译结果不同...

    2024/4/15 6:45:02
  16. Matlab App Designer自学笔记(十二):多个仪表盘控件的应用和滑块控件的组合应用

    做一个摄氏温度、华氏温度、开尔文温度&#xff0c;拖动滑块控件&#xff0c;表盘进行显示。 本质上是两个因变量随着一个自变量进行变化。 华氏温度 32 摄氏温度 * 1.8 开氏温度 摄氏温度 273.15 function SliderValueChanging(app, event)changingValue event.Value…...

    2024/4/15 6:45:07
  17. C++ 智能指针

    我们知道除了静态内存和栈内存外&#xff0c;每个程序还有一个内存池&#xff0c;这部分内存被称为自由空间或者堆。程序用堆来存储动态分配的对象即那些在程序运行时分配的对象&#xff0c;当动态对象不再使用时&#xff0c;我们的代码必须显式的销毁它们。 在C中&#xff0c…...

    2024/4/15 6:45:07
  18. vue基本操作流程

    找到页面组件-elementUI 定义组件 定义elementUI路由 项目中引入组件 引入组件 声明组件 效果展现 流程图...

    2024/4/7 0:16:28
  19. 【代码审计】Maven 基础知识

    0x00 前言 Maven 是一个项目构建和管理工具&#xff0c;利用它可以对 JAVA 项目进行构建和管理。 Maven 采用项目对象模型 POM&#xff08;Project Object Model&#xff09;来管理项目。 Maven 的主要工作就是用来解析一些 XML 文档、管理生命周期与插件。 Maven 被设计成…...

    2024/4/19 1:50:14
  20. 数据预处理之数据标准化

    接上文&#xff0c;下载iris数据集之后&#xff0c;需要对数据进行处理。这里只需要对数据进行标准化处理 min-max标准化 数据标准化处理是为了把数据分到一个特定区间&#xff0c;以便更好分析&#xff0c;这里不细说各方法的优缺点。min-max特别简单&#xff0c;但新加入值…...

    2024/4/15 6:45:07

最新文章

  1. Flask 解决指定端口无法生效问题

    问题重现 手动指定的IP端口是app.run(host0.0.0.0, port9304)&#xff0c;但是启动的地址显示的却是http://127.0.0.1:5000。 if __name__ __main__:app.run(host0.0.0.0, port9304)启动地址如下&#xff1a; 解决方案 PyCharm会自动识别出来flask项目&#xff08;即使你…...

    2024/4/19 8:12:22
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 策略模式图

    策略模式 小小的图解 主要的三个角色 Strategy—抽象策略角色ConcreateStrategy—具体策略角色Context—上下文角色 封装了对具体策略的调用可以使用set的依赖注入也可以使用构造方法 核心是上下文角色 只要调用上下文角色就行&#xff0c;实现解耦 策略 工厂 将上下文角…...

    2024/4/17 8:29:56
  4. WP Rocket v3.15.10最新版强大的WordPress缓存插件

    WP Rocket v3.15.10是一款强大的WordPress缓存插件&#xff0c;它通过一系列优化措施来提高网站的速度和性能。 WP Rocket与免费缓存插件相比&#xff0c;提供了更丰富和高级的自定义设置功能。这些包括媒体优化、预加载、延迟加载和数据库优化等。特别是对于没有任何缓存技术…...

    2024/4/18 4:13:03
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/18 0:33:31
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/18 22:36:36
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/18 9:45:31
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/17 2:33:17
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/17 7:50:46
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/18 3:56:01
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/18 3:56:04
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/18 3:55:30
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/18 3:55:54
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/18 3:55:45
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/17 21:50:30
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/15 13:53:08
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/15 9:16:52
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/18 9:24:29
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/18 3:56:18
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/18 3:55:57
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/18 3:55:50
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/15 23:28:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/18 3:56:20
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/18 3:56:11
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57