Cómo personalizar la barra de herramientas con superposiciones de recursos de tiempo de ejecución

Descripción general del diseño base

La barra de herramientas de car-ui-lib se personaliza a través del archivo de diseño car_ui_base_layout_toolbar.xml. Se llama barra de herramientas de *diseño base* porque este archivo de diseño contiene un FrameLayout con el ID car_ui_base_layout_content_container, que contendrá todo el contenido de la app poco después de que se aumente el diseño. Esta estructura permite que el OEM coloque la barra de herramientas en ubicaciones que no sean la parte superior de la pantalla.

Posibles diseños
Diseño 1 de la barra de herramientas Diseño 2 de la barra de herramientas Diseño 3 de la barra de herramientas
Diseño 4 de la barra de herramientas Diseño 5 de la barra de herramientas Diseño de la barra de herramientas 6

Si cambias los parámetros de diseño en car_ui_base_layout_content_container, la app se puede comprimir en un área más pequeña para dejar espacio para la barra de herramientas. Sin embargo, algunas personalizaciones pueden requerir que la barra de herramientas sea transparente y se superponga a la app. En este caso, las vistas se pueden etiquetar con car_ui_top/bottom/left/right_inset. Si car-ui-lib detecta una vista con esa etiqueta, le comunica la posición y las dimensiones de esa vista a la app, de modo que pueda aplicar sangría a su contenido hacia adentro por esa cantidad, pero aún así mantener un fondo razonable en el espacio debajo de la barra de herramientas. Por ejemplo, la mayoría de las apps tendrán el primer elemento de su CarUiRecyclerView que comienza debajo de los inserciones especificados, pero aún se puede ver detrás de la barra de herramientas cuando el usuario se desplaza hacia abajo.

Compatibilidad con rotativa

Para admitir controles rotativos, el diseño base debe contener un FocusParkingView lo antes posible en el diseño. Esta vista es la que se enfoca cuando no hay un enfoque visible para el usuario. La barra de herramientas también debe estar unida en un FocusParkingView, que especifica que es una zona de empuje independiente para el controlador rotativo. Si no está unido a un FocusParkingView, el usuario no puede interactuar con la barra de herramientas con el control rotativo.

Pestañas

Las pestañas de la barra de herramientas se personalizan con los archivos de diseño car_ui_toolbar_tab_item.xml o car_ui_toolbar_tab_item_flexible.xml. No hay diferencia funcional entre los archivos, el recurso booleano car_ui_toolbar_tab_flexible_layout determina cuál se usa. Por lo tanto, se recomienda mantener car_ui_toolbar_tab_flexible_layout set en false y solo personalizar el archivo de diseño normal.

El ImageView de la pestaña se teñirá con el color car_ui_toolbar_tab_item_selector en el código Java, por lo que car_ui_toolbar_tab_item_selector se debe personalizar junto con el diseño. Las apps pueden solicitar que los íconos de sus pestañas tampoco se tomen con este color.

El TextView de la pestaña tiene su apariencia de texto establecida en TextAppearance.CarUi.Widget.Toolbar.Tab o TextAppearance.CarUi.Widget.Toolbar.Tab.Selected en el código Java, por lo que no se aplicará la apariencia de texto establecida en el archivo de diseño. Estos estilos también deben personalizarse.

MenuItems son los botones de la esquina superior derecha de la barra de herramientas predeterminada. Pueden ser texto, íconos, íconos y texto, o interruptores. Todas estas variaciones forman parte del archivo de diseño car_ui_toolbar_menu_item, ya que MenuItems debe poder cambiar entre cada formulario si la app lo solicita.

MenuItems puede ser principal, que aumenta un archivo de diseño diferente: car_ui_toolbar_menu_item_primary. Un MenuItem principal debe verse visualmente distinto del MenuItem normal, por ejemplo, a través de un botón con o sin borde. De forma predeterminada, car_ui_toolbar_menu_item_primary solo redirecciona a car_ui_toolbar_menu_item, por lo que se ven igual.

MenuItems se puede activar, que es otro estado visual que indica que este MenuItem está activado. Para implementar este estado, se llama a setActivated(true) en la vista de MenuItem, que agrega el estado state_activated a todos los elementos de diseño en las vistas de MenuItem. Se puede responder a este estado de elemento de diseño con un selector de elementos de diseño en la superposición de recursos del entorno de ejecución (RRO).

MenuItems puede tener restricciones de UX cuando el vehículo está en movimiento. UX restringido es solo otro estado de elemento de diseño, como activado, pero esta vez el estado se define en la app en lugar del framework de Android. Esto significa que el atributo state_ux_restricted también debe superponerse con el RRO, de modo que el atributo definido en el RRO coincida con el atributo definido en la app.

La barra de búsqueda se encuentra en un archivo de diseño car_ui_toolbar_search_view independiente para mejorar el rendimiento de la inflación del diseño en las apps que no necesitan una barra de búsqueda. El FrameLayout con el ID car_ui_toolbar_search_view_container contendrá la barra de búsqueda cuando se expanda.