OpenHarmony开发者论坛

标题: OpenHarmony实现安卓约束布局bias属性的方法 [打印本页]

作者: 深开鸿_石悌君    时间: 2024-4-26 16:44
标题: OpenHarmony实现安卓约束布局bias属性的方法
[md]## 引言

安卓约束布局ConstraintLayout是一种比较强大的布局方式,在实际开发中经常用到;在安卓APP OpenHarmony化过程中必然需要一定的转换方法。本文重点介绍layout\_constraintVertical\_bias属性在OpenHarmony中的一种实现方法。

## alignRules

### 安卓bias属性简介

layout\_constraintVertical\_bias 是 Android ConstraintLayout 中的一个属性,它用于控制一个视图在其垂直约束边界内的相对位置。这个属性的值是一个介于 0 和 1 之间的浮点数,表示视图在垂直方向上的偏移比例。如果想要在一个已经通过垂直约束定义了起始点和结束点的视图中,进行更细致的垂直位置调整时非常有用。例如,如果你有一个按钮,它的顶部和底部都已经通过约束与布局中的其他元素对齐,但是你想让它在视觉上稍微向上或向下移动,就可以通过调整layout\_constraintVertical\_bias属性来实现。

### alignRules简单介绍

查看[通用属性\_位置信息](https://docs.openharmony.cn/page ... ributes-location.md)中说明,api9中引入了alignRules属性,属性的选项说明如下:

| 名称      | 类型                                                                                                                                                                              | 描述                                                                                                      |
| --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| left      | { anchor: string, align:[HorizontalAlign](https://docs.openharmony.cn/page ... .md#horizontalalign)}          | 设置左对齐参数。 - anchor:设置作为锚点的组件的id值。 - align:设置相对于锚点组件的对齐方式。             |
| right     | { anchor: string, align:[HorizontalAlign](https://docs.openharmony.cn/page ... .md#horizontalalign)}          | 设置右对齐参数。 - anchor:设置作为锚点的组件的id值。 - align:设置相对于锚点组件的对齐方式。             |
| middle    | { anchor: string, align:[HorizontalAlign](https://docs.openharmony.cn/page ... .md#horizontalalign)}          | 设置横向居中对齐方式的参数。 - anchor:设置作为锚点的组件的id值。 - align:设置相对于锚点组件的对齐方式。 |
| top       | { anchor: string, align:[VerticalAlign](https://docs.openharmony.cn/page ... ms.md#verticalalign)}              | 设置顶部对齐的参数。 - anchor:设置作为锚点的组件的id值。 - align:设置相对于锚点组件的对齐方式。         |
| bottom    | { anchor: string, align:[VerticalAlign](https://docs.openharmony.cn/page ... ms.md#verticalalign)}              | 设置底部对齐的参数。 - anchor:设置作为锚点的组件的id值。 - align:设置相对于锚点组件的对齐方式。         |
| center    | { anchor: string, align:[VerticalAlign](https://docs.openharmony.cn/page ... ms.md#verticalalign)}              | 设置纵向居中对齐方式的参数。                                                                              |
| **bias** | [**Bias**](https://docs.openharmony.cn/page ... 1%E8%AF%B4%E6%98%8E) | **设置组件在锚点约束下的偏移参数,其值为到左/上侧锚点的距离与锚点间总距离的比值。**                      |

一种熟悉的感觉扑面而来;废话不多说,具体样例请看实例展示

### 使用过程中注意点

1、bias属性在OpenHarmony4.1(api11)版本以上才支持

2、[RelativeContainer](https://docs.openharmony.cn/page ... elativecontainer.md)中的子组件必须设置id,否则不显示

3、指定bias时必须同时指定起始和结束锚点:垂直方向必须同时指定top和bottom锚点,水平方向必须同时指定left和right锚点

## 实例

### 安卓布局xml

```
<androidx.constraintlayout.widget.ConstraintLayout
     android:id="@+id/page_management_button"
     android:layout_width="0dp"
     android:layout_height="52dp"
     android:background="@color/white"
     android:clickable="true"
     android:focusable="true"
     app:layout_constraintLeft_toLeftOf="parent"
     app:layout_constraintRight_toLeftOf="@id/setting_button"
     app:layout_constraintBottom_toBottomOf="parent"
     app:layout_constraintHorizontal_weight="0.5" >
     
<ImageView
   android:id="@+id/page_management_image"
   android:layout_width="19dp"
   android:layout_height="21dp"
   android:layout_marginTop="8dp"
   android:layout_gravity="center"
   android:src="@drawable/page_management_2x"
   android:clickable="false"
   app:layout_constraintRight_toRightOf="parent"
   app:layout_constraintLeft_toLeftOf="parent"
   app:layout_constraintTop_toTopOf="parent" />

<TextView
   android:id="@+id/page_management_text"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="center"
   android:layout_marginTop="2dp"
   android:text="Page Manage"
   android:textAlignment="center"
   android:textColor="#4A5970"
   android:textFontWeight="400"
   android:textSize="11sp"
   android:clickable="false"
   app:layout_constraintLeft_toLeftOf="parent"
   app:layout_constraintRight_toRightOf="parent"
   app:layout_constraintTop_toBottomOf="@id/page_management_image"
   app:layout_constraintVertical_bias="0.656" />
</androidx.constraintlayout.widget.ConstraintLayout>
```

### OpenHarmony ets布局写法

```
RelativeContainer() {
 Image(this.page_management_icon)
   .width(19)
   .height(21)
   .margin({ top: 8 })
   .alignRules({
     top: { anchor: "__container__", align: VerticalAlign.Top },//__container__ 指容器id
     middle: { anchor: "__container__", align: HorizontalAlign.Center }
   })
   .id('page_management_icon')

   Text('Page Manage')
     .fontColor('#4A5970')
     .fontWeight(400)
     .fontSize(11)
     .margin({ top: 2 })
     .alignRules({
       top: { anchor: "page_management_icon", align: VerticalAlign.Bottom }, //必须要加
       bottom:{anchor:"__container__", align:VerticalAlign.Bottom},//必须要加
       middle: { anchor: "__container__", align: HorizontalAlign.Center },
       bias:{vertical:0.656}
     })
     .height('13fp') //必须要加
     .id("page_management_text") //必须要加
}
```
[/md]




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5