基本布局概览
car-ui-lib 工具栏通过 car_ui_base_layout_toolbar.xml
布局文件进行自定义。它被称为*基本布局*工具栏,因为此布局文件包含一个 ID 为 car_ui_base_layout_content_container
的 FrameLayout
,它将在布局扩充后不久包含应用的所有内容。此结构使 OEM 可以将工具栏放置在屏幕顶部以外的位置。
可能的布局 | ||
---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
通过更改 car_ui_base_layout_content_container
上的布局参数,可以将应用压缩到较小的区域,以便为工具栏腾出空间。但是,某些自定义可能要求工具栏是透明的并叠加在应用顶部。在这种情况下,视图可以使用 car_ui_top/bottom/left/right_inset
进行标记。如果 car-ui-lib 检测到带有此类标记的视图,它会将该视图的位置和尺寸传达给应用,以便应用可以将内容向内缩进该量,但仍可在工具栏下方的空间中保留合理的背景。例如,大多数应用都会使其 CarUiRecyclerView 中的第一个项目在指定的内边距下方开始,但在用户向下滚动时仍然在工具栏后面可见。
旋钮支持
为了支持旋钮控制器,基本布局必须尽早在布局中包含 FocusParkingView
。当用户看不到焦点时,此视图是获得焦点的视图。工具栏也必须包装在 FocusParkingView
中,该视图指定它是旋钮控制器的单独轻推区域。如果它没有包装在 FocusParkingView 中,则用户无法使用旋钮控制器与工具栏进行交互。
标签页
工具栏标签页通过 car_ui_toolbar_tab_item.xml
或 car_ui_toolbar_tab_item_flexible.xml
布局文件进行自定义。文件之间没有功能差异,car_ui_toolbar_tab_flexible_layout
布尔资源确定使用哪个文件。因此,建议将 car_ui_toolbar_tab_flexible_layout
设置为 false
,并且仅自定义常规布局文件。
标签页的 ImageView
将在 Java 代码中使用颜色 car_ui_toolbar_tab_item_selector
进行着色,因此 car_ui_toolbar_tab_item_selector
必须与布局一起自定义。应用也可以请求不对其标签页的图标使用此颜色进行着色。
标签页的 TextView
的文本外观在 Java 代码中设置为 TextAppearance.CarUi.Widget.Toolbar.Tab
或 TextAppearance.CarUi.Widget.Toolbar.Tab.Selected
,因此布局文件中设置的文本外观将不适用。这些样式也必须自定义。
菜单项
MenuItems
是默认工具栏右上角的按钮。它们可以是文本、图标、图标和文本或开关。这些变体都是 car_ui_toolbar_menu_item
布局文件的一部分,因为如果应用请求,MenuItems
需要能够在每种形式之间进行更改。
MenuItems
可以是主要的,它会扩充一个不同的布局文件:car_ui_toolbar_menu_item_primary
。主菜单项在视觉上必须与普通菜单项不同,例如通过带边框/无边框按钮。默认情况下,car_ui_toolbar_menu_item_primary
只是重定向到 car_ui_toolbar_menu_item
,因此它们看起来相同。
MenuItems
可以是已激活状态,这是另一种视觉状态,指示此菜单项已切换。此状态通过在 MenuItem 视图上调用 setActivated(true)
来实现,这会将 state_activated
状态添加到 MenuItem 视图中的所有可绘制对象。可以使用运行时资源叠加 (RRO) 中的可绘制对象选择器来响应此可绘制状态。
当车辆移动时,MenuItems
可以是 UX 受限状态。UX 受限状态只是另一种可绘制状态,如已激活状态,但这次状态是在应用而不是 Android 框架中定义的。这意味着 state_ux_restricted
属性也必须使用 RRO 进行叠加,以便 RRO 中定义的属性与应用中定义的属性匹配。
搜索
搜索栏包含在单独的car_ui_toolbar_search_view
布局文件中,以便提高不需要搜索栏的应用的布局扩充性能。ID 为 car_ui_toolbar_search_view_container
的 FrameLayout
将在扩充时包含搜索栏。