Wear OS 上的应用使用与其他 Android 设备相同的布局技术,但需要根据手表特定的限制进行设计。
注意:不要将移动应用的精确功能和 UI 移植到 Wear OS 并期望获得良好的用户体验。
如果您的应用针对矩形手持设备设计,则圆形手表上可能会裁剪屏幕角落附近的内容。如果您使用可滚动的垂直列表,则问题不大,因为用户可以滚动以使内容居中。但是,对于单个屏幕,这可能会带来糟糕的用户体验。
如果对布局使用以下设置,则文本在具有圆形屏幕的设备上显示不正确
<androidx.constraintlayout.widget.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"> <TextView android:id="@+id/text" android:layout_width="0dp" android:layout_height="0dp" android:text="@string/very_long_hello_world" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
要解决此问题,请使用 Wear OS UI 库 中支持圆形设备的布局。
- 您可以使用
BoxInsetLayout
防止视图在圆形屏幕边缘附近被裁剪。 - 您可以使用
WearableRecyclerView
在想要显示和操作针对圆形屏幕优化的垂直项目列表时创建弯曲布局。
有关应用设计的更多信息,请阅读 Wear OS 设计指南。
使用 BoxInsetLayout
Wear OS UI 库中的 BoxInsetLayout
类允许您定义适用于圆形屏幕的布局。此类使您可以轻松地在屏幕中心或边缘附近对齐视图。
图 2 中的灰色正方形显示了 BoxInsetLayout
应用所需的窗口内边距后,可以在圆形屏幕上自动放置其子视图的区域。要显示在此区域内,子视图使用 layout_boxedEdges
属性并指定以下值
top
、bottom
、left
和right
的组合。例如,"left|top"
值将子元素的左边缘和上边缘放置在图 2 中的灰色正方形内。"all"
值将所有子元素的内容放置在图 2 中的灰色正方形内。这在内部使用ConstraintLayout
时是最常见的方法。
图 2 中显示的布局使用 <BoxInsetLayout>
元素,并在圆形屏幕上有效。
<androidx.wear.widget.BoxInsetLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_height="match_parent" android:layout_width="match_parent" android:padding="15dp"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" android:padding="5dp" app:layout_boxedEdges="all"> <TextView android:layout_height="wrap_content" android:layout_width="match_parent" android:text="@string/sometext" android:textAlignment="center" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <ImageButton android:background="@android:color/transparent" android:layout_height="50dp" android:layout_width="50dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" android:src="@drawable/cancel" /> <ImageButton android:background="@android:color/transparent" android:layout_height="50dp" android:layout_width="50dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" android:src="@drawable/ok" /> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.wear.widget.BoxInsetLayout>
注意布局中以粗体标记的部分。
-
android:padding="15dp"
此行将填充分配给
<BoxInsetLayout>
元素。 -
android:padding="5dp"
此行将填充分配给内部
ConstraintLayout
元素。 -
app:layout_boxedEdges="all"
此行确保
ConstraintLayout
元素及其子元素位于圆形屏幕上窗口内边距定义的区域内。
使用弯曲布局
Wear OS UI 库中的 WearableRecyclerView
类允许您选择针对圆形屏幕优化的弯曲布局。要为应用中的可滚动列表启用弯曲布局,请参阅 在 Wear OS 上创建列表。