Android 左右舵镜像支持

Android左右舵镜像支持

    • 一、`supportsRtl`属性介绍
      • 1. 定义与用途
      • 2. 启用方式
    • 二、使用更多支持RTL的属性进行适配
      • 1. `textDirection`属性
      • 2. `gravity`和`layout_gravity`属性(与文本和视图位置有关)
      • 3. `drawableStart`、`drawableEnd`、`drawableLeft`和`drawableRight`属性(用于设置视图的图标位置)
      • 4. `paddingStart`和`paddingEnd`属性(与视图内边距有关)
      • 5. `marginStart`和`marginEnd`属性
    • 三、在代码中使用更多的属性方法支持RTL的进行适配
      • 1. 动态设置`textDirection`属性
      • 2. 调整`gravity`和`layout_gravity`属性
      • 3. 处理`drawableStart`、`drawableEnd`、`drawableLeft`和`drawableRight`属性
      • 4. 动态修改`paddingStart`和`paddingEnd`属性
      • 5. 改变`marginStart`和`marginEnd`属性
    • 四、使用`scaleX`属性进行图片翻转
      • 1. `scaleX`属性概述
      • 2. 在 XML 布局文件中使用`scaleX`(静态设置)
      • 3. 在代码中动态使用`scaleX`(以 Java 为例)
      • 4. 注意事项
    • 五、`setLayoutDirection`
      • 1. **`setLayoutDirection`是什么**
      • 2. **`LayoutDirection`属性的值**
      • 3. **对于布局(ViewGroup)的影响**
    • 六、什么语言需要做镜像呢
      • 1. 需要做镜像的语言
      • 2. 判断是否需要镜像的方法
  • 参考地址

一、supportsRtl属性介绍

1. 定义与用途

  • supportsRtl是一个在Android应用开发中非常重要的属性,用于控制应用是否支持从右到左(Right - to - Left,RTL)布局。它主要是为了方便应用适配那些使用RTL文字书写方向的语言,如阿拉伯语、希伯来语等。
  • supportsRtl设置为true时,Android系统会自动根据用户设备的语言设置来调整应用的布局方向。例如,如果用户设备的语言是阿拉伯语(一种RTL语言),应用中的视图布局会尽可能地以从右到左的方式呈现,从而为用户提供更自然、符合语言习惯的界面显示。

2. 启用方式

  • AndroidManifest.xml文件中设置
    • 该属性是在<application>标签中进行添加的。示例如下:
    <applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme">...
    </application>
    
    • 只有将这个属性设置为true,应用内其他与RTL相关的布局属性设置才会在相应的RTL语言环境下生效。如果未设置或者设置为false,那么即使在布局文件中做了RTL相关的设置,在RTL语言环境下也不会按照预期进行布局。

二、使用更多支持RTL的属性进行适配

1. textDirection属性

  • 用途与取值
    • 用于明确指定文本的方向。它有三个主要取值:
      • ltr(从左到右):这是大多数西方语言(如英语、法语等)所采用的文本方向。当在TextView等文本视图中设置android:textDirection="ltr"时,其中的文字内容会严格按照从左到右的顺序排列。
      • rtl(从右到左):适用于阿拉伯语、希伯来语等RTL语言。例如,在一个支持阿拉伯语的TextView中设置android:textDirection="rtl",文本会以从右到左的方式排列,符合这些语言的书写习惯。
      • locale:文本方向将根据设备的区域设置(locale)来确定。这是一种比较灵活的方式,系统会根据当前设备所设置的语言区域自动选择ltrrtl文本方向。这样可以确保文本在不同语言环境下都能正确显示方向,而无需为每个语言单独设置文本方向。
  • 使用示例
    • 在布局文件中,对于一个TextView,可以根据语言适配需求来设置文本方向。例如:
    <TextViewandroid:id="@+id/myTextView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="这是一段示例文本"android:textDirection="locale"/>
    
    • 上述代码中,textDirection设置为locale,这意味着文本方向会根据设备的语言设置自动调整。如果设备语言是RTL语言,文本将以从右到左的方向显示;如果是LTR语言,则以从左到右的方向显示。

2. gravitylayout_gravity属性(与文本和视图位置有关)

  • 用途与RTL布局关系
    • gravity用于指定视图内部内容(如文本在TextView中的位置)的对齐方式,layout_gravity用于指定视图本身在父布局中的对齐方式。
    • 在支持RTL布局时,这些属性的行为会根据布局方向进行调整。例如,在一个水平线性布局(LinearLayout)中,layout_gravityrightleft值在LTR和RTL布局下会有不同的效果。在LTR布局下,layout_gravity="right"会将视图靠右对齐;在RTL布局下,layout_gravity="right"(实际上此时这个right的概念会根据RTL布局转换)会将视图靠左对齐。
    • 对于gravity属性,在TextView中,当文本方向是rtl时,gravity="start"会使文本靠右侧(在RTL布局下的开始位置)对齐,这与在LTR布局下gravity="start"使文本靠左侧对齐是相对应的。
  • 使用示例
    • 假设在一个布局文件中有一个Button,想要根据RTL或LTR布局来调整其在父布局中的位置和内部文本的对齐方式,可以这样设置:
    <Buttonandroid:id="@+id/myButton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按钮文本"android:layout_gravity="right"android:gravity="center"/>
    
    • 当布局方向是LTR时,按钮会靠右对齐,并且按钮内部文本在水平方向上居中对齐;当布局方向变为RTL时,按钮会靠左对齐(因为layout_gravity="right"在RTL布局下的实际效果改变了),文本依然在按钮内部水平居中对齐。

3. drawableStartdrawableEnddrawableLeftdrawableRight属性(用于设置视图的图标位置)

  • 用途与RTL布局下的变化
    • 这些属性用于在视图(如TextViewButton等)周围放置图标。例如,在TextView中,可以使用drawableLeft将一个图标放置在文本的左侧。
    • 当布局支持RTL并且布局方向为RTL时,drawableStartdrawableEnd的作用会和drawableLeftdrawableRight互换。在LTR布局下,drawableLeft将图标放置在视图的左侧,drawableRight放置在右侧;而在RTL布局下,drawableStart(相当于RTL下的左侧)和drawableEnd(相当于RTL下的右侧)会根据新的布局方向正确放置图标。例如,在一个阿拉伯语环境下的TextView中,如果设置了drawableStart,图标会出现在文本的右侧(从用户视角看)。
  • 使用示例
    • 以下是在TextView中设置图标的示例,根据不同的布局方向来正确放置图标:
    <TextViewandroid:id="@+id/iconTextView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="带图标的文本"android:drawableLeft="@drawable/icon_left"android:drawableStart="@drawable/icon_start"/>
    
    • 在LTR布局下,会显示icon_left在文本左侧;当布局方向变为RTL时,icon_start会显示在文本右侧(从用户视角看),这样就能够根据RTL或LTR布局正确地放置图标。

4. paddingStartpaddingEnd属性(与视图内边距有关)

  • 用途与RTL布局下的行为
    • 用于指定视图内部内容与视图边界之间的内边距。
    • 在LTR布局下,paddingStart类似于传统的paddingLeftpaddingEnd类似于paddingRight。当布局方向变为RTL时,它们的角色互换,paddingStart相当于paddingRightpaddingEnd相当于paddingLeft。这确保了视图内部的内容在不同布局方向下都能保持合理的间距和布局。例如,在一个Button中,设置paddingStartpaddingEnd可以根据布局方向调整文本与按钮边缘的距离。
  • 使用示例
    • 对于一个EditText,可以这样设置内边距来适配不同的布局方向:
    <EditTextandroid:id="@+id/myEditText"android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingStart="10dp"android:paddingEnd="5dp"/>
    
    • 在LTR布局下,文本左边有10dp的内边距,右边有5dp的内边距;当布局方向变为RTL时,文本右边会有10dp的内边距,左边会有5dp的内边距,从而保证了文本在不同布局方向下与视图边界的合理间距。

5. marginStartmarginEnd属性

  • 用途与RTL布局下的特点
    • 在Android布局系统中,marginStartmarginEnd是用于指定视图(View)相对于起始和结束边缘的外边距的属性。与传统的leftright外边距属性不同,marginStartmarginEnd是与布局方向无关的,它们会根据布局方向(从左到右或者从右到左)自动调整。
    • 在从左到右(LTR)的布局方向下,marginStart相当于left外边距,marginEnd相当于right外边距;而在从右到左(RTL)的布局方向下,marginStart相当于right外边距,marginEnd相当于left外边距。
  • 使用示例
    • 假设在一个水平线性布局中有一个ImageView,可以这样设置外边距:
    <ImageViewandroid:id="@+id/myImageView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/my_image"android:layout_marginStart="10dp"android:layout_marginEnd="5dp"/>
    
    • 在LTR布局下,myImageView的左边有10dp的外边距,右边有5dp的外边距。当布局方向变为RTL时,myImageView的右边会有10dp的外边距,左边会有5dp的外边距,这使得视图在不同布局方向下都能保持合适的位置关系。这种属性在布局中可以灵活地调整视图之间的间距,尤其在适配RTL布局时,可以更方便地控制视图的位置,避免因布局方向改变而导致的显示问题。

三、在代码中使用更多的属性方法支持RTL的进行适配

1. 动态设置textDirection属性

  • 在Java代码中,可以根据设备的语言设置动态地改变视图的textDirection属性。例如,在ActivityonCreate方法中:
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView textView = findViewById(R.id.myTextView);if (isRTLLanguage()) { // 假设这里有一个方法判断当前语言是否是RTL语言textView.setTextDirection(View.TEXT_DIRECTION_RTL);} else {textView.setTextDirection(View.TEXT_DIRECTION_LTR);}
}
  • 这样可以确保TextView中的文本方向根据实际语言环境正确显示。这种动态设置在应用运行过程中语言发生变化等场景下非常有用。

2. 调整gravitylayout_gravity属性

  • 同样在代码中,可以通过获取视图的布局参数来修改gravitylayout_gravity属性。以下是一个示例,假设要在LinearLayout中动态调整一个Button的布局属性:
LinearLayout linearLayout = findViewById(R.id.myLinearLayout);
Button button = new Button(this);
button.setText("动态按钮");
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
if (isRTLLanguage()) {params.gravity = Gravity.RIGHT; // 根据RTL语言调整内部文本对齐方式params.layout_gravity = Gravity.LEFT; // 根据RTL语言调整按钮在父布局中的位置
} else {params.gravity = Gravity.LEFT;params.layout_gravity = Gravity.RIGHT;
}
linearLayout.addView(button, params);
  • 通过这种方式,可以根据当前的语言环境(是否为RTL)灵活地调整视图在布局中的位置和内部内容的对齐方式。

3. 处理drawableStartdrawableEnddrawableLeftdrawableRight属性

  • 在代码中,可以根据布局方向来设置视图的图标属性。以下是一个示例,假设在一个TextView中动态设置图标:
TextView textView = findViewById(R.id.iconTextView);
if (isRTLLanguage()) {textView.setCompoundDrawablesWithIntrinsicBounds(getDrawable(R.drawable.icon_end),null,null,null);
} else {textView.setCompoundDrawablesWithIntrinsicBounds(getDrawable(R.drawable.icon_left),null,null,null);
}
  • 这里通过判断语言环境(是否为RTL)来决定是使用drawableLeft(在LTR下)还是drawableEnd(在RTL下)来设置图标,确保图标在不同布局方向下正确显示。

4. 动态修改paddingStartpaddingEnd属性

  • 对于视图的内边距,可以在代码中根据RTL布局需求进行修改。例如,对于一个EditText
EditText editText = findViewById(R.id.myEditText);
if (isRTLLanguage()) {editText.setPadding(editText.getPaddingRight(),editText.getPaddingTop(),editText.getPaddingLeft(),editText.getPaddingBottom());
} else {// 保持原有内边距或进行其他设置
}
  • 上述代码在RTL语言环境下交换了leftright内边距的值,以适应视图内容在不同布局方向下与边界的合理间距。

5. 改变marginStartmarginEnd属性

  • 在代码中修改视图的外边距以适配RTL布局也是常见的操作。以下是一个示例,假设在一个LinearLayout中有一个ImageView,要根据布局方向改变其外边距:
LinearLayout linearLayout = findViewById(R.id.myLinearLayout);
ImageView imageView = findViewById(R.id.myImageView);
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) imageView.getLayoutParams();
if (isRTLLanguage()) {int tempMargin = params.leftMargin;params.leftMargin = params.rightMargin;params.rightMargin = tempMargin;imageView.setLayoutParams(params);
}
  • 通过这种方式,在RTL语言环境下交换了marginStartmarginEnd的值,从而调整视图在布局中的位置,确保在不同布局方向下的正确显示。

四、使用scaleX属性进行图片翻转

1. scaleX属性概述

在 Android 中,scaleX是用于控制视图(View)在 X 轴方向缩放的一个属性。当我们将scaleX的值设置为 -1 时,可以实现视图在水平方向上的翻转,这对于图片(通常放在 ImageView 等视图中)的左右镜像效果非常有用。

2. 在 XML 布局文件中使用scaleX(静态设置)

  • 对于 ImageView
    假设我们有一个 ImageView 显示一张图片,我们可以在 XML 布局文件中这样设置:
<ImageViewandroid:id="@+id/imageView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/your_image"android:scaleX="-1" />

在上述代码中,通过android:scaleX="-1",ImageView 中的图片会在水平方向上进行翻转,呈现出左右镜像的效果。这种方式在布局设计阶段就确定了图片的翻转状态。

3. 在代码中动态使用scaleX(以 Java 为例)

  • 通过属性动画实现翻转动画效果
ImageView imageView = findViewById(R.id.imageView);
ObjectAnimator animator = ObjectAnimator.ofFloat(imageView, "scaleX", -1f);
animator.setDuration(500); // 设置动画持续时间为 500 毫秒
animator.start();

这里使用ObjectAnimator创建了一个属性动画,将imageViewscaleX属性从当前值渐变到 -1,动画持续时间为 500 毫秒。这样,图片会以动画的形式逐渐进行水平翻转,给用户一个视觉上的过渡效果。

  • 直接设置scaleX值实现即时翻转
ImageView imageView = findViewById(R.id.imageView);
imageView.setScaleX(-1f);

这种方式会立即将imageViewscaleX值设置为 -1,图片会瞬间完成水平翻转,没有动画过渡效果。这种方法适用于需要在特定条件下(如用户点击某个按钮)快速改变图片方向的场景。

4. 注意事项

  • 与其他属性的交互:当使用scaleX进行图片翻转时,需要注意与视图的其他属性(如layout_gravitypadding等)的交互。例如,如果视图的layout_gravity设置为center,翻转后的图片在布局中的位置可能需要重新调整以确保视觉效果符合预期。
  • 对图片内容的影响:这种翻转只是视觉上的,对于一些包含文本或特定方向信息的图片内容,翻转后可能需要进一步处理以保证其正确性和可读性。例如,如果图片中有从左到右书写的文字,翻转后文字会反向,可能需要额外的逻辑来处理这种情况。
  • 动画性能:当使用属性动画实现scaleX的变化时,如果应用中有大量的图片同时进行这样的动画,可能会对性能产生一定的影响。需要注意优化动画的参数和资源使用,避免出现卡顿现象。

五、setLayoutDirection

1. setLayoutDirection是什么

  • setLayoutDirection是Android视图系统中的一个方法,用于设置视图(View)及其子视图的布局方向。它主要用于控制视图内容的排列顺序,是实现从左到右(LTR)和从右到左(RTL)布局的关键工具。
  • 该方法通常接受一个参数,这个参数是一个整数值,用于指定布局方向。在Android中,常用的布局方向参数是View.LAYOUT_DIRECTION_LTR(表示从左到右布局)和View.LAYOUT_DIRECTION_RTL(表示从右到左布局)。

2. LayoutDirection属性的值

  • View.LAYOUT_DIRECTION_LTR(从左到右)
    • 这是大多数语言(如英语、中文等)所采用的默认布局方向。在这种布局方向下,视图及其子视图会按照从左到右的顺序进行排列。例如,在水平方向的布局中,子视图会从最左边开始依次向右排列;在文本视图(如TextView)中,文本内容也是从左向右书写和显示。
  • View.LAYOUT_DIRECTION_RTL(从右到左)
    • 主要用于适配那些从右到左书写的语言,如阿拉伯语、希伯来语等。当布局方向设置为这个值时,视图及其子视图的排列顺序会反转。在水平布局中,子视图从最右边开始向左排列;对于包含文本的视图,文本会从右向左显示。
  • View.LAYOUT_DIRECTION_INHERIT(继承)
    • 该值表示视图的布局方向会继承自它的父视图。如果父视图的布局方向是LTR,那么该视图也会采用LTR布局方向;同理,如果父视图是RTL,它也会是RTL。这使得视图在布局层次结构中能够保持与父视图一致的布局流向,除非有明确的设置改变它。
  • View.LAYOUT_DIRECTION_LOCALE(根据区域设置)
    • 布局方向会根据设备的区域设置(locale)来确定。系统会根据用户在设备上设置的语言区域自动选择LTRRTL布局方向。例如,如果设备语言设置为阿拉伯语(一种RTL语言),视图会采用RTL布局方向;如果设置为英语(一种LTR语言),则采用LTR布局方向。这种方式可以方便地实现应用在不同语言环境下的自动布局适配。

3. 对于布局(ViewGroup)的影响

  • 对子视图排列顺序的影响
    • 线性布局(LinearLayout)
      • 对于水平方向的LinearLayout,当使用setLayoutDirection(View.LAYOUT_DIRECTION_LTR)时,子视图会按照从左到右的顺序依次排列。例如,有三个按钮作为子视图添加到水平LinearLayout中,它们会从左到右依次显示。
      • 而当设置为setLayoutDirection(View.LAYOUT_DIRECTION_RTL)时,子视图的排列顺序会反转,变为从右到左。刚才的三个按钮此时会从右到左依次排列,就好像整个布局在水平方向上进行了镜像翻转。
    • 相对布局(RelativeLayout)
      • 在RelativeLayout中,布局方向会影响视图之间相对位置的规则。例如,一个视图通过layout_toRightOf属性相对于另一个视图定位。在LTR布局下,它会按照常规理解位于另一个视图的右侧;但在RTL布局下,layout_toRightOf这个属性实际上会让视图位于另一个视图的左侧,因为布局方向改变了,相对位置的定义也随之改变。
    • 帧布局(FrameLayout)和表格布局(TableLayout)等
      • 在FrameLayout中,虽然子视图是堆叠显示的,但布局方向仍可能影响其中文本的方向或内部对齐方式(如果存在文本相关的视图)。在TableLayout中,布局方向可能改变表格列的排列顺序或者单元格内容的对齐方式。例如,对于包含文本的单元格,在RTL布局下,文本可能会从右到左排列,并且表格列的顺序也可能会根据布局方向进行调整。
    • 约束布局(ConstraintLayout)
      • 在ConstraintLayout中,setLayoutDirection会对视图的约束关系产生影响。当布局方向为LTR时,视图的约束条件(如layout_constraintStart_toEndOflayout_constraintEnd_toStartOf)按照从左到右的常规方式起作用。例如,一个视图通过layout_constraintStart_toEndOf约束到另一个视图的右侧,这在LTR布局下符合预期。
      • 然而,当布局方向变为RTL时,这些约束条件的实际效果会反转。layout_constraintStart_toEndOf会将视图约束到另一个视图的左侧,因为在RTL布局下,“开始”的维度发生了变化。同样,其他约束属性如layout_constraintHorizontal_bias也会受到影响。在LTR布局下偏向左侧的视图,在RTL布局下可能需要重新调整偏向程度,以保证在新的布局方向下视图的合理定位和排列。这种调整有助于使约束布局在不同语言方向(LTR或RTL)下都能正确地展示界面,符合用户对于布局的期望。
    • 对于列表(以RecyclerView为例)的影响
      • RecyclerView与布局方向的关系:当RecyclerView使用LinearLayoutManager作为其布局管理器时,其表现与LinearLayout类似。如果是水平方向的RecyclerView,setLayoutDirection会改变子项的排列顺序。在LTR布局下,子项从左到右排列;在RTL布局下,子项从右到左排列。

      • 对RecyclerView的Adapter和ViewHolder的影响:在RTL布局下,可能需要对Adapter中的数据绑定逻辑进行一些调整,尤其是当列表项中包含方向敏感的内容(如文本、图标位置等)。例如,如果列表项中有一个TextView和一个ImageView,在LTR布局下,ImageViewTextView的右侧,那么在RTL布局下,可能需要调整它们的显示顺序或者位置关系。对于ViewHolder中的视图查找和布局设置也需要考虑布局方向。比如,在设置视图的外边距或者内边距时,要根据LTRRTL来正确设置marginStartmarginEndpaddingStartpaddingEnd等属性,以确保列表项在不同布局方向下的正确显示。

      • 动画效果与布局方向:如果RecyclerView的子项有动画效果(如添加、删除或移动动画),布局方向的改变可能会影响动画的视觉效果。例如,一个从左向右滑动进入的动画在LTR布局下看起来很自然,但在RTL布局下可能需要调整为从右向左滑动进入,以符合用户对于布局方向的预期。这可能需要在代码中根据当前的布局方向来动态调整动画的参数和方向。

      • 用户交互与布局方向:用户与RecyclerView的交互(如点击事件、滑动操作等)在不同布局方向下也需要正确处理。例如,在RTL布局下,用户从右向左滑动可能是期望进行下一页加载或者显示下一组列表项,而在LTR布局下,从左向右滑动可能有类似的含义。开发人员需要确保RecyclerView及其相关的交互逻辑在不同布局方向下都能正常工作,为用户提供一致的体验。

      • 当RecyclerView使用其他布局管理器(如GridLayoutManager等)时,布局方向的改变也会对网格的排列顺序产生影响。在RTL布局下,网格的行和列的排列可能需要重新调整,以确保内容的正确显示和布局的合理性。例如,在LTR布局下,网格是从左上角开始向右和向下填充的;在RTL布局下,可能需要从右上角开始向左和向下填充,或者根据具体的设计需求进行相应的调整。

六、什么语言需要做镜像呢

1. 需要做镜像的语言

  • 阿拉伯语:阿拉伯语是典型的从右到左(RTL)书写的语言。它的文字顺序、数字排列(在某些情况下)以及阅读习惯都是从右往左的。在设计应用界面来适配阿拉伯语时,需要对界面元素进行镜像处理,比如文本显示方向、图标位置等。例如,在一个包含阿拉伯语文字的TextView和旁边的ImageView组成的布局中,需要调整ImageView的位置使其在阿拉伯语文本的左边(从用户视角看),同时文本本身的方向也要从右向左排列。
  • 希伯来语:和阿拉伯语类似,希伯来语也是RTL语言。其文字排版、书籍排版以及很多用户界面元素(如菜单、按钮文字等)都遵循从右到左的规则。在应用中,如果要提供希伯来语支持,就需要考虑对布局和内容进行镜像,以符合希伯来语使用者的习惯。
  • 波斯语:波斯语在书写方向上也主要是RTL。在界面设计中,涉及波斯语内容的部分,如文本框、标签、菜单等,都需要考虑将布局和元素位置进行适当的镜像调整,保证文字和相关图标等元素的排列符合波斯语的阅读和书写习惯。

2. 判断是否需要镜像的方法

  • 通过设备语言设置判断
    • 在Android平台:可以通过Locale类来获取设备的语言设置信息。例如,在Java代码中,可以使用以下方式:
Locale locale = getResources().getConfiguration().locale;
if (TextUtils.equals(locale.getLanguage(), "ar") || TextUtils.equals(locale.getLanguage(), "he") || TextUtils.equals(locale.getLanguage(), "fa")) {// 这里是阿拉伯语、希伯来语或波斯语,可能需要进行镜像处理
}

参考地址

豆包AI

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/466679.html

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

相关文章

单位正交矢量的参数化,用于特征矢量对厄尔米特矩阵对角化使用

​ 首先α β 在0-pi/2内&#xff0c;这样就可以取值0-1&#xff0c;满足了单位化的要求 每个向量的模由α和β定义&#xff0c;αβ定义模的时候只限制在0–pi/2&#xff0c;由画图可知不可正交 为了验证矩阵 U 3 \boldsymbol{U}_3 U3​ 的第一列和第二列是否正交&#xff…

Spring Security 框架篇-深入了解 Spring Security 的授权核心功能(RBAC 权限模型、自定义异常处理器、校验权限方法)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 权限系统 1.1 引入 1.2 RBAC 权限模型 1.3 数据库设计 2.0 Spring Security 核心功能-授权 2.1 思路分析 2.2 编写 SQL 语句 2.3 将用户权限进行封装 2.4 获取用户…

使用 API 和离线库查询 IP 地址方法详解

目录 一、IP 地址查询能获取哪些信息1.地理位置信息2.网络信息3.网络类型 二、IP 地址查询方法&#xff0c;附代码1.在线查询 IP 地址方法2.使用 API 进行 IP 地址查询3.使用离线库进行 IP 地址查询 互联网监管部门要求公开 IP 归属地&#xff0c;引起了很大热度&#xff0c;但…

微服务day02

教学文档&#xff1a; 黑马教学文档 Docker Docker的安装 镜像和容器 命令解读 常见命令 案例 查看DockerHub&#xff0c;拉取Nginx镜像&#xff0c;创建并运行容器 搜索Nginx镜像&#xff1a;在 www.hub.docker.com 网站进行查询 拉取镜像&#xff1a; docker pull ngin…

一个小程序如何对接多个收款账户?

背景 我又来了&#xff0c;之前对接过网约巴士系统 网约巴士旅游专线平台搭建历程&#xff0c;运营了两年多了。在运营中完善、在完善中学习&#xff0c;一直是不变的真理。有一句话说得好&#xff1a;先做一个垃圾、用起来再说。 今天又需要升级了&#xff0c;需求是&#…

基于航片的玉米异常情况识别赛题正在报名中 | CCF BDCI进行时

一年一度的行业盛事2024 CCF大数据与计算智能大赛&#xff08;简称2024 CCF BDCI&#xff09;又在激烈进行中啦 多个赛题等你挑战&#xff0c;还没有报名的伙伴们抓紧时间咯&#xff0c;叫上你伙伴练起来吧&#xff01; 2024 CCF大数据与计算智能大赛 CCF大数据与计算智能大…

面试题:Spring(一)

1. Spring框架中bean是单例么&#xff1f; Service Scope("singleton") public class UserServiceImpl implements UserService { }singleton : bean在每个Spring IOC容器中只有一个实例。prototype&#xff1a;一个bean的定义可以有多个实例。 2. Spring框架中的…

Android View事件分发

目录 1.什么是View事件分发&#xff1f; 2.事件的类型 3.事件的发生 4.事件分发的方法 4.1 dispatchTouchEvent() 4.2 onTouchEvent() 4.3 onInterceptTouchEvent() 5.滑动冲突 5.1 外部拦截法 5.2内部拦截法 6.onTouch的执行高于onClick 7. onTouch()和onTouchEve…

uniapp 实现瀑布流

效果演示 组件下载 瀑布流布局-waterfall - DCloud 插件市场

6.qsqlquerymodel源码分析

目录 继承关系入口浅析qsqlquery刷新数据 扩展列或者移除列以及取别名读取数据与增减行读取数据 下一章节&#xff1a;如何使用qsqlquerymodel 与 qtableview实现自定义表格 继承关系 qsqlquerymodel 继承与qabstracttablemodel 入口 负责填充数据 void QSqlQueryModel::s…

Vue3中使用LogicFlow实现简单流程图

实现结果 实现功能&#xff1a; 拖拽创建节点自定义节点/边自定义快捷键人员选择弹窗右侧动态配置组件配置项获取/回显必填项验证历史记录&#xff08;撤销/恢复&#xff09; 自定义节点与拖拽创建节点 拖拽节点面板node-panel.vue <template><div class"node-…

Devops业务价值流:软件研发最佳实践

在当今快速迭代的软件开发环境中&#xff0c;DevOps业务价值流已成为推动软件研发高效与质量并重的关键实践。软件研发阶段作为产品生命周期的核心环节&#xff0c;其每一步都承载着将创意转化为现实的重要使命。在历经需求澄清的精准定位、架构设计的宏观规划以及项目初始化的…

wireshark工具使用

复制数据 1.右键展开整帧数据 2.复制“所有可见项目” mark标记数据 标记&#xff1a; 跳转&#xff1a; 保存成文件&#xff1a; 文件–>导出特定分组—>Marked packets only

管理 Elasticsearch 变得更容易了,非常容易!

作者&#xff1a;来自 Elastic Ken Exner Elasticsearch 用户&#xff0c;我们听到了你的心声。管理 Elasticsearch 有时会变得很复杂&#xff0c;面临的挑战包括性能调整、问题检测和资源优化。我们一直致力于简化你的体验。今天&#xff0c;我们宣布了自收购 Opster 以来的一…

深度洞察| 超6亿银发精准流量,40+泛银发群体参与消费三大变化

作者 | NewAgingPro团队 前言 9月24日&#xff0c;AgeClub成立银发流量及场景联盟&#xff08;简称&#xff1a;AgeMCN&#xff09;&#xff0c;助力银发经济高质量发展。 10月11日&#xff0c;AgeClub发布《2024银发流量全景洞察报告》&#xff0c;探索银发流量发展新模式…

Spring Boot——日志介绍和配置

1. 日志的介绍 在前面的学习中&#xff0c;控制台上打印出来的一大堆内容就是日志&#xff0c;可以帮助我们发现问题&#xff0c;分析问题&#xff0c;定位问题&#xff0c;除此之外&#xff0c;日志还可以进行系统的监控&#xff0c;数据采集等 2. 日志的使用 在程序中获取日…

Redis 组网方式入门

文章目录 一、组网方式1. 单实例模式描述优点缺点适用场景 2. 主从复制模式&#xff08;Master-Slave Replication&#xff09;描述优点缺点适用场景基于docker的redis主从复制1. 配置主节点2. 配置从节点3. 查看节点状态4. 验证主从数据同步5. 查看同步进度 3. 哨兵模式&#…

信号-2-信号捕捉

相关概念&#xff1a;递达 未决 / 阻塞 忽略 阻塞 vs 忽略 阻塞&#xff1a; 如果指定信号信号被阻塞&#xff0c; block期间该信号不能被递达&#xff0c;一直在pending表中。知道block被撤销后&#xff0c; 该信号才能递达&#xff0c;递达后对应pending位置置零。 忽…

(蓝桥杯C/C++)——基础算法(下)

目录 一、时空复杂度 1.时间复杂度 2.空间复杂度 3.分析技巧 4.代码示例 二、递归 1.递归的介绍 2.递归如何实现 3.递归和循环的比较 4.代码示例 三、差分 1.差分的原理和特点 2.差分的实现 3.例题讲解 四、枚举 1.枚举算法介绍 2.解空间的类型 3. 循环枚举解…

【极限编程(XP)】

极限编程&#xff08;XP&#xff09;简介 定义与核心价值观&#xff1a;极限编程&#xff08;Extreme Programming&#xff0c;XP&#xff09;是一种轻量级、敏捷的软件开发方法。它强调团队合作、客户参与、持续测试和快速反馈等价值观&#xff0c;旨在提高软件开发的效率和质…