Android Dev Summit 2018 Livestream | Day 2, theater 1

Hola, buenos días a todos.
Te invitamos a tomar tu asientos. Como cortesía a los presentadores,
les pedimos a todos que silenciar sus dispositivos en este momento.
Buen día. Y bienvenido atrás. A todos, buenos días. ¿Podrías darle
la bienvenida nuevamente a la escenario, dan DPAN dan. Gracias
por llegar hasta aquí luminoso y temprano en la mañana. Dijimos
que las cosas estaban comenzando media hora antes. Bienvenidos a todos
en la transmisión en vivo y todas las personas que estaban mirando en nuestras
fiestas de visualización. Uno es Hoy no tenemos conversaciones relámpago.
Por favor, ya sabes, intenta quédese en ambas sesiones de
20 minutos, si puede. Comprobar el programe, una vez más, para asegurarse
de no perderse su favorito. Como
habrás notado, hubo un cambio de horario.

La conversación entre
D8 y R8 no se lleva a cabo. El señor Wharton tiene un proyecto
especial y lo felicitamos. en ese. En lugar de eso, tendremos Charla
Basura. Pero la parte emocionante, en este momento,
es que tenemos un estimado grupo hablando de plegable. [Aplausos]
Buenos días a todos. Mi Su nombre es Adrián Roos. Soy ingeniero
de software. Soy Andrii y trabajo en multipantalla.
Soy Jisun, soy director de ingeniería.
Estoy seguro de que ya habrás visto
el anuncio de que estamos asociarnos con Samsung y estamos
profundizando en lo que eso significa, lo que estamos haciendo para
apoyar a los desarrolladores de plegables dispositivos.

Jisun está aquí para hablar
más sobre lo que es Samsung haciendo. Entonces, con eso, se
lo entregaré a Jisun. Gracias. Entonces, nuevamente, soy Jisun
de Samsung Mobile y soy Voy a hablar sobre el nuevo dispositivo
de factor de forma, que anunciado en la Conferencia de
Desarrolladores de Samsung. Bueno. Entonces, cubriré más información
sobre el dispositivo, en sí, y además, hablaremos de
la experiencia, de lo nuevo dispositivo plegable traerá a los
usuarios.

Todos sabemos que el teléfono inteligente ha
estado brindando novedades. experiencias de los últimos
10 años. Y en realidad cambia la forma en que las personas piensan, actúan
y también se comunican. Además, También abrió muchas nuevas oportunidades
para el desarrolladores. Ahora, creemos que un
teléfono plegable es uno de los próximos revolucionarios, que brindarán
una experiencia única para los usuarios y también nuevas
oportunidades para los desarrolladores para impulsar innovaciones.
Bueno. Entonces, ahora hablemos de el primer teléfono plegable de Samsung.
La primera El teléfono plegable de Samsung está
diseñado para tener múltiples pantallas con dos pantallas y también
admite ventana multiactividad. Entonces, echemos un primer vistazo a
cuál es la configuración real en cómo se ve realmente la pantalla. Entonces,
esta es la pantalla principal, cuando el dispositivo está desplegado. La pantalla
principal es lo suficientemente grande para brindar una experiencia
única.

La experiencia se vuelve más rico y más
inmersivo. La experiencia fue Difícilmente alcanzable, incluso desde los teléfonos
inteligentes con pantalla más grande. Además de la experiencia desde una
única pantalla más grande, dos La multitarea estará disponible
para utilizar este mayor Pantalla con hasta tres ventanas
multiactivas. Cuando el teléfono está realmente
plegado, todavía tenemos muy Pantalla de cubierta útil y portátil
para usar.

En este modo, la experiencia es muy similar al uso diario
de su teléfono inteligente, pero en comparación con la pantalla
principal, la experiencia es más estar enfocado y tener una interacción
práctica y rápida, para realmente aprovechar la pantalla pequeña.
Entonces, dicho esto, aquí están algunos números que te pueden
interesar. Este es el especificaciones y las dimensiones de las pantallas
reales.

Entonces, 4,5 pulgadas La pantalla de la cubierta proporciona una
resolución 21:9HD plus y una 320DP. Pantalla
principal 4.2 plus de 7,3 pulgadas resolución con el mismo 420DP con
585DP es el más pequeño ancho. Estos son los números que
quizás necesites saber. Ahora les mostraré algunas experiencias
de usuario esperadas con algunos ejemplos. Entonces, comparando
la experiencia entre los existentes teléfono inteligente y pantalla principal
plegable, el plegable es plegable y puede ubicarse más grande
para la aplicación y realmente permite que los contenidos,
en la pantalla, sean más ricos y más detallado, como puedes ver
en la pantalla.

En la pantalla de portada, cuando el dispositivo
está plegado, dije la experiencia. se puede optimizar para proporcionar
un acceso rápido y fácil y interacción. Si bien el dispositivo es
completamente funcional, como un teléfono inteligente normal.
Accede al panel rápido o notificación o llamada o
mensajería es bueno resaltar la pantalla de la cubierta. Sabemos que
es posible que no quieras desplegar tu teléfono para atender una llamada entrante. Si bien la pantalla de portada y la pantalla
principal, cada una proporciona su propia experiencia única. Es
entre ellos, no separados. ni desconectado. Más bien, la experiencia
del usuario, entre el pantalla, es muy continua y está conectada
sin problemas. Por ejemplo, si desea buscar
la ubicación del centro desde un mapa, puedes hacerlo
con tu teléfono plegado. Sin embargo, si abres tu teléfono,
la aplicación aún continúa corriendo.

Aún más, desplegar
el teléfono en realidad proporcionar más información con más
señales visuales, como qué es cerca y cuál es la ubicación
del otro punto de interés. Usar la aplicación de galería es similar.
La experiencia de la aplicación continúa entre el modo plegado
y también el modo desplegado. Las ventanas multiactivas para realizar
múltiples tareas también son una de las características clave.

Entonces,
mientras miras un video de YouTube, si desea navegar por un sitio web, puede simplemente
abra un navegador y navegue por el sitio
web mientras su video continúa jugando. Además,
si tu amigo envía mensajes y aparece la notificación,
puede capturar el notificación y arrástrela a una tercera
ventana, como esta, para continúa chateando y navegando, mientras
tu video aún se mantiene jugando. Entonces,
tenemos esto esperado experiencia con el nuevo dispositivo plegable,
por lo que ahora Adrian, de Google, hablará sobre la guía para
desarrolladores y también algunos Compatibilidad con Android para que
sus aplicaciones se adapten mejor al plegables.
Gracias por compartir eso, Jisun. [Aplausos] Entonces,
hablemos un poco más. sobre cómo puedes aprovechar los elementos
plegables en tus aplicaciones y tipo de pautas que podríamos recomendar
para hacerlo.

Entonces, primero arriba es la continuidad de la pantalla.
Es lo que llamamos el concepto de continuar con lo que estás haciendo actualmente
después de doblar o desplegar el dispositivo. Y aquí tenemos
un ejemplo: tienen un mapa. Estás mirando en un dispositivo
plegado. Y te gustaría ver tal vez un poco más sobre los
alrededores del lugar donde estás mirando a. Entonces, como usuario, despliegas
el teléfono y con el experiencia continua, seguimos
mirando al mismo lugar, su estado se mantiene y el teléfono
puede tardar un poco más ventaja del factor de forma. Y esto
en realidad no es realmente algo nuevo en Android, ¿verdad? Hemos tenido
que lidiar con situaciones similares.

Situaciones anteriores, con cosas como la
rotación de la pantalla o el cambio — cambiando el tamaño de la pantalla o — lo
siento. Cambiar el tamaño de las ventanas en multi-ventana. Entonces,
¿por qué debería importarte ¿Continuidad cuando construyes tu aplicación?
Bueno, los usuarios despliegan sus dispositivos por una razón y generalmente
es porque quieren bucear profundizar más en la tarea que están
realizando actualmente. De modo que realmente funciona mejor cuando no
se les interrumpe en su experiencia al hacerlo y pueden
continuar donde lo dejaron antes de desplegarse. Entonces,
para un usuario satisfactorio experiencia, es muy importante
que esto funcione bien. Eso parece genial. Ahora bien,
¿cómo se logra esto? Bueno, como dije, Android está
familiarizado con esto y hemos construyó un sistema para lidiar
con eso. Plegar y desplegar el dispositivo será tratado como un
cambio de configuración en el Tamaño de pantalla y categorías de
diseño de pantalla.

Y para apoyarte con eso, el sistema Android,
por defecto, recrea tu actividades cuando ocurre un cambio de
configuración. Esto tiene la ventaja de encargarse de cualquier
cambio de diseño que usted podría querer hacer al aprovechar
las nuevas configuración. Pero también significa
que tú, como aplicación, estás responsable de restaurar el estado en el que
se encontraba el usuario después de eso La actividad se recrea. Para
apoyar con eso, tenemos un instalación estatal y la introducción de una
nueva biblioteca Jetpack llamada ViewModel para ayudarte con
eso.

Alternativamente, también podría
decidir manejar el la configuración cambia tú mismo simplemente
aplicándola y ajustando su diseño. Para ello, puede
declarar que puede manejar el cambio de configuración en su manifiesto,
pero eso significa que tendrá que ajustar manualmente el tamaño
de la pantalla. Asegúrese de implementar correctamente
la ventana múltiple y declarar su actividad como redimensionable.
Ahora, a continuación, haremos algunos cambios en el ciclo de vida en ventanas
múltiples. Puedes ver el Comportamiento actual de la izquierda.
Es que solo la actividad que el usuario tocó por última vez está
en el estado reanudado mientras todos los otros están en estado de pausa. Esto es
un poco confuso para los usuarios.

Porque no es capaz de ver inmediatamente
por qué algunos están en una Estado menos interactivo y es una
cosa más que debes conservar. Tenga en cuenta, como desarrollador, cuando
apunta a ventanas múltiples. Eran introduciendo el modo de reanudación múltiple.
Es bastante simple, de verdad. Todo las actividades en multiventana que están
en la parte superior y son visibles están todos en el estado de currículum.
Ahora, Android Pie no venía con este
comportamiento originalmente Por eso vamos a hacer de esto un comportamiento
de participación voluntaria en Android Pie.

Solo se aplicará con las operaciones del
desarrollador de la aplicación y el El fabricante del dispositivo realmente implementa
esta característica. según nuestras especificaciones. Pero
tenga en cuenta que en futuras versiones de Android, esperamos que este comportamiento
sea obligatorio. Entonces, digamos que tienes una aplicación
y quieres aprovecharla. Este ciclo de vida simplificado, ¿cómo
se inscribe? Nuevamente agregas una bandera a su manifiesto
de Android. Hay una advertencia Sin embargo, debido a que hay múltiples
actividades que pueden ser se reanudó al mismo tiempo. Tenga
mucho cuidado con el código que almacena la actividad reanudada porque
ahora podría haber más que uno de esos. Tenga cuidado con
las bibliotecas y los marcos que podrían hacer las mismas
suposiciones. Y con eso se lo voy a pasar
a Andrii, que va para hablar de ventanas
múltiples / pantallas múltiples.

Entonces, hablemos un poco más sobre los
dispositivos multipantalla. A se puede iniciar una actividad en una
pantalla. Veamos qué es realmente significa para su actividad.
En primer lugar, cuando un actividad está en una visualización no predeterminada,
el contexto de la actividad es diferente del contexto de la aplicación
no visual, también disponibles en receptores de radiodifusión
y proveedores de contenidos. El contexto de una entidad visible se
ajustará para la visualización. zona donde se muestra. Si utiliza la
misma API para obtener el visualización actual y usar un tipo
de contexto diferente para preguntar para ello, obtendrás resultados
diferentes. La pantalla actual, puedes conseguir, es desde
la actividad y la aplicación El contexto siempre le dará la visualización
predeterminada.

Un contexto diferente también significa
diferentes recursos y configuraciones. Se actualizará
automáticamente para usted. Todo lo que necesitas hacer es solicitarlos
desde el contexto correcto. Cuando quieras ajustar tu UX, deberías
utilizar una actividad. Tenga en cuenta que el usuario puede
mover su actividad de una pantalla a otra en cualquier momento. En la
mayoría de los casos, puedes esperar este lugar tiene diferentes tamaños,
densidades y resoluciones. Esto significa que la actividad
que fue silenciada se volverá el cambio de configuración. Si se
declara para manejar el cambio, será notificado con la nueva
configuración. Si no, será ser lanzado. Para
ofrecer la mejor experiencia, Le recomendamos que maneje los cambios
de configuración siempre que es posible y si su aplicación necesita
saber qué pantalla, usted Puede encontrarlo en pantalla. ¿Qué
pasa si quieres tomar? ventaja de estas pantallas adicionales?
¿Cómo los usas? El primer paso es para obtener información sobre las
pantallas. Puedes consultar sus banderas,
métricas y estados. Por ejemplo, puede buscar una pantalla en vivo para proporcionar
contenido multimedia o filtrar apaga las pantallas que están actualmente
apagadas.

Una vez que haya determinado qué
pantalla desea utilizar, puede inicie su actividad allí usando la API
de opciones de actividad, disponible en Android E/S. Si desea
una nueva instancia de un actividad, es posible que desee utilizar las
banderas correspondientes y utilizar nuevos tarea para este lanzamiento.
A veces el sistema puede restringir los lanzamientos de actividades a algunas
pantallas determinadas, por ejemplo ejemplo, exhibiciones privadas. Puedes
esperar esto. Recuerda que existen varias plataformas
que realmente tienen dispositivos multipantalla. Los teléfonos
son un ejemplo que hemos cubierto. hoy. A continuación,
está el modo de escritorio. Cuando conecta su teléfono a una pantalla
más grande para mejorar productividad o entretenimiento. Aplicaciones
de Android que se ejecutan en Chrome SO. En ambos casos, las aplicaciones
generalmente se ejecutan en modo de forma libre y el usuario
espera que sean libres y redimensionable sin problemas.

Por último,
pero no menos importante, está el automóvil. Androide. Puede que haya muchas pantallas
en un coche. Por ejemplo, Los niños en los asientos traseros pueden
estar jugando juegos iguales o diferentes. mientras el conductor utiliza la
navegación. Para las aplicaciones, en general, no
debería haber demasiadas. diferentes. Para verificar el comportamiento de su
aplicación, en cualquier dispositivo Android ejecutando O o superior, puede crear
una visualización simulada y Inicie su actividad allí. En
este momento, simulado La pantalla no soporta el tacto. Estamos
trabajando para mejorar esto. y vamos a agregar nuevas herramientas
para desarrolladores. Con todas estas plataformas nuevas
y existentes, puedes elegir Optimice su aplicación y cree una
experiencia multipantalla. Tú Puede probar su aplicación y configurar
los modos de inicio correspondientes. No olvide que en este caso pueden realizarse
múltiples actividades. enfocado. Considere también el uso de
los datos compartidos y tome ventaja de otros componentes de la arquitectura.
[Aplausos] Entonces,
hemos hablado sobre lo que es disponible hoy.

Veamos
más lo que habrá en el futuro con dispositivos plegables
y multipantalla. En el A corto plazo, para Android Pie, estamos
trabajando en desarrolladores. pautas y le mostraremos
cómo orientar mejor Dispositivos plegables y multipantalla.
También estamos trabajando en una publicación de blog que se publicará
y que tendrá más información sobre todo lo que hablamos.
Y nosotros también somos trabajando con Samsung para lanzar un
emulador donde podamos desarrollar y pruebe sus aplicaciones contra los comportamientos
de cambio de configuración y los comportamientos de reanudación múltiple
que su dispositivo va a realizar. tener. Mirando
un poco más hacia el futuro, con futuras versiones de Android,
estamos implementando soporte para dispositivos plegables
y multipantalla y como parte de esto, también vamos a
mejorar el emulador, para que tendrá soporte para simular todos
aquellos plegables y comportamientos de múltiples pantallas,
como también mencionó Andrii. Finalmente, algunos consejos sobre dónde
puede encontrar más información. En los próximos días publicaremos
esta entrada en el blog.

Hay un sitio para desarrolladores de Samsung
donde encontrará más información sobre los dispositivos de Samsung y
sus directrices y para realizar pruebas sus aplicaciones, el emulador de Samsung
también estará disponible en sus sitio web en algún momento del cuarto
trimestre. Bueno. En este punto, yo También me gustaría agradecerle por todas
las increíbles experiencias que Los desarrolladores están creando para
Android y estamos muy emocionados. para ver qué harás a continuación y qué
harás a continuación en este próximo factor de forma de dispositivos
plegables. Gracias. [Aplausos] esté
en el área de preguntas y respuestas donde pueda Habla con nosotros más tarde, en el próximo
descanso. Está bien. Sólo quería tener
algunas cosas menores. Uno es Que hayas notado que vamos a tener estas
diapositivas de preguntas y respuestas.

Estos tienen estos códigos QR
y le permiten calificar todos las sesiones aquí en la Android Dev
Summit. Por favor déjanos saber. Esta vez experimentamos mucho
con el contenido. Lo segundo es que sé que no tuvimos
la conversación sobre D8 y R8, pero tenemos el líder de ingeniería
en el área de pruebas. Si Si está interesado en R8, salga
y haga preguntas en el zona de arenero. Puedes valorar todas las
sesiones, durante todo el día, hoy, desde el código QR único. Así
que muchas gracias. Disfrutar el resto de tu día. Todos, la próxima sesión, en
esta sala, comenzará a las 10:20 a.m. Gracias. Todos, bienvenidos de nuevo.
Os invitamos a tomar asiento.

Nuestro programa estará en marcha
en tres minutos. Como un Cortesía de nuestros presentadores,
silencie sus dispositivos. Bienvenidos todos. Por favor, se sentado. [Aplausos]
Buenos días. Soy Chris. Y yo soy Alan. Estamos
aquí para hablar de píxeles. Necesitamos pensar en
las tecnologías reales. Allá Son dos las tecnologías predominantes, LCD.
La mayoría de los dispositivos son pantallas, desde el nivel medio hasta
el nivel alto. E incluso en las plataformas,
se están moviendo hacia eso tambien. LCD
significa cristal líquido mostrar. Trabajan con lo que ellos llaman
cristales líquidos, por lo que cada píxel se compone de un canal
de color.

Requieren un retroiluminado. Entonces esos cristales
líquidos no iluminan. ellos mismos. Ahora, la mayor parte de la
energía de una pantalla LCD se gasta en esa retroiluminación. Entonces,
más brillo es más potencia. Las pantallas Olet son diodos que, en realidad,
emiten luz por sí mismos. por lo que no hay necesidad de
retroiluminación. Lo bueno, aquí, es que permiten un negro verdadero.
Entonces, con LCD, la forma logras el negro es encendiendo todos
los cristales para que puedas Realmente nunca consigo ese negro
oscuro. Los olets son diferentes. No encienden
el pixel y así es como te pones negro. Ahí es donde está
el poder. Y el El poder se alimenta mediante la emisión
de luz. Ahora bien, hay una serie de arreglos, tienes R, G y B.

Entonces,
veamos más directo y mentalmente simple. Los hay
más complejos, como RGBR. Cada píxel solo tiene dos
canales. es una manera de ampliar el tamaño de píxel sin
colocar tantos LED en él. En términos de energía, más LED equivalen
a más consumo de energía. hemos estadísticas realizadas durante el último
año o dos y la pantalla tiende a ser el mayor usuario avanzado de su dispositivo.
Ves un gráfico, el pantalla, más energía utiliza.
Todos asumen que este es el caso.

Pero la cuestión es que en realidad
es bastante lineal. De nuevo, algo simple. Pero
luego empezamos a comparar oled dispositivos versus pantallas LCD y
es el píxel versus eso. Nosotros tener una captura de pantalla de mapas en un modo
diurno normal y en un modo nocturno modo. La razón por la que usamos
una captura de pantalla es porque no Quiero que las diferencias sean iOS o Android para mostrarlo.
El amperaje real en la noche.

Y el día es el mismo. Eso
no cambia porque es un Pantalla LCD. Pero en el píxel
en sí, porque es un OLED. En la pantalla, la potencia cae un
63%. El mayor usuario avanzado en su dispositivo, usando un tema oscuro.
Profundizando más en ello, cuando tienes
colores de píxeles individuales… entonces, hicimos una prueba en la
que mostramos un color en la mostrar. Y el color real, en sí
mismo, marca la diferencia en fuerza. El azul tiene un 24% más de poder
que, digamos, el verde o el rojo. Y luego, otro gráfico, que es más
o menos un resumen de la gráfico anterior, pero puedes ver que el
negro está usando la menor cantidad cantidad de poder.

Sube y sube hasta
que nos ponemos blancos. Porque El blanco usa canales para cada uno, es
completamente rojo, completamente verde, azul completo, requiere la mayor cantidad
de color y adivina cuál ¿Cuál es el color hacia el que te hemos
estado empujando? Cambiamos de hueco a este tema blanco y nos disparamos
en el pie en términos de poder. Veamos
las aplicaciones de Google el último año y los ahorros de
energía que han podido lograr tener. Aquí YouTube, brillo total. Ahorras
el 43% de tu batería uso. Cuando estás reproduciendo
un vídeo, no importa de todos modos.
Ahora cuando esté en pausa, guardamos aún más, es el 60%. Supongo que aquí
es porque la superposición de el video en realidad oscurece el video,
ya sabes, usamos un color uniforme color más oscuro así ahorramos más energía.
Esta prueba, en sí misma, Depende mucho del contenido del
vídeo.

Si tienes un vídeo que sea completamente blanca, no
vas a ahorrar tanto. Gboard es un buen ejemplo. Los usuarios pueden
controlar esto y ahorrar el 20% de su batería o el uso de la pantalla de
la batería, simplemente cambiando a un tema oscuro. Finalmente,
en Maps, este es el ejemplo de tema oscuro y donde
es realmente genial porque Tiene los beneficios obvios de la
batería. No quieres mapas siendo un tema muy blanco cuando
conduces de noche. Entonces El tema oscuro, aquí, hace que la aplicación
sea más utilizable durante la noche. configuración.
Y ahora Alan va a hablar. Está bien. Entonces, ¿cómo podemos abrazar
el lado oscuro de alguna manera? ¿Implementar el modo oscuro en nuestras aplicaciones?
Entrando en tema oscuro. Cual No nos ahorrará batería
aquí, pero sí en su dispositivos.

Entonces, quizás recuerdes
el modo nocturno del desarrollador. vista previa de Android el año pasado
o el año anterior o el año antes de eso o el año anterior
a eso. Pero, liberamos Soporte día/noche en compatibilidades
de aplicaciones. Hay un gran blog artículo al respecto. Nuestra
forma recomendada de implementar Modo oscuro en tu aplicación y
básicamente obtenerlo gratis es Día/Noche. Puedes conseguirlo
casi gratis. La acción Los widgets responderán a los cambios
en la noche del dispositivo. Modo y puede alternar entre el modo
Claro y Oscuro. Esto es la demostración de la caja
de AndroidX.

Si lo tienes de AOSP, puedes echarle un vistazo. Es
una línea de código para cambiar entre cualquier tema que estés usando antes
y la compatibilidad de la aplicación. Simplemente tomas el tema de tu
aplicación y lo tienes inherente a uno de los
temas día/noche. Todo podría funcionar. También
puedes aplicar una superposición. tema dinámicamente en tiempo de ejecución.
Así que si quieres tener un puro Temas oled negros, hay algunas
aplicaciones que ya hacen esto o un tema rosa de Hello Kitty, puedes hacerlo
en tiempo de ejecución. Si usted Si quieres aprender más sobre temas superpuestos,
Chris y yo hablamos sobre aquellos en I/O hace unos años. Esto garantiza
que cada vez que un tema sea configurado, lo superpondrá inmediatamente
con el tema negro o un tema de Hello Kitty y cualquier
punto de vista que se infle será usando ese tema correctamente.

Está
bien. De cualquier manera, eres Querrás estructurar tu aplicación según
los atributos del tema. Todo Los elementos de diseño de la plataforma
dependen en gran medida de los atributos del tema. para obtener sus colores. Color de primer
plano, control de color acento de color normal. El pulgar…
lo siento, el interruptor que Puede arrastrar hacia la izquierda y hacia
la derecha, lo que se encuentra debajo es de color gris claro cuando está habilitado.
Y gris oscuro cuando está deshabilitado. La
implementación de eso es sólo una selector de color, una lista de estados
de color que se refiere al color atributo, que es blanco bajo un tema
claro. Negro sobre una oscuridad tema y un alfa. Variamos eso según
la luz y la oscuridad. temas. No
hay colores codificados aquí. Hablaremos más sobre esto
más tarde hoy, en una charla. con Nick Butcher sobre temas
y estilos. Está bien.

Entonces, mencioné que
apareció el modo nocturno. El El calificador ha estado ahí desde
el SDK 8. Se abrió para uso general en Android N, por lo que la posibilidad
de configurar la noche calificador en todo el sistema, hay algunas aplicaciones
que accidentalmente configuran él. Messenger ha estado haciendo
eso recientemente, ha sido fijado. Es un
calificador de investigación. similar al retrato o al
paisaje. Simplemente creas un dibujable/noche y si tienes recursos
que son difíciles de extraiga los colores del tema, digamos que tiene
una imagen de presentación de bienvenida eso es complicado, puedes obtener
una versión oscura de eso y es demasiado complicado para ponerlo en
un dibujable vectorial, puedes soltarlo en la noche dibujable. Recogerás ese
elemento dibujable automáticamente. Lo mismo ocurre con los colores, si
hay colores que deseas cambiar, dice que su color de acento es más oscuro,
puede extraerlo a un nombre recurso de color, tiene una versión
en colores, una versión en valores noche.

Entonces,
aquí está cuál es el tema. cómo puede verse la implementación.
Si quieres cambiar tu tema principal basado en el calificador
nocturno, lo defines una vez en valores y una vez en valores noche
y darle un padre diferente. Cuando no sea el modo nocturno,
seleccionarás el tema de la luz. cuando se hace referencia en modo nocturno,
cuando el calificador nocturno está activado, retomarás el tema nocturno.
Tenemos el mismo color referenciado
de dos maneras diferentes. Se iluminará en negro en el
modo no nocturno. escogería blanco en el modo nocturno. Cuando
puedas actualizar tu aplicación, tal vez hacer un poco de reestructuración.
Tomar un captura de pantalla de su aplicación, inviértala
y vea cómo se ve.

Obtener una idea de si hay imágenes que
necesitarás para tener una versión alturniva de. Tenemos avatares,
tal vez queramos cambiar. los colores de fondo un poco, por lo
que eso puede significar extraer atributos de tema o diferentes conjuntos
de PNG para colocar Noche de dibujables. A continuación,
desea realizar una encuesta. del uso de colores en su diseño
XML y en sus estilos.

Configura el padre de tu tema para que
sea algo oscuro, theme.appcompat o theme.material.
usted querrá Mire y vea si está perdiendo contraste.
Lo que tu Verás, debería verse así. Todos
los colores de fondo y Los colores de primer plano estaban
codificados para ser un tema claro. Lo único que no estaba
codificado (y casi se puede véalo aquí: es la etiqueta del
nombre, que ahora es invisible porque es lo único
que tira correctamente en los atributos de color del
tema oscuro.

Entonces esto va requerir mucho trabajo. lo
dificil es hacer eso trabajar. Entonces, querrás refactorizar
tus colores tanto como sea posible. posible. Tome cualquier diseño codificado
en sus XML y muévalo a recursos de color con nombre.
Puedes basarlos en valores/noche de valores. Si quieres
hacer más de un tema, querrás extraerlos para colorear
atributos que tengan algunos algún tipo de significado en su
aplicación. Tenemos color de texto primario, tenemos color hacha enviado,
tenemos color primario. Tú debería usarlos tanto como sea posible
y ciertamente tomar ventaja de los atributos del tema para
especificar colores, propagarlos en sus listas
y diseños. Puede convertir sus PNG en máscaras
alfa y convertir tintes. Puedes envolver aquellos donde hay un mapa
de bits. Hablaremos, de nuevo, un un poquito más sobre esto en la
charla de temas y estilos hoy. A continuación,
te mueves y obtenga cambio automático en modo nocturno.
Aquí tenemos el Twitter. aplicación, que tiene una posibilidad
muy obvia para cambiar entre día y noche.

Entonces, si tocas
esto, entra en modo oscuro. Hay un nodo oscuro especificado en la plataforma,
por lo que es posible que tengas un triestatal.
Tú también querrás probar que su aplicación funcione cuando cambie
el Modo nocturno. Puedes usar ABD, abre tu aplicación, una vez que hayas
implementado el tema día/noche, cambiarlo a noche, sí. Va a
pasar por un completo visualización, recreación y conservación
de datos. En dispositivos Pixel 3 que ejecutan
P, el modo nocturno cambiará y ingresa al modo de ahorro de batería. Puedes
alternarlo desde el desarrollador. opciones y empujar el nodo might para que esté
siempre encendido, siempre apagado o uno de las cosas heredadas que tenemos está
cambiando según el tiempo de día. Puedes
aprender más en los temas. y charla de estilos que daré
con Nick Butcher más adelante hoy. Si desea obtener más información
sobre el nivel inferior cosas, Chris y yo dimos una gran charla
en Google I/O.

De modo que Cubre todo lo que quieras saber,
pero has tenido miedo de hacerlo. Pregunta por temas y estilos.
Estaremos afuera en el Android Lounge para responder a cualquiera
de tus preguntas. Gracias a todos por venir. Por favor
abraza el lado oscuro. [Aplausos] Hola, bienvenido a Cómo mejorar la duración
de la batería con restricciones. Mi nombre es Jingyu Shi, soy socio
desarrollador. Hola, soy Amith Yamasani.
Hoy queremos empezar con Esta notificación la hemos recibido
todos, ojalá nunca aparezca. esta hora del día. Saber que nuestra
batería se está agotando puede ser Realmente frustrante y a veces aterrador
dependiendo de dónde estemos. y lo que estamos haciendo en este momento.
En estos días, confiamos tanto mucho en nuestros dispositivos
para navegar, hablar con nuestro amigos y familiares, tomar fotografías
e incluso traducir para nosotros cuando viajamos a un país
extranjero.

Pero todas estas funciones interesantes y aplicaciones
increíbles que creaste no puede ayudar al usuario si su batería
está agotada. Asi que es por eso hoy estamos hablando de cómo
vamos a mejorar la batería, Con tu ayuda, espero. Y esto
es lo que vamos a hacer cubrir. Primero, hablaremos sobre
qué consume energía y cómo medimos el consumo de energía
y luego vamos a pasar las funciones de ahorro de energía que hemos
introducido en años de funciones y cómo su aplicación se verá afectada por
estas restricciones. A continuación, se lo pasaré a Amith para
que hable sobre lo que consume. fuerza. Hola.
Analice rápidamente cómo De hecho, estimamos cómo consume energía
una aplicación, cuánta energía está consumiendo en el dispositivo.
Estos son los típicos Componentes, componentes de hardware
que consumen energía.

He destacaron los principales consumidores.
Tienes un oído lleno de exhibición. Funcionar a altas frecuencias también
es bastante caro y transferir datos a través de la red celular
es bastante costoso, ya que Bueno. Entonces,
cuando cada dispositivo está Fabricado, el OEM tiene un perfil
de potencia. que contiene es la corriente promedio consumida por
varios subsistemas que queremos medir en tiempo real y, por ejemplo,
si giras la pantalla encendido, con brillo mínimo, podría
ser alrededor de 100. Si súbelo al brillo máximo, digamos
que agrega otros 300. Entonces, hacemos un seguimiento de eso en
tiempo real. La CPU tiene diferentes consumos de energía. En tiempo
de ejecución, lo que hacemos es, Hay un subsistema llamado estadísticas
de batería. Seguimiento de lo que cada aplicación está haciendo. Mide cuánto
tiempo está consumiendo cada uno de estos recursos, como cuánto tiempo
de CPU, a qué frecuencia, cuánto muchos paquetes de datos se están transfiriendo
y así sucesivamente y nosotros multiplicamos por el coste de energía de
cada uno de ellos y obtenemos un estimación aproximada de cuántas horas
tiene la aplicación en particular agotado y clasificamos las aplicaciones,
presentadas al usuario, para que pueden ver eso en los entornos y aprender
por sí mismos lo que es realmente agotando su batería.

Entonces,
hablemos de cómo el sistema operativo está tratando de ayudar al usuario a extender
la duración de la batería. Pero, En primer lugar, en términos generales, hay
dos razones por las que la aplicación se ejecuta, el usuario lo inicia,
se ejecuta en primer plano, el usuario utiliza activamente la aplicación.
Como desarrolladores, eso es algo No quieres que no lo hagan, pero eso
es completamente diferente. tema sobre bienestar digital y
tratar de, ya sabes, ayudar los usuarios controlan cuánto tiempo dedican
a las aplicaciones. Pero una nota que quiero dejar aquí
es que hay un concepto sobre suspender aplicaciones y eso
es algo que quizás quieras leer sobre y cómo esto afecta su aplicación
si el usuario suspende la aplicación durante, digamos, el resto del día.
Pero nos centraremos en cómo intentamos limitar
la actividad en segundo plano desde Una aplicación.

Una aplicación puede programar
trabajo en segundo plano mediante trabajos o alarmas. También puede registrarse para
devoluciones de llamadas externas. desencadenantes como mensajes push
o pasar por una geovalla. A lo largo de los años, hemos introducido varias
funciones en el sistema operativo para ahorrar batería. Primero, en
Marshmallow, presentamos Doze. Pone el dispositivo en un sueño profundo.
Digamos que lo dejaste encendido su escritorio o mesita de noche, básicamente
apaga una gran cantidad de la actividad en segundo plano para que
realmente puedas ampliar tu duración de la batería.
Pero en realidad no es así como Usamos nuestros teléfonos diarios, ¿verdad?
Estamos caminando con eso.

Entonces se nos ocurrió Doze on The
Go. Él lo pone a dormir ligeramente. No
está frente a ti, no lo estás usando la pantalla para poder
cerrar parte del fondo trabajar. Probablemente
todos estén familiarizados con las oreos restricciones a los servicios en segundo
plano. A partir de este mes, todos deben apuntar a Android Oreo
arriba. Pero nos centraremos más en las novedades
P, Batería adaptable, Ahorro de batería.
La batería adaptable es una revolución de App Standby que se
introdujo.

Puso la aplicación dos posibles estados, activo o
inactivo. Batería adaptable extiende esto en cuatro cubos.
Según el uso, lo movemos a algunos otros cubos. Por
ejemplo, si eres Google I/O e instalas la aplicación I/O, debería
ir a la aplicación rara porque no lo has estado usando.
Entonces, ¿cómo asigna el sistema operativo estos
depósitos a cada aplicación? Comienza desactivado cuando estás instalando la
aplicación en otro depósito, no es mostrado aquí, en realidad no es tan
relevante. Una vez que inicie el aplicación, o cada vez que inicias la aplicación
o cualquier tipo de fuerte interacción, como hacer clic en una notificación,
la aplicación pasa al cubo de aplicaciones y permanece allí
por un tiempo, tal vez en unas horas baja y comienza a aplicar
restricciones. y un un poco más tarde, más frecuente
y luego muy raro y luego desinstala tu aplicación. Estoy bromeando.
Nosotros no hacemos eso. [Risas] Si
estás mirando un notificación, no es una indicación
clara de que sea un activo uso de la aplicación, por lo que la pusimos
en un estado ligeramente restringido, cual es el conjunto de trabajo.

¿Qué
tiene realmente de adaptativo esto? es que si el dispositivo tiene un algoritmo
de aprendizaje automático, observa tus patrones de uso, aprende con el tiempo
y decide, está bien, esta aplicación probablemente se utilizará en
las próximas horas, déjame ponlo en el conjunto activo y
tal vez pueda refrescar su datos. Y una vez que siente que tal
vez la aplicación no va a funcionar usado por un tiempo, es posible que lo mueva
hacia uno de los niveles inferiores cubos así que esto realmente aprueba su capacidad de la cantidad
de aplicaciones que utiliza en el fondo. No es
tu culpa, no lo haces saber cuándo el usuario te iniciará,
así que estamos intentando ayuda con eso. Las restricciones
son otra característica.

Limitamos lo que la aplicación puede hacer en
segundo plano. se cumple mayoritariamente para aplicaciones que deseas
hacer en primer plano. Hay dos formas en que la aplicación puede entrar en
este estado. El usuario podría ver, en configuración, que su aplicación
está agotando la batería y decide restringir manualmente la aplicación. El
sistema está monitoreando ciertos criterios y si considera que está
haciendo algo excesivo, sugiere al usuario si desea restringir
esta aplicación porque está agotando la batería
en segundo plano. Estas son cosas que mejoraremos y
los OEM pueden agregar este. Los
trabajos habituales, alarmas, servicio terrestre completo. En lo
que respecta al usuario, es un cosa de fondo si ves que
algo sucede con un notificación y está funcionando en
segundo plano. FCM, a partir de enero también estará restringido.
Entonces no obtendrás ninguno mensajes cuando su aplicación está en
estado de reposo. no entiendes actualizaciones de ubicación y una cosa que es
única acerca de la aplicación Las restricciones son incluso mientras
el dispositivo se está cargando, no te permite ejecutar en segundo plano.
La razón es que esto no es sólo de ahorrar batería, también se
trata de molestias y tal vez preocupaciones sobre la privacidad.
Es muy similar a como Las restricciones funcionan.

Algunos de los las diferencias están en primer plano, está
bien ejecutarlo en Ahorro de batería. No hay restricciones para las notificaciones
automáticas. Y una cosa nueva en Pie es que
desactivamos la ubicación. servicios por completo, al menos en dispositivos
Pixel, es posible que los OEM no elige hacer eso. Puedes preguntar
estadísticas de usuario, ¿qué es? su depósito de reserva actual,
en este momento. Si quieres depurar algo, también puede obtener
información histórica sobre su grupo de espera cambia. Puedes
comprobar si estás fondo restringido en este momento
y tal vez quieras decirle al usuario algo sobre eso. Por favor,
no moleste al usuario. Si No quieren que corras, no quieren
que corras. Y también puedes comprobar si el ahorro
de batería está activado internamente. se llama modo de ahorro de energía.
Gracias, Amit. Entonces, ¿cómo se ve afectada tu aplicación?
Entonces, en cualquier momento al sistema, su La aplicación será uno de estos
dos estados.

Será en el primer plano o el
fondo. Y cada vez que tu aplicación se considera en primer
plano, todos estos Se eliminan las restricciones para que
puedas correr cuando lo necesites. Cuando tu aplicación está en segundo
plano y el dispositivo no se carga todas las funciones de ahorro de batería
de las que Amith acaba de hablar cualquiera de ellos podría estar habilitado,
lo que significa que sus trabajos, Las alarmas, el acceso a la red y los mensajes
FCM podrían estar restringidos. A continuación, tenemos algunos
diagramas realmente hermosos, que mostrarle cómo se ven afectados. Primero
hagamos trabajos programados. Dadas todas las limitaciones que tiene
en el trabajo, está satisfecho ificado, estas son las cosas que afectarán
su funcionamiento.

Si se va, su trabajo se trasladará a la ventana
de mantenimiento. Si el usuario decide activar el ahorro de batería o las restricciones
de aplicaciones, es decir restringir su aplicación de esa configuración
de batería, su trabajo aplazarse hasta que el usuario abra la aplicación
o la aplicación esté en el primer plano. Su
trabajo podría ser aplazado hasta 24 horas, es entonces cuando tu aplicación
pertenece al grupo raro y ese es el peor de los casos, lo que significa
que incluso en el En el peor de los casos, su trabajo se ejecutará
todos los días. De manera similar, para las alarmas del administrador
de alarmas, afectará cuando su alarmas de incendio. Cuando esté en modo
Dormir, la alarma se aplazará hasta ventana de mantenimiento.

Si el usuario
activa el ahorro de batería o restrinja su aplicación, su alarma se
diferirá hasta que su aplicación está en primer plano. Y finalmente, al
grupo de aplicaciones en espera, tu La alarma podría retrasarse hasta dos horas
si su aplicación pertenece a ese raro cubo. Si su
caso de uso requiere que tiempo exacto de ejecución, entonces,
por ejemplo, si desea recordarle a un usuario necesita tomar medicamentos
o un programa de televisión que al que se suscriben está por comenzar,
por lo que para estos casos de uso, Puedes usar este método de ídolo para
que tu alarma suene a tiempo.

Pero estás usando el administrador de alarmas
para activar el dispositivo con frecuencia. e imagina que cada aplicación lo
hace en un momento diferente, estás gastando mucha batería.
Por eso tenemos el despertar excesivo en su página de signos
vitales. Si lo ves en signos vitales páginas, es causado por el administrador
de alarmas, te recomendaría Piense en tal vez migrar a otras
API. Si envía notificaciones automáticas,
probablemente esté Ya estoy usando Firebase Cloud Messaging.
Cuando el dispositivo está en Doze, tus mensajes prioritarios
se aplazarán al ventana de mantenimiento. Esto
se debe a que la alta prioridad FC mensaje FCM, se les activa para
enviar una notificación al usuario. Si activan el ahorro de
batería, tus mensajes seguirán ser entregado, tal como está. Como
Amith mencionó anteriormente, si el usuario restringió tu [sin audio]
audio].

Se aplicarán
en cualquier aplicación. que se ejecuta en un dispositivo
Android, sin importar el objetivo SDK al que se dirige. Entonces, nuestro primer
consejo para usted es por favor prueba tu aplicación. Tenemos comando
ABD. Puedes usar para poner todo. sus aplicaciones en estas funciones para
ver si sus notificaciones automáticas están llegando. Excepto
por el FCM de alta prioridad restricciones, ninguna de ellas se conoce.
Si tu aplicación funciona bien bajo Doze, es muy probable
que no necesites cambiar mucho que trabajar con estas características.
Nuestro segundo consejo para usted es
que siempre que ejecute una tarea en el fondo, tenga en cuenta usar
este Lazy primero Principio de diseño. Intenta reducir el
trabajo. KROUR: lo estás haciendo en segundo
plano. ¿Puede esto esperar hasta ¿Mi aplicación está en segundo plano?
Si realmente necesitas correr en el antecedentes, trate de posponer ese trabajo para
un momento posterior, por ejemplo, cuando El dispositivo está enchufado o piensa
en esa alarma exacta. ¿Tiene que suceder en ese momento
exacto? ¿Puede esperar? Finalmente, intenta hacer el trabajo en
segundo plano. En Lollipop, nosotros presentó Job Scheduler, que es
una forma de ayudar al sistema para agrupar de forma inteligente
todo el trabajo en segundo plano y esto año, introdujimos WorkManager en Jetpack,
lo que hace que ejecutar el fondo funciona mejor.

Cuando
esté estable, será el forma recomendada de realizar el trabajo en segundo
plano. Así que con eso en mente, veamos esta vista mejorada de cómo
haces las cosas en el fondo. Si
necesita ejecutar un trabajo que sea
aplazable localmente, WorkManager es su respuesta. Si este
trabajo se activa en línea, entonces usarías un mensaje
FCM con WorkManager. Lo que significa que querrás usar el mensaje
FCM para notificar a tu aplicación. hay trabajo que debes hacer y el controlador
de mensajes, tú poner en cola ese trabajo. Si su caso de
usuario no encaja con ninguno de los dos estos casos y necesita ejecutar
algo en ese momento exacto, entonces querrás usar el administrador
de alarmas.

Si esto es algo que el usuario
inició, el usuario lo sabe. está sucediendo y debe suceder
inmediatamente, usarías servicio de primer plano. Pero por favor,
siempre que estés usando esto servicio en primer plano, agregue
esa notificación porque hay No hay nada más frustrante que ver
un montón de notificaciones. y no hay nada que pueda hacer al respecto.
Por favor agrega eso acción en una notificación para que
el usuario detenga este servicio y se desestima la notificación.
Si llegas al final, lo haría diga volver a la parte superior o debe esperar
hasta que su aplicación esté primeros planos. Entonces,
hoy tenemos una charla, a la 1:00 p. m., vaya allí para
aprender a usar WorkManager para hacer trabajo de fondo.

También
tenemos muchas mejores prácticas y orientación, cómo puede ayudarnos a ayudar a
los usuarios a ahorrar batería. Por favor visita para conocer más.
Y estaremos en la oficina. horario esta tarde para cualquier
duda. Gracias. Gracias. [Aplausos]
Todos, la próxima sesión en Esta sala comenzará en 10
minutos. Gracias. . Bienvenido
a la Cumbre de desarrolladores de Android. Estaremos de vuelta a las 13:00 horas. Fresco. Gracias por venir. Bienvenido
a Trabajar con Gerente de Trabajo. Mi nombre es Sumir
Kataria. Soy Rahul Ravikumar. Ambos
trabajamos en Android. Componentes de Arquitectura,
en particular, WorkManager. Dejar Yo agarro mi…
[Risas] Está bien. Le daremos un estado
de la unión sobre Gerente de Trabajo. Quiero darte una
guía abreviada para Gerente de Trabajo. Para aquellos de
ustedes que no han usado WorkManager Antes, queremos brindarle las
API básicas.

Vamos a hablar sobre WorkManager, las cosas que habéis
preguntado y también las nuevas cambios que hemos realizado desde I/O.
Entonces, hablemos del estado. del sindicato. Ha habido 11 versiones
de WorkManager desde Google I/O y estas son versiones
alfa. Hoy fue el indicado… fue el undécimo. Y la versión beta llegará
pronto para que aquellos de ustedes que Vi la conferencia magistral de ayer y es posible que
haya escuchado la llegada de la versión beta. este mes. Esto también fue una novedad para
nosotros. [Risas] Entonces,
queremos darles una guía abreviada de WorkManager y qué
es, para aquellos de ustedes ¿Quiénes son completamente nuevos en esto?
Es una biblioteca. Envuelve el administrador
de alarmas y aquellos de ustedes que Si ha utilizado Job Scheduler, los conceptos
le resultarán muy familiares. Entonces, hablemos de trabajo.
Tienes una unidad de fondo. funciona, y hablaremos sobre cómo
lo creamos. Lo tienes y ¿Cómo ejecuta WorkManager este
trabajo? Este es un gráfico que podría ayudarte.

Mientras su proceso
esté en funcionamiento, lo haremos alimentar a este ejecutor que tenemos.
Puedes personalizar esto cosa. Pero su proceso puede ser cancelado
y WorkManager es Garantizado para hacer el trabajo. Podrá
aplazarlo, pero lo hará cuando se cumplen las restricciones. Si
tienes API 23+, usamos Job Programador y antes de eso usábamos el
administrador de alarmas. Cuando sea las señales se cumplen, digamos que
pones un retraso de dos horas cuando tienes red. Cuando se cumplen
todas esas condiciones, seguirá yendo al mismo ejecutor.
Está bien. Hagamos un recorrido rápido
por la API. Entonces el La unidad fundamental de trabajo, en
WorkManager, es un trabajador. Aquí, Estoy definiendo un trabajador de
cálculo. Se extiende el Trabajador tipo. Lo único que necesitas hacer
es extender el trabajo. Aquí, Estoy volviendo un éxito. También
puede devolver un reintento o un fallar.

Estoy haciendo algunos cálculos
costosos en segundo plano. hilo para que no tengas que preocuparte
por enhebrar aquí porque WorkManager tiene
la garantía de programar su trabajar.
Aquí, estoy devolviendo un resultado de éxito de forma sincrónica. ¿Cómo haces
que funcione ese trabajo? Entonces, para Para ello, debe poner en cola una solicitud
de trabajo. Uno es único y una es una solicitud de trabajo periódica. Estoy
usando uno de una sola vez y construyéndolo con el
cálculo. lo estoy diciendo retraso inicial. Esto le dice a WorkManager
que solo ejecute el trabajo.

Después de que hayan pasado dos horas
desde el punto de entrada. Soy establecer la restricción de carga. Sólo
es elegible para ejecutarse cuando el dispositivo está conectado o al cargador,
cuando el dispositivo está realmente cargando. Hablaré
de etiquetas en más detalle y estoy llamando a .build. Ahora lo
que tengo que hacer es llamar a get- instancia y conseguir el trabajo.

Y,
si desea realizar un seguimiento del estado en el que se encuentra su trabajo, desea
llamar para obtener información sobre el trabajo por LiveData. Esto devuelve un LiveData
de una información de trabajo. Eso es el estado de su trabajo y LiveData
aquí es un ciclo de vida de observable. Entonces, una vez que lo adjuntes
a un propietario de LiveData, una vez pones en cola el trabajo, una vez que
se cumplen las restricciones, irá en ejecución y luego, finalmente,
pasará al estado exitoso. Recuerde la etiqueta que agregamos cuando
creamos el trabajo único. Solicite, puede obtenerlo con
datos. Lo asocias con un solicitud de trabajo y puede haber
una o varias. Puedes asignar el misma etiqueta para varias cosas. Es por etiqueta,
LiveData.

Datos en tiempo real de nuevo. Una lista de información laboral.
Y de nuevo, puedo hacer lo mismo cosas que hice en la diapositiva anterior.
Entonces, una de las características más interesantes
de WorkManager es la capacidad de trabajo en cadena. Entonces, eso te ayuda a
definir una gráfica de trabajo y aquí, Le estoy pidiendo a WorkManager que comience
con A, B y C y están trabajando. peticiones. D y E solo son elegibles
para correr una vez A, B y C están hechos. Le estoy pidiendo
a WorkManager que ejecute A, B y C para correr en paralelo. Y, finalmente,
vuelvo a invocar esto. FGNH solo se ejecutará una vez que se hayan realizado
todas las ejecuciones del procedimiento. No olvidate de llamar en fila. Las devoluciones
son continuación del trabajo. La continuación del trabajo es un nodo
en tu gráfico.

Esto se presta a una API muy fluida. Cada vez que lo llamas,
llama a una nueva instancia. de otra continuación. Por
último, no olvides llamar en fila. Cuando encadenas trabajo,
las salidas del trabajo principal solicitud se convierten en entradas para
su solicitud de trabajo descendente o su niños. Esto le ayuda a administrar y enviar
el estado desde el trabajo principal. al trabajo descendiente. Ahora,
finalmente, hay WorkManager que también expone
la API para cancelar. Si quieres Para hacer eso, puede cancelar el trabajo
por ID y cada solicitud de trabajo tiene una identificación única. Aquí, estamos cancelando
el trabajo con esa identificación y También puedes cancelar el trabajo por etiqueta.
Entonces, esas son las dos API. Y eso es. Y
quiero señalar que todas las cosas: todas las API que hemos
estado mostrando son para alfa 11. Es posible que notes algunos ligeros cambios
para aquellos de ustedes que He estado usando esta API antes.
Pero hoy todo está en vivo.

Entonces, hablemos sobre cómo aprovechar
WorkManager al máximo. Él incluye, ¿cómo hago un determinado
tipo de tarea? y el mas grande uno sobre el que recibimos preguntas
es el subproceso. Cómo ¿Funciona el subprocesamiento en WorkManager?
Entonces hablamos de una obra. solicitud, Rahul acaba de mencionar
eso. Lo pones en cola. Tenemos un ejecutor de tareas interno. Es un
ejecutor de un solo subproceso. La cola va a eso. Cada aplicación
que utiliza WorkManager tiene una base de datos WorkManager.
Ésta es la fuente de la verdad. Aquí es donde realizamos un seguimiento
de sus entradas, salidas y dependencia. cadenas. Después de que se haya puesto
en cola, algún tiempo después, su se han cumplido las limitaciones.

Si
no tiene restricciones, se ejecuta. de inmediato. Si hay restricciones,
el sistema operativo se lo indicará. tú. El mismo ejecutor de tareas usando una fábrica
de trabajadores para crear un Obrero. Es una fábrica para Trabajadores
y puedes hacer tu propio. Puedes personalizarlo y hacer
cosas con él. Una vez creado el trabajador, lo
ejecutamos en un ejecutor. Este En realidad es algo que puedes
personalizar. hablaremos mas Sobre eso también más adelante.
¿Qué pasa si no quieres? ejecutar algo en ese ejecutor?
¿Qué pasa si estás usando ¿RxJava o Corrutina? ¿Qué pasa
si tienes tu propia solución? ¿Quieres usar para ejecutar cosas en segundo
plano? Esta fue una solicitud Eso surgió con bastante frecuencia cuando
lanzamos WorkManager por primera vez. Entonces, para hacer esto, queremos proporcionarte
una API que te permita hacer trabaje por su cuenta y díganos cuando
esté terminado.

Tú quieres hazlo asíncrono cuando hayas terminado.
Lo dividimos, el equipo de Guava tiene Trabajó en esto por lo que no necesita
una dependencia total para esto. Son literalmente una o dos clases
ahora. es una característica que puede tener uno o más
oyentes y esos oyentes se puede invocar en un ejecutor de alimentación de
especificaciones. Entonces usando Esto, lo hicimos trabajador escuchable.
Debe anular el inicio del trabajo. Nos das una característica listable.
Haces el trabajo que quieras y cuando haya terminado, establezca el
resultado en la función y lo haremos ser capaz de escucharlo y reaccionar
ante él.

Entonces, el modelo de subprocesamiento
real, en WorkManager, va al ejecutor de tareas, que utiliza la fábrica
de trabajadores para crear un escucha trabajador. Llamamos a empezar a
trabajar en ello y adjuntamos un oyente para que podamos escucharlo
cuando haya terminado. El La clase trabajadora es un trabajador
simple y escuchable. tenemos el hacer el método de trabajo del que hablamos.
Anulamos el inicio del trabajo para tú. Creamos una característica. En
el ejecutor de fondo, nosotros ejecutar la obra.

Y nosotros, por supuesto,
le devolvemos la función. Entonces, ahora tenemos dos clases, Trabajador
y Trabajadores escuchables. Los trabajadores son una clase más simple. Una
clase que se ejecuta sincrónicamente. y en un hilo de fondo. Carreras
escuchables, carreras de forma asincrónica en un hilo de fondo
no especificado. Estás Se espera que hagas lo que estás
terminando allí. Es posible que desee devolver una función
escuchable. Si tienes acceso a Guayaba, tienes acceso a los
oyentes. Si no lo haces, es una implementación liviana que proporcionamos
en AndroidX concurrente características.
Una de las cosas que muchos la gente lo intenta y lo hace incorrectamente
con el trabajo.

Están intentando hacer localizaciones.
Si escuchas el Kotlin Los tirantes hablan, hablaron
de eso. Recuerde que un La clase trabajadora es sincrónica. Si adjunta
una devolución de llamada pero Devuelve el éxito, tu trabajo
ya está completo. Que no es va a funcionar de la manera que crees
que es. Entonces, lo primero que hacemos aquí
es usar un trabajador oyente. esta es la característica que retomaremos
y llevaremos nuestra contabilidad. En el método de inicio de trabajo,
comprobaremos si tenemos permisos. Si no lo hacemos, estableceremos
una falla en la función. De lo contrario, lo que haremos es obtener
la última información de ese proveedor. ubicación. Esto es como una
función en GMS core o Google. Mundo de los servicios de pago. Y luego
volvemos al tema principal. Eso es el trabajo de inicio de alto nivel. En
el método de obtención de ubicación, Usaremos esa tarea y le agregaremos
un oyente.

Si la tarea es exitoso, lo devolveremos con
un estado de éxito. De lo contrario, estableceremos
una excepción. nos hemos dirigido los tres casos en los que queremos
tener un éxito o una tarea fallida o si no tenemos
permisos y WorkManager adjuntará a ese oyente, escuchará
el éxito y fracaso de la tarea y llevar la contabilidad
según sea necesario. Está bien.
Hablemos de operaciones. Sumir mencionó que WorkManager utiliza la
base de datos como fuente de verdad. Cuando haces cola o trabajas, tenemos
que hacer algunas teneduría de libros.
Estas son una base de datos y tenemos para hacerlos en un hilo de
fondo. Como resultado, son asincrónico. ¿Qué pasaría si
quisieras hacer algo después del ¿Se produjo la cola o se canceló?
Quieres asegurarte ¿Terminaron antes de que quieras
hacer más cosas? hemos introdujo una nueva API. Poner en
cola y cancelar operaciones. El funcionamiento es una interfaz
muy sencilla. Tiene dos métodos. Una API de obtención de estado, que devuelve
un LiveData. Si adjuntas un observador, verá cómo pasa
de un proceso en progreso hacia un éxito o un fracaso.

El otro
devuelve la característica. tipo. Recuerde que esta API solo devolverá
el estado del terminal de la operación. Si estás adjuntando
un oyente, lo harás obtener un éxito o un fracaso y cuál
es la excepción y decirle por qué ocurrió la falla.
Otra pregunta muy la gente tiene es, cuándo se detiene
el trabajo, qué pasa cuando ¿Dejar de trabajar en nombre
de WorkManager? Entonces, hay tres casos en los que se detiene el trabajo.
La primera es muy sencilla, tu Las restricciones ya no se cumplen. Dijiste
que tenía una red para hacer Esta tarea de carga pero tu
red se perdió. Un segundo caso es ese el sistema operativo anticipado su trabajo. La tercera razón
es que cancelaste tu trabajo. en otro lugar de tu aplicación. ¿Cómo
dejamos de trabajar? Hay una oyente del método Trabajador
detenido.

Anulas esto y obtienes tu señal de alto. Cancelamos
esa función para que usted Puede agregar su propio oyente
y buscarlo. Entonces, esta es tu… cuando te
suceda una de estas dos cosas, esta es tu señal para ser un buen
ciudadano y limpiar porque Después de llamar a esto, el sistema
operativo puede finalizar el proceso. Entonces, si el sistema operativo despertó el proceso
de su aplicación solo para ejecutar este trabajo, De hecho, podría matarlo cuando decida
que el trabajo debe realizarse. deténgase y si devuelve algo
después de esta señal, digamos que obtuviste un éxito, lo ignoramos
porque en la medida de lo posible Estamos preocupados, su trabajo ha
sido detenido. También puedes sacar de paradas en
tu Trabajador para poder llamar el método está detenido.

Eso
te dirá si has estado señalizado para detenerse. Entonces,
veamos cómo puedes ser un Buen ciudadano y limpieza. Digamos
que estamos analizando un archivo de forma asincrónica y lo estás haciendo
en un Worker. Tienes esto flujo de entrada para que estés leyendo un
archivo. Al empezar a trabajar, dices analizar el archivo. Esto está haciendo
algo de forma asincrónica y usted volver a la función. Aquí está el archivo
de análisis. Tienes un albacea, lo que sea, una rutina, lo estás haciendo
de forma asincrónica.

Estás abriendo un archivo, estás
leyendo cada byte del archivo, haciendo algo con ese byte
y cuando hayas terminado, establece un éxito porque ya terminaste
y tienes lo necesario Tricatch finalmente después de eso para
que puedas limpiar lo que ensucias. Entonces, ¿cómo manejamos cuando su trabajo
se detiene mientras esto está en curso? ejecutando? Digamos que queremos terminar
lo que estamos haciendo, podría cerrar fácilmente ese flujo de archivos
de entrada. Bueno. Así que lo que pasa ahora? Ya lo has hecho.
Volvamos al código.

Bueno, si estás en medio de ese
ciclo de lectura y cierras un archivo, lanza una excepción. La
próxima vez que intentes leer algo, afortunadamente ya estás
manejando esa excepción allá. Hay un caso más que
olvidaste aquí, que es, ¿Qué pasa si la detención ocurre
antes de abrir el archivo? No estás buscando eso porque
nunca recibió esa señal. y leerás ese archivo porque
se abrió antes que tú Intenté cerrarlo. Harás todo este
trabajo y cómo lo solucionarás. Se utiliza el método is-stop. Este
es un buen ejemplo de cómo honraría la señal del sistema operativo
de que debe detenerse y ser un buen ciudadano. Así
que cada vez que pones en cola un método o cada vez que pone en cola
una solicitud de trabajo, pasa por varias transiciones. Echemos un vistazo
a la vida de un trabajo único. pedido. Se puede bloquear si se
bloquea en otra solicitud. o en cola. Una vez cumplido se pone
en marcha. Una vez — Dependiendo del resultado que devuelvas,
lo llevaremos a uno de los estados terminales.

Si el trabajador
regresa con éxito, entonces es… lo terminaremos con un
estado exitoso. Si se devuelve un error, entonces lo marcaremos
como un error. A cualquiera momento en el tiempo, mientras el Trabajador se
encontraba en un estado de no terminación, Si realmente vuelves a intentarlo,
aplicaremos la política de retirada. y vuelva a intentarlo. Entonces el Trabajador
volverá al estado en cola. Si tiene un estado sin terminación
y llama a cancelar, se cancelará. terminar en cancelar.

Ahora
veamos el trabajo periódico. Es casi lo mismo. Como se
puede encadenar, no hay estado bloqueado. Todo termina en el
estado de cola. Entonces, Ya sea que lo logres o lo vuelvas
a intentar, volverá al estado en cola. Esto puede parecer
confuso. Si lo logras, está hecho. Esperaremos al próximo
intervalo. Si fallas y Si nos pide que lo volvamos a intentar, aplicaremos
la política de retirada adecuada. Te diremos que esta es la segunda
vez que intentas ejecutar para ese último período.
Y, si marcas tu trabajo como falló, entonces lo haremos pasar
al estado fallido. A eso punto, su trabajo periódico no se ejecutará
nuevamente. cuando está en un estado no terminal y lo cancelas,
lo marcaremos como cancelado. Apliquemos
eso a la vida de un cadena. Aquí está el padre de todos los
Trabajadores. Entonces, cuando tú poner en cola esta cadena de trabajo, Todos los descendientes están bloqueados ahora.
Se cumplen las limitaciones y se va. en estado de funcionamiento. Una vez hecho
esto, supongamos que lo logró. entonces desbloquea B y C ahora
y entran en ejecución y para el En aras del argumento, supongamos
que B tiene éxito y C falla.

B desbloquea D para que D
entre en el estado en cola. Aviso ¿Qué pasa con E, F y G? Todos
fallaron. Si una unidad se cancela, todos sus descendientes
también están marcados cancelado.
Entonces voy a hablar de Trabajo único y comencemos con una
pequeña pregunta aquí. Qué ¿Está mal con este código? Tienes
un objeto de aplicación en el al crear. El problema aquí, y lo
he visto en algunos errores. – es que esto pone en cola trabajo
periódico cada vez que su Se inicia el proceso de la aplicación. Probablemente
eso no sea lo que estás intentando. hacer. Estás intentando configurar una sincronización
aquí. Si llamas a esto código cada vez que se inicia la aplicación,
cada vez que tienes otra cosa que está sincronizando tu código,
realmente solo quieres uno de a ellos.

Tan singular El trabajo le permite, si inserta la misma
clave en una base de datos. Nuevamente, ¿quieres sobrescribir e
ignorar lo que estás intentando? ¿hacer?
Eso es lo que hace el trabajo único, es una política de conflicto para
WorkManager. Aquí está la sintaxis. Único es ese nombre, esa clave.
Algo que únicamente identifica esa cadena de trabajo. La política
es el trabajo existente. política o las políticas de conflicto
y luego, obviamente, tienes tu peticiones. Entonces,
las políticas laborales existentes, hay tres de ellos. El primero
es conservar. Si usted tiene cosas bloqueadas, en ejecución
o en cola, se mantendrá a ellos.

Si el trabajo está terminado o
no se envía, se pondrá en cola. lo que enviaste. El siguiente es reemplazar.
Siempre reemplaza la solicitud de
trabajo en la base de datos. Si su trabajo se está ejecutando, se detendrá
como describí algunos minutos antes. Anula el trabajo
antiguo y lo detiene. A pend es especial. Se adjunta
a esa cadena de trabajo. Esto es útil si estás intentando
hacer algo, en orden, por Por ejemplo, estás intentando crear una aplicación
de mensajería y estás enviando mensajes en orden, es posible que
tengas una cadena de trabajo única para enviar mensajes y desea
agregar mensajes nuevos en Al final, básicamente se trata de
crear un árbol para ti.

Sumir mencionó que una de sus diapositivas
anteriores sobre cómo puedes personalizar WorkManager, entonces, veamos
todas las cosas que puedes hacer. De hecho, puedes especificar una fábrica
de trabajadores que se pueda utilizar. para utilizar sus trabajadores.
Esto es útil en el contexto de — si estás usando Dagger
y quieres inyectar algo, este es un buen lugar para hacerlo. Puede especificar
el valor predeterminado ejecutor que desea que utilicen
todos los WorkerWorkers. Puede especifique el inicio de sesión si desea
distinguir entre una compilación y publique la compilación y registre más
información para diagnosticar su problemas y realizar parámetros del Programador
de trabajos, como el número de trabajos desea que enviemos a Job Scheduler,
los ID que desea que enviemos saberlo en caso de que ya esté utilizando
Job Scheduler antes.

Si desea personalizar
WorkManager, debe deshabilite el valor predeterminado y agregue esta
entrada a su hombre festival. Ahora que lo has
desactivado, necesitas en realidad crea una nueva instancia
de configuración. Aquí, estoy usando la construcción
de configuración y sobrescribiéndolo. Puedo llamarlo para
inicializar. Por lo tanto, asegúrese de hacer
esto en su aplicación al crear. Porque el sistema, el sistema
operativo, en realidad puede invocar fuentes de empleo en
su nombre. WorkManager debe ser inicializado.
Finalmente, lo último que Quiero hablar, antes de terminar,
de algunos consejos para todos. desarrolladores de bibliotecas que existen.
Si está utilizando WorkManager en su biblioteca, tiene algunos casos
de uso especiales que queremos pensar en. Entonces el consejo general
que damos es porque WorkManager es único y la aplicación
lo inicializa, como Rahul te acaba de demostrar que en realidad
no tienes el control de lo que sucede. allá. La fábrica de trabajadores
predeterminada crea trabajadores y Trabajadores escuchables. Si necesitas
una dependencia en particular inyección o cualquier otra cosa por
el estilo, tendrás que tener un contrato con la aplicación.
Silo tu trabajo con etiquetas. Raúl Te mostré cómo etiquetar tu trabajo.

Si guardas
todo tu trabajo en silos, ponlo su prefijo o el nombre de su paquete o el nombre
de la biblioteca en sus etiquetas, podrás identificar fácilmente todo
el trabajo que es tuyo. tu no Tenemos que preocuparnos por otras personas,
por el trabajo de otras personas. Puedes conseguir tu trabajo y operar
con eso. Finalmente, lo hacemos Proporcionar a las aplicaciones la posibilidad
de borrar todo el trabajo. Esto es generalmente por razones de privacidad.
Es para ese tipo de críticas. Caso de uso en el que tienes que borrar los
datos del usuario, por algún motivo.

Entonces, como desarrollador de bibliotecas,
¿cómo puede saber si su trabajo es se ha ido debajo de ti. Mira obtener la última
cancelación de todos los tiempos: Lo siento, es muy confuso. Bueno. Próximos
pasos. A fin de obtener WorkManager si aún no lo has hecho.
Para aquellos de ustedes que tengo, muchas gracias. Estamos
en alfa 11, así que hay tres categorías generales de
artefactos, hay uno y KPX y soporte de pruebas también. Estos
son algunos enlaces útiles. Programar tareas con WorkManager es
el desarrollador.Android.com.

Está YouTube; en YouTube,
está Google I/O Charlas de 2018 que hablan de lo básico.
Algunas de esas API tienen ha cambiado un poco, pero en términos
generales sigue siendo algo bueno leer… o escuchar. Y,
además, presente su comentarios en nuestro rastreador de problemas de
publicación. Beta está por llegar, nosotros nos dijeron ayer por la mañana. Tenemos
que volver al trabajo. [Risas] Muchas
gracias. Por favor visita todos las bibliotecas de Jetpack en la web y
estaremos afuera para cualquier preguntas que puedas tener. Gracias.
Gracias.
[Aplausos] Todos, la próxima sesión, en esta
sala, comenzará a las 1:55. pm. Gracias. [Aplausos]
Hola a todos. Gracias por acompañarnos
en las mejores prácticas. para temas y estilos. Y
yo soy Alan Viverette.

Nos encargaremos de diseñar
temas y estilos para su aplicación. La forma en que los diseñadores
crean simulacros. Aquí está la última versión de la paleta
temática Material Design. Si aún no estás usando if para
Android, es posible que reconozcas primario de Material Theming
en la plataforma. Es como color primario oscuro. Y
cuando te burlas de mí diseñador, puedes hacer un mapeo
mental, este será mi color más oscuro, este será
mi color primario.

Es Es importante asegurarse de que sus
diseñadores comprendan que hay atributos canónicos. Puede resultar
útil retroceder un poco un poco y digamos, llamemos a esto la varianza
primaria o la varianza primaria color y es genial que tengamos todos
estos temas prediseñados colores con nombres significativos y relaciones
de contraste significativas que tiene que existir entre el primer plano
y el fondo. De vez en cuando, obtendrás
un color nuevo que no existe en cualquier lugar y encontrar
un nombre para esto puede ser difícil. Aquí tenemos un color morado que
es más claro que nuestro primario. variación y tiene contraste con
el tiempo, así que vamos a mostrará texto blanco encima.
Si queremos subir con un nombre para esto, deberíamos
encontrar algo que pueda generalizar pero es
autocapturador. Si decidimos que Tenía un tema morado, ahora necesitamos
un tema azul, podemos reutilizar el nombre del color y reutilizar
esas restricciones.

Entonces, ¿cómo vamos a llamar
a eso? Bueno, en el palé, Tenemos estos en color. En primario
significa que este es un color de primer plano mostrado sobre
un fondo primario y garantizar va a cumplir con los ratios de
accesibilidad. Podrás leer el color del texto de primer
plano contra el fondo. Tenemos secundario, si tenemos algo
en el color azul, sería blanco. Podemos generar un nuevo nombre
para el color más claro. Usaremos en primaria. Eso determina
el primer plano protección del color. Para proteger
el color de fondo, utilizamos Quiero asegurarme de que contraste con
la primaria.

Podemos llamarlo luz primaria, que parece
increíblemente sencilla y es. Entonces, puedes decirle a tu diseñador,
cada vez que estemos hablando de esta versión más
clara de nuestro color primario, Nos referiremos a ella como luz
primaria y tendrá estos restricciones. Si
tu diseñador decide que queremos para que sea azul en lugar de morado,
podemos seguir usando el mismo restricciones y utilizar nuestro
color diseñado semánticamente tema. De manera similar, proporcionamos
patrones comunes para texto. apariencia. Tenemos título, resumen,
cuerpo. Estos son nombres desde donde se van a
utilizar. Eso determina el tamaño de píxel, el peso y el
color. A la derecha, vemos a qué se refiere
ese mapa. En este caso, titular va a ser roboto. Sin embargo, si decidiéramos
que queríamos utilizar, digamos, comic sans, no
tendríamos que pasar y crear un nuevo estilo en todas partes de nuestra
aplicación porque lo hacemos tienen estos nombres que implican
cómo se usan.

Utilice un nombre significativo cuando
extraiga de sus simulacros. Conozca los atributos de Material
Design. Están en material.io. Utilice esto como
un lenguaje común cuando estás mirando simulacros
o mirando algo nuevo que tiene un color gris aleatorio. Asegúrate
de que tenga un nombre que puedas usar. Si está implementando el
modo oscuro, si asistió a eso Hablamos hoy, sabes que este gris
necesita convertirse en un Blanco claro porque necesita contraste
con un texto determinado. color o color de fondo. Utilice nombres
de atributos significativos. Deberían ser más o menos
autodocumentados. Algo como si la luz primaria tuviera más
limitaciones de las que parece color primario. Continúe y documente
esto en alguna parte. Comenzar un sitio interno que comparte con sus
diseñadores para asegurarse siempre estás usando un lenguaje
común cuando hablas de componentes, los colores, los textos
reutilizables. Eso es bueno punto de partida sobre cómo nombrarlos
y cómo hablar de ellos.

Cuando recibes una burla que dice, este
es el color hexadecimal. 4836Ef, retrocede y di, este no
es un color hexadecimal. Él tiene significado y necesitamos ser capaces
de hacer una transición sin problemas desde este color hexadecimal a un color hexadecimal
con restricciones similares. Entonces, ahora Nick va a hablar
un poco más sobre lo que esto medios en la implementación.
Gracias. Bien. Así que nosotros habló mucho sobre apoyando diferentes valores
con nombres semánticos. Él se pueden implementar como atributos
del tema. Qué pasa si tu diseño cambia y de repente, en
lugar de un color morado tema, tienes un tema azul. Estos
nombres semánticos te protegen y está más extendido de lo que
imagina. Así que si usted queremos tener áreas que puedan soportar
este tipo de tematización, Hay diferentes maneras de lograrlo.
Una forma podría ser, definir diferentes estilos.

Voy
a configurar un estilo y llamar ese estilo 1 y luego quiero lucir
diferente así que le daré it estilo 2. El problema con
este enfoque es que va Hay mucha duplicación y hay 2
lugares para que puedas mantener o corregir errores o refactorizar.
Usando los punteros semánticos para describir cómo debería verse
o un atributo del tema te protege contra esto. Podría
ser más trabajo establecer este idioma y configure sus estilos
para referirse al tema atributos, lo que hace es terminar
con un solo lugar, un estilo único, que se referirá
a los atributos del tema definido para un tema determinado.
Y los beneficios de esto son Va a duplicar el estilo.
Y también localiza las modificaciones.
Entonces eso significa Si necesitas cambiar
un atributo, vas a ese. lugar donde está definido en lugar
de tener que rastrearlo donde se filtró. También
tiene el beneficio, yo Pensemos en la consolidación.
¿Cuántas veces has abierto tu colorea archivos XML y encontró 50
tonos de apariencia similar colores y ves un simulacro y dices,
está bien, simplemente crearé Otro recurso de color. Te
protege contra esto. Tú Quiero condensarlo en esta pequeña
paleta.

Usted tiene un buen mira y siente. Básicamente,
este enfoque realmente, realmente te ayuda con el mantenimiento
de tu aplicación. I Le recomendamos que prefiera los atributos
del tema siempre que sea posible. Si escribes código como la línea superior,
el color del texto debe ser este recurso de color, considérelo como
un olor a código. Es esto diseño, ¿existe la posibilidad de que esto
aparezca en un formato diferente? ¿tema? ¿Podría incluirse en un
área diferente del ¿solicitud? Si es así, ¿debería
mirar el formulario inferior? mirando la sintaxis del signo de interrogación,
que es como te refieres a estos atributos del tema? Entonces,
hablamos sobre el Importancia de las partes semánticas.
Puedes establecer un tema directamente en una actividad y estos
están utilizando componentes, que es un tema de documento o tal vez estés
usando un modo nocturno.

Entonces, Este es un tema que cambiará
entre oscuro y claro. dependiendo de la hora del día.
¿Qué pasa si tienes un pantalla como esta, esta es una aplicación
de Google I/O. La mayoría de estos Los elementos de la lista son los mismos, pero
el diseño requería que algunos fueran claro sobre oscuro y algo oscuro sobre claro.
puedes hacerlo por separado diseños o separar colores
de texto. Ambos básicamente filtrar la información más allá
de donde desea que conduzca a una explosión de más mantenimiento.
En cambio, lo que tú Probablemente quieras hacer es ver cómo
aplicar temas en la vista. nivel en lugar de a nivel de toda
la actividad.

El atributo El tema se agregó en API 21. Entonces,
en esto, puede configurar un tema en una vista o un grupo de vistas y aplicar
un tema diferente a una subsección de su vista hiarkry. Entonces,
en este ejemplo, es posible que digamos que tienes un tema claro y aplicas
una versión oscura del mismo, o viceversa. Puedes hacer lo mismo
en el código usando el envoltura. Tomas el tema existente
y lo superpones con un estilo. encima. Está
superpuesto. Eso significa que tienes un tema existente y cualquier
valor del tema que colocado encima se aplicará en la parte
superior, por lo que debe estar un poco consciente de este
hecho.

O no quieres superponer un tema que aporta demasiados
valores. si estuviera usando componente material s light y luego doc, es posible que sobrescribas
demasiado. Tú quieres asegúrese de que el tema que está
sobrescribiendo exprese el tema necesitas. Quizás
quieras echar un vistazo a el tema se superpone solo para tematizar
los atributos que desea que cuando se superpone, se obtiene
la combinación resultante de temas. Mientras
que el envoltorio del tema contextual El enfoque parece cercano a la temática
dinámica, pero no lo es. Tienes que aplique un tema que haya definido en
el momento de la compilación.

Tú No puedo usar esto para tomar valores
de color y crear una dinámica. tema. Esto es un pensamiento anticipado.
Entonces, antes de comenzar a configurar
un montón de atributos de tema, es Es importante comprender cómo
se aplican a través de la plataforma. Vamos a hacer una gira
relámpago que ocurrirá en pantalla y los temas de su aplicación.
En cualquier punto de tu aplicación, es bueno tener un
conocimiento previo de que puedes señalar algo en la
pantalla y entender el dirección de capa y atributos
y estilos de tema aplicados a renderícelo de esta manera en la pantalla.
Si queremos establecer este color para un solo botón, ¿cómo haríamos
eso? Bueno, profundicemos en el forma en que esto se resuelve en tiempo
de ejecución.

Tenemos botón en XML. Si miras hablar sobre temas y estilos
desmitificadores, tendrás una comprensión completa de cómo funciona
esto. Si no lo has hecho Vi eso, ve a verlo. El estilo
del botón que ves aquí. se extrae del tema, el tema
del contexto en el que El botón está inflado. Entonces, atributo
de estilo de botón relevante aquí en la parte inferior de la
pantalla. A continuación, ¿dónde está diseñado ese
estilo de botón? esta en el material tema hay botón widget.material.
¿Dónde encontramos el ¿definición? Más en material de
estilos.

Entonces, podemos ver aquí, el fondo es el dibujable predeterminado
de este botón. Justo debajo Ese estilo de botón de tinta con borde,
tenemos otro estilo. Nosotros Me doy cuenta de que va a estar
un poco más cerca porque proporciona un color en el botón. Entonces,
profundicemos en el fondo que se utiliza allí para
ver qué se extrae de nuestro tema. En
el color del botón.XML, coincide con los nombres dibujables
para que haya una cadena fácil puedes seguir. Tenemos una
forma, es un rectángulo, es coloreado con un tinte, que es nuestro
fondo del color de los botones material.

Esto se aplica al color
blanco de la forma para que Tiene un color blanco sólido aquí.
Profundicemos en el tinte. Es nuestro acento de color. Es botón con nombrecoloredmaterialXML. una
línea muy clara de dirección indirecta. Entonces, ¿de
dónde viene este acento de color? Provendrá de lo que exista en el
tema de nuestra aplicación. Eso hereda del material y será el
verde azulado predeterminado.

Aquí están todos los niveles de indirección
que hemos analizado. Algunas de las importantes son si
queremos cambiar el estilo. Para todos los botones que se
inflan, ese es nuestro botón. tema de estilo. El estilo de botón que
obtenemos de forma predeterminada es widget.materialbutton. Podemos cambiar
eso a button.colored si queríamos botones de colores en
todas partes. También podemos cambiar nuestro acento de color. Si configuramos
eso en nuestro tema, eso se vuelve usado en todas partes. Veremos ese color
en todas partes. Pero lo que queremos hacer es un botón.
Entonces, ¿qué pasaría? si establecemos ¿Botón de apuesta en nuestra actividad?
Lo pudimos ver en todas partes. Qué sobre en XML? ¿Cómo
podemos arreglar eso? Bien que Si ponemos acentos de color en nuestro tema
de actividad, ahora estaremos obteniendo ese botón azul, pero también
tenemos interruptores azules Y todo lo demás.

Si realiza una búsqueda
en archivos XML, encontrará verlo en muchos lugares. Podríamos
intentar configurarlo diseñoXML. Esto no hace absolutamente
nada porque es un tema. atributo y no debería intentar configurarlo
en Layout KWM XML. Crearemos
un tema XML y aplíquelo al botón y obtendremos
lo que queríamos. Entonces, volvamos a Nick para una mayor
implementación. Salud. Entonces,
dije que deberías preferir atributos del tema donde puedas.
Pero para hacerlo, necesitas para saber qué hay ahí fuera, qué
existe.

Sinceramente no tengo una gran respuesta para usted,
además de revisar el archivo: esto es desde la plataforma
Android o desde appcompat o componentes materiales. No son
tan largos y se puede ver. lo que hay disponible. Puedes mirar
temas.material y ver cuál atributos del tema que establecen y,
como tal, puede hacer referencia o sobrescribirlos ustedes mismos.
Una nota es que es posible que veas que algunos atributos del tema están doblemente
definidos.

La plataforma define un resaltado de control de color
de Android y luego appcompat define el suyo propio. Entonces, ¿cuál
usas? La respuesta es si hay es uno definido en appcompat, prefiérelo
porque establecerá la plataforma para usted y estará
disponible para atrás compatibilidad. Puede
consultarlos en código, usando algo como esto y usa
KTX para hacerlo más conveniente. Hasta
ahora hemos hablado de usando atributos de tema de plataforma, y ​​absolutamente
deberías hacerlo. Pero Tu también puedes crear el
tuyo. Veamos un ejemplo. Tenemos dos pantallas, que muestran
diseños muy similares. A lista de horarios y detalles de los
oradores. Sólo se diferencian en hasta qué punto con el espacio en el
espacio y la línea clave llegamos desea alinearlo. Necesitas dejar
espacio para lo pegajoso. cosas del tiempo del encabezado.
Para lograr esto, definimos nuestro atributo de tema propio. Esto se llama
línea clave sin sesión. En los diferentes temas de actividad, podemos
proporcionar diferentes valores de dimensión para esa línea
clave. Y luego RGS solo tenemos que tener
un diseño único, que hace referencia a ese atributo
del tema usando la pregunta marcar la sintaxis para variarla sin
tener que mantenerla, etc.

Etcétera. Otro
lugar al que llega la tematización. Lo más útil son los elementos dibujables.
Miramos el botón de la plataforma. desde API 21 en adelante, todos los
elementos dibujables admiten tinte y tinte modos. También puedes hacer esto en
vectores donde admitan el tema. atributos para tintes, así como para
rellenos y trazos. Vos tambien puedo usar esto no solo en 21, sino en la compatibilidad
con versiones anteriores biblioteca también.

Si necesita compatibilidad
con versiones anteriores, Se puede usar al revés.
Hay una anulación que permite estableces una lista de tintes
para aplicar, que es algo Hemos aprendido a ser extremadamente
hábiles. Proporciona diferentes tintes y todos los colores para
diferentes estados. esto esta tomado del texto primario. Una de las cosas
que me encantan de los colores como estas son algunas de las mejoras
que llegaron a Marshmallow 23, lo que te permitió separar
el color y el alfa componente. Esto te protege contra
la explosión de 20 Diferentes capacidades de negro.
En realidad, separando el… tipo de información de color
de la información alfa le permite definir más específicamente
lo que desea. Aquí decía que es una pantalla de luz
y el primer plano aparecerá. ser molido. Puedes decir que el texto
será negro y tendrá letras alfa. Así que no tienes que definir todas
las combinaciones, defines las cosas con nombres semánticos. Y
luego son combinados por el listas de estados de color.
He hecho trampa aquí y he cambiado Android alfa a aplicación alfa porque
appcompat vuelve a los puertos esto para agregar la lista de estados de color,
pero requiere que uses la aplicación Alfa.

El
canal alfa del color. y el alfa se combinan. No
hagas esto. Si especifica — este es un texto 50% blanco
si no hablas diablos y un 50% alfa. Terminarás con un 20% de
blanco alfa. Quieres referirte a colores con alfas completos.
Como dije, appcompat tiene esto y utilizar recursos para obtener el comportamiento
compatible con versiones anteriores. Entonces, en general, si aplicas esta temática,
puedes obtener un estado como esto. Entonces, a la izquierda,
se ven bastante similares. En A la izquierda, tenemos Google
I/O. Y retematizarlo, adaptarlo. con la apariencia de esta conferencia,
en lugar de E/S, esta es la diferencia. Tuvimos
que cambiar el colores con nombres semánticos. Se ondula
hacia afuera, la navegación inferior cambios, algunos de los tintes en los elementos
dibujables cambian.

Pensar en si su gerente de producto se acerca a usted
y le dice, estamos cambiando todo los colores. ¿No preferirías tener
esto en lugar de ir? a través de todos los XML y ¿dónde
está? Realmente quieres limitar los cambios en estos nombres semánticos.
Entonces, como resumen de este,
realmente, realmente, tema atribuir todas las cosas esencialmente.
Úselos como solo algo así como protección y probablemente
deberías presionar eso sistema semántico de regreso a sus
diseñadores para que estén dándote valores que funcionan con
esto.

XML es la sintaxis preferida o tenga
cuidado cuando no lo esté Escribo esto y pienso, ¿es
esto un olor? Con tu dibujables, piense en usar
tintes para protegerse. Si todos estos elementos dibujables habían
sido pings y tuvimos que cambio de marca, ¿tendré que regenerar
todos estos? Ignorar eso, no hagas eso. Utilice tintes en
su lugar. Básicamente, si cada vez que usas un
PNG, piensas, ¿debería ser un PNG. Prácticamente el único momento en
el que deberías usar PNG es para partidos. Entonces, eso es un resumen.
Protéjanse y diviértanse con atributos y estilos.

Salud.
[Aplausos] Hola a todos. Hoy voy a compartir
algunos de los mejores prácticas al utilizar la
biblioteca de AndroidX. voy a estar hablando de preferencias y preferencias
compartidas. Y yo soy Vamos a cubrir cómo puedes usar múltiples
pantallas de configuración. Primero algunos antecedentes. Cuáles son preferencias? La biblioteca de preferencias
es para interactiva. pantallas. Todo lo que necesitas hacer es encontrar
una lista de configuraciones para ser se muestra al usuario y también
se encarga de interactuar con el almacenamiento del dispositivo, por lo que cualquier
valor que el usuario cambie sería cargado en el dispositivo. Primero,
la preferencia del marco. API. Esto se incluye con el primer
marco de Android. Dado que es parte del marco,
cualquier característica nueva y Las correcciones de errores que agregamos solo
llegan a las versiones más nuevas de Androide. Dado que el diseño ha
cambiado, la API del marco es temáticas diferentes según la
versión de Android.

Eran ya no mantengo la API del
marco y recomiendo usando la biblioteca de AndroidX. Fueron
el V7 y el V14. es con ser actualizado. La biblioteca es compatible
con versiones anteriores hasta API. 14 y utiliza el mismo tema material
actualizado. Esto da como resultado experiencias
consistentes con sus usuarios. ¿Cómo se relaciona con las preferencias
compartidas? Puede tener una clave. datos. Se utilizan internamente para guardar
y recuperar cualquier valor. pero no son parte de la biblioteca.
Cargaremos la jerarquía simple. A la derecha. Tenemos preferencia
por alternar y otro para texto. Entonces,
vamos a comenzar en el cubra con una actividad simple que actúe
como un contenedor, esto debería tener un tema compatible con aplicaciones. Este
es el principal punto de entrada cuando utiliza la biblioteca de preferencias.
Todas las preferencias interesantes. y la configuración se realizará aquí.
Este fragmento, en sí mismo, simplemente envuelve una jerarquía
de preferencias individuales, que se puede definir en un recurso
XML o mediante programación en tiempo de ejecución.

Nos centraremos
en XML. Entonces, la actividad en sí misma es
sólo un simple contenedor para nuestra fragmento. Tenemos texto repetitivo
de fragmentos y mostramos el fragmento. El fragmento, de nuevo, bastante
sencillo. Todo lo que necesitas lo que debe hacer es sobrescribir esto y configurar
la jerarquía. Lo interesante La definición ocurre en el XML. Entonces,
este es nuestro archivo XML. Nosotros Comience con un objeto de pantalla
de preferencia raíz y este es el contenedor principal de la jerarquía.
Tenga en cuenta que debe También coloque su XML de preferencia
en el directorio XML. Esto es un preferencia básica, no tiene
ningún widget asociado con y tenemos tres atributos importantes
aquí. El título y El resumen se muestra al usuario.
La clave es bonita. importante. Si esta preferencia persistiera,
cualquier estado al dispositivo, entonces esta es la clave
que la preferencia compartida usar.

Esta clave le permite interactuar
con esta preferencia. más adelante en el ciclo de vida. Ahora
podemos agregar un interruptor. compatibilidad de preferencias. Esto
es similar a antes, pero ahora tener un widget de cambio. Cada vez
que el usuario lo alterna, irá a la clave definida aquí. Aquí
está la jerarquía a la que vamos. para terminar aquí. Lo vamos
a hacer paso a paso. Voy para cubrir categorías para dividir
grupos y preferencias complejos que abren diálogos que permiten una
configuración más compleja. Voy a hablar de resúmenes dinámicos
y también cubrir dependencias. Entonces,
continuando desde donde dejado antes, estas son las mismas
preferencias que teníamos antes, uno de estos controles sincronizando
alguien muestra estática información sobre la aplicación.
Cuanto más añadimos esta jerarquía, más difícil
será para el usuario ver qué hace qué.

Podemos configurar esto
en subsecciones lógicas. Nosotros envuélvalo con una etiqueta de categoría
de preferencia. Agrega un Título acentuado encima de los grupos. Es
importante establecer una clave para estos para que sea un estado
correctamente persistido. Mismo Como antes, el mismo atributo, sólo que se
muestra de forma ligeramente diferente. A continuación vamos a agregar una preferencia
de edición de texto. Este La preferencia utiliza un diálogo para permitir
la persistencia de un valor de cadena. cuando un usuario toca esta
preferencia, abrimos un diálogo para usted que contiene un campo
de texto editable. Sin embargo, Esto nos da algunas preguntas interesantes.
¿Qué nos proponemos? el resumen aquí? En este momento no hay
ningún resumen, por lo que es bastante Es difícil para el usuario ver cuál
es el estado actual y lo haríamos.

Me gusta dejar que el usuario vea lo
que ha guardado. La respuesta aquí es utilizar un proveedor
de resumen simple. esto se agrega recientemente en la versión
alfa 1.1 y es parte de una amplia categoría de cosas que llamamos resúmenes
dinámicos. Así de sencillo El atributo, cuando se establece en verdadero,
significará el resumen de preferencias. mostrará la preferencia o el texto establecido.
Tenemos una manera para el usuario establecer un código de sincronización
y verlo automáticamente. De todos modos, eso No tiene sentido que el usuario
pueda cambiar este campo. si la sincronización no está habilitada. Podemos
usar una dependencia aquí para arreglar eso. Básicamente,
establecer un La dependencia permite otra preferencia
para controlar el Estado. de esta preferencia. Entonces, configuramos
la clave del interruptor prefance. compat. Siempre que se apaga
el interruptor prefance, es está atenuado y ya no se puede interactuar
con él.

Cuando es encendido, vuelve a la normalidad.
O la jerarquía está casi completa. Habilitar la
sincronización periódica está activado, ¿Pero qué significa eso? ¿Nos hemos sincronizado
recientemente? Nosotros podemos usar un resumen dinámico personalizado para mostrar
cuando perdemos la sincronización, proporcionando un contexto más útil. Los
resúmenes dinámicos son buenos si le gustaría proporcionar al usuario
más contexto.

Entonces, en este En este caso, nos gustaría informarles cuándo
sincronizamos su dispositivo por última vez. o cuando quieras mostrar dinámica
información. Esto podría ser información
de la versión o una Dirección de identificación.
Podemos usar esto para reaccionar o hacer un resumen del estado externo. Cambiamos
esto. Cuando el preferencia está marcada, cuando la sincronización
está habilitada, queremos muestra la última vez que sincronizamos
exitosamente. De lo contrario, vamos a decir que está deshabilitado.
Todo lo que tenemos que hacer ahora se establece esto en la preferencia.

Entonces,
para hacer eso, llamamos preferencia de búsqueda. Y luego simplemente
configuramos el resumen. Este debe hacerse en en crear. El resumen se actualizará
según las restricciones. hemos diseñado.
Voy a usar por separado jerarquías en pantallas separadas.
Muchas veces querrás Separe jerarquías complejas en pantallas
separadas. Si eres Si ya estás usando la API del marco,
hay algunas maneras diferentes.

Has estructurado tus pantallas
separadas. Si eres empezando de nuevo, quizás te preguntes
cuál es la mejor manera de manejar esto es. Tenemos nuestra
actividad en la cima, lo que envuelve internamente un fragmento,
que contiene la jerarquía. Podemos considerar que es una
pantalla de ajustes. Tenemos una actividad que carga una pantalla de configuración.
Esto se ve bien cuando tener una pantalla. ¿Qué pasa si nuestra
jerarquía se ve así? Nosotros tener enlaces a otras pantallas. Y los
mensajes se vincularán a algunos preferencias de mensajes más
específicos.

Cómo se ve esto ¿Cómo ocurre con nuestra arquitectura?
Es muy simple lo que tenemos. realizado anteriormente con una sola
pantalla. La pantalla de configuración inicial será
compatible con una jerarquía. Y entonces la pantalla de escaneo sincronizado
se fragmentará con un jerarquía y así sucesivamente para cualquier
otra pantalla que tenga. Todos nosotros Lo que hay que hacer es el vínculo final
entre la preferencia.

Entonces siempre que el El usuario puede cargar la pantalla.
Y tocan una preferencia, estamos Voy a cambiar la pantalla
desde abajo. Debido a que estamos usando preferencias, la
configuración inicial La jerarquía será como lo hemos
hecho antes. Tenemos dos preferencias, una para sincronización y
otra para mensajes. Es posible que desee agregar un ícono aquí
para proporcionar más contexto al usuario. Esto simplemente se hace
definiendo un dibujable con el atributo de icono. Entonces esto será
algo así como un dibujable. directorio. Entonces, para hacer esto,
usamos el atributo de fragmento y establezca el nombre de clase del
fragmento. Si su fragmento está anidado en una
clase, necesitará usar un signo de dólar y eso es todo por
la jerarquía. La actividad es similar a la anterior.
deberíamos implementar esta preferencia. Esto se llama cuando
un usuario toca un preferencia y le permite personalizar
cualquier cosa. Hay un implementación predeterminada.
Y los fragmentos van a ser exactamente igual que antes. Nuevamente,
sobrescribimos al crear preferencias y eso es todo ahora.
Cuando tocan el mensaje, el fragmento se mostrará
automáticamente al usuario.

Entonces,
para concluir algunas cosas, hemos lanzado 1.1 alpha 1, por favor, si aún
no lo has hecho, consíguelo. Por favor, informe cualquier error
en issuestracker.Google.com. hemos actualizó la guía de configuración
de Android. Por favor compruébalo para más información sobre algunas de
las cosas de las que he hablado en esta charla y estamos trabajando en plantillas
y muestras públicas, Demostrando esta biblioteca, próximamente.
Para obtener más información sobre Android
Jetpack, puede ir a desarrollador.com/desarrollador.
Y gracias por escuchar. [Aplausos] Todos,
nuestra próxima sesión.

Comenzará en poco más de 10
minutos. Gracias. Hola, mi nombre es Cameron
Ketcham. trabajo en el material El equipo de componentes de diseño y yo
trabajo desde la ciudad de Nueva York. Soy Gautham Sajith y resido
en San Francisco. Vamos a hablar de componentes
de Material Design. Entonces, rápidamente, lo que vamos a discutir,
una breve historia de Material Design, qué es Material
Theming, usando Material Componentes de diseño, subsistemas
de tipo de color y forma y cómo aplicar estos subsistemas, así
como nuestro proceso de lanzamiento y un poquito sobre contribuir.
Rápidamente, sólo un Breve historia, Material Design
se anunció en 2014 y allí no era una biblioteca de Material
Design. En I/O, un año después, Google anunció la biblioteca de
soporte, que ayudó a traer una gran cantidad de código para
ciertos componentes, incluidos cajón de navegación, pero todavía
no había mucho. Este año, anunciamos que Material
Theming tendrá una mayor equipo de ingeniería detrás de esto, por lo que
estamos trabajando en la implementación de un Muchos de los componentes se basan en la especificación
de Material Design.

Entonces Material Theming, ¿cuál
fue el problema original con ¿Diseño de materiales? Bueno, fue una
gran versión inicial de un sistema de diseño. Se quedó corto
con la expresión de marca. Entonces, aquí hay un ejemplo de una aplicación
de correo electrónico y parece algo como cualquier otra aplicación que
usa Material Design y es difícil En mi opinión, incluso es una aplicación de
correo electrónico. Aquí hay un ejemplo de los tipos de cosas que puedes hacer
con Material Theming para crear Tus aplicaciones se destacan y vamos
a entrar en esos detalles.

En un poco. Entonces,
rápidamente, ¿cómo funciona la tematización? ¿trabajar? Básicamente, la tematización
es un sistema que hemos diseñado para ayudarle a crear un diseño único para
su aplicación. Necesitas decidir sobre fuentes, colores, formas,
etcétera y este es un Material Complemento de boceto de diseño que se puede
utilizar y que puede ayudarle a crear ideas de diseño. Eche un vistazo a material.io
para obtener más información. en esa herramienta.
Se trata de tematización material y Todos se ven muy diferentes y también
hay muchos más de estos. en material.io.
Genial, ahora hablemos de cómo empezar a utilizar la biblioteca
de componentes de materiales. Entonces, imagina este escenario, tienes
esta aplicación bastante sencilla y Tu compañero de equipo te pidió que lo rediseñaras.
Entonces, es posible que estés familiarizado con el paquete de diseño
de biblioteca de soporte, el V 28 versión y puedes usar esto. Sin
embargo, esto ya no se hace actualizado por lo que deberías usar
AndroidX.

Una cosa a tener en cuenta No puedes usar com.Android.
Si desea cambiar a AndroidX, hay una buena herramienta
de refactorización en el sitio eso te ayudará a refactorizar tu aplicación.
Y luego lo siguiente que tendrás que
hacer es utilizar nuestro material. temas que corresponden a la Temas compatibles con aplicaciones. Te ayuda con
los estilos predeterminados que puedes usar. en todos nuestros componentes. Si
utiliza appcompat.lite, deberías tener todos
nuestros atributos y componentes estilos.

Si utiliza nuestros
componentes sin estos definido, obtendrá un error en tiempo
de ejecución. Si no existen, fallará en tiempo de ejecución. Utilice
nuestro tema, le dará todo los atributos. Si no estás
listo para cambiar a nuestro tema completo, desea obtener
los atributos, puede usar el temas de puente y lo que hacen estos
temas de puente es brindarle todos los atributos pero no
te dan ninguno de los estilos predeterminados para que pueda optar por
utilizar nuestros componentes uno por uno uno.

Si
te estás extendiendo desde un tema puente y desea participar,
deberá definir en su tema y luego todas las barras de aplicaciones
inferiores obtendrían el estilo del componente.
Así que ahora simplemente vamos a hablar un poco sobre algunos componentes
nuevos. Con materiales Tematización, introdujimos algunas cosas
nuevas, como la aplicación inferior bar. La barra inferior de la aplicación
muestra navegación y clave. acciones en la parte inferior de las pantallas
de los móviles, que son ideales para personas que tienen una sola mano y usan
el pulgar para interactuar con el dispositivo. Utiliza un diseño de coordinador
para coordinar el movimiento.

Entre una barra de aplicaciones inferior y
un botón de acción flotante. Entonces, aquí solo tenemos XML simple
para la barra inferior del mapa. A Algunas de las cosas que puede hacer es establecer
el desplazamiento vertical y establecer el margen de la cuna fabulosa, que es la
distancia entre la cuna fabulosa y la barra de aplicaciones inferior y el
radio de la esquina redondeada, que es la esquina donde la parte inferior se encuentra
con lo fabuloso. Puedes tener el La barra inferior de la aplicación se oculta al desplazarse
y configura este modo de alineación. Él animará la fabulosa para
ti. Y es útil si vas entre diferentes pantallas.
Si ya estás usando un barra de herramientas, es muy fácil comenzar
a usar la barra de aplicaciones inferior. Si está configurando la barra de acciones
de soporte, configúrela para el barra de aplicaciones inferior
y todo lo demás funciona igual forma.

Puede utilizar un detector de
clics en el menú directamente en el barra de aplicaciones
inferior. También tenemos lo renovado. Versión del botón para simplificar
mucho el estilo. Así que si simplemente colocas este componente
de botón de material en tu XML, Obtendrás un botón con estilo. Si estás
usando nuestro tema completo, puede usar la etiqueta del botón en su XML y hacemos una vista personalizada
de la inflación donde esto será inflar en una etiqueta de botón de material
y se puede ver el deshabilitado estado en este botón y todos los
estados se transferirán.

Tú Puede configurar un icono en este botón
configurando el atributo del icono como así como este estilo de ícono y este
estilo es opcional, pero ¿qué lo que debe hacer es ajustar el acolchado ligeramente
para lograr más equilibrio en el
botón. Puede configurar el botón de contorno para
obtener el botón de línea fina. Tú Puede configurar el tono de fondo
del botón sentando el atributo de tinte de fondo y proporcionar una lista de estados de color.
Puedes configurar algunos otros atributos, como ancho de trazo,
color de trazo, esquina radio en este botón. También
puedes crear solo un ícono botón. Estamos configurando el ícono
y configurando el relleno a cero. entonces el ícono queda centrado en el
botón y configuramos el contenido descripción en este botón.
Como no hay texto, usted debe establecer un descripción.

Puede
configurar el color de ondulación el botón. Si estableces una onda
púrpura aquí y la aplicas a el botón, puede hacer una lista de estado
de color o color hexadecimal aquí. Es una onda violeta, está encima
de un botón verde. Y estos son algunos de los
ejemplos. tenemos varios diferentes estilos de chips, campos de texto,
mostrar y ocultar contraseñas funcionalidad y diseños, también.
Bueno. Ahora, un poco sobre la tematización.
MDC responde a la temas de Android, así que aquí hay un
repaso rápido de cómo los temas y estilos funcionan. Cualquier cosa
aplicada directamente a una vista en XML solo cambiará la vista única.
También puedes actualizar el estilo. Entonces, si estableces
un atributo en un estilo, cambiar Esto aquí afectará a algunos pocos
que estén usando este estilo. Si no es para definir un estilo o no
hay un estilo establecido, irá volver al estilo predeterminado. Entonces,
aquí, si quieres cambiar el apariencia de un grupo completo de componentes,
puede establecer el valor predeterminado estilo.

Y finalmente, si ese
atributo no está definido en cualquier otro lugar, se verá en el tema.
La forma en que se tematiza el material funciona es que hay un conjunto de
atributos de nivel superior que debes sobrescribir tipografía, colores,
formas y el valor predeterminado estilos. Si necesita un control
más detallado, puede enganchar en, en cualquiera de estas capas, y cambiar
sólo el color de una vista única o el color de todo un determinado
componente. Aquí hay un ejemplo de nuestra
biblioteca del chip. Viene del hecho de que otros estilos, en nuestra
biblioteca, pueden hacer referencia estos mismos atributos. A continuación se
muestra un ejemplo de un botón. Ellos tienen la misma apariencia de forma,
que es el componente pequeño apariencia de la forma. Si queremos actualizar
la apariencia de nuestro aplicación para estos pequeños componentes, todo
lo que tenemos que hacer es actualizar esto atributo en un lugar de nuestro
tema y le mostraremos un ejemplo en un momento. ¿Cuáles
son los efectos de estos? atributos? Intentamos aplicar los atributos
del tema de una manera que Tendría sentido, pero definitivamente
es posible que elija valores para diferentes colores que
pueden no verse muy bien juntos.

Deberías consultar material.io
para ver cómo funciona. reaccionar. Otra solución sencilla
que podrías hacer es hacer un Tema de depuración que establece valores
extravagantes y ve cómo se ven las cosas. Aquí está la barra de mapa inferior
en el sitio material.io y puedes Veo allí que el contenedor en
sí es como una superficie y Los íconos están en la superficie.
Y hablaremos de cuál atributos que puede modificar, así
como cosas que debe observar en la siguiente sección. Entonces,
subsistemas temáticos. Nosotros Actualmente tienen tipo, color
y forma. Estos son los que tu Debes modificarlo para crear un tema para tu
aplicación. Ojalá la mayoría de ustedes están familiarizados con las apariencias
del texto. Pero hemos incorporó Material Theming, que utilizando
atributos del tema, para haga referencia a estas apariciones
de texto. Entonces, aquí hay una ejemplo de una barra de herramientas, que utiliza
el atributo de título seis en lugar de un estilo directamente. Y
aquí hay algunas copias que usan. el cuerpo un atributo.

Estos son
los atributos de tipo que lo hemos definido así, si sobrescribe
cualquiera de estos en su tema, puede configurar el estilo y la apariencia
de su aplicación. El color es otro y probablemente estés
familiarizado con el primario. Color y acentos primarios. Disponemos de
una gama más amplia de colores para que tienes más control. Estos son los
nombres semánticos de los paleta de colores que funcionan con
temas culturales. Tenemos primarios, primarios primarios.
Esas son las cosas que deberías generalmente el tema es obsoleto de su
aplicación. También hay un superficie de fondo y colores
de error. Puedes diseñarlos, pero no necesariamente es necesario.
Y luego el primario, en la secundaria, deben ser accesibles
cuando se extraen encima de los otros colores. En
primaria, eso será sorteado encima del color primario. Si tiene
texto mostrado encima de el fondo primario, debe
ser el color primario. Estos son los atributos de color
que hemos definido. Puedes ver que hay muchos nuevos. Intentamos
reutilizar algunos que vinieron. desde appcompat y tenemos un
fondo de color de Android que uso, que es solo la versión normal
de Android de ese atributo.

La
forma es otro subsistema que puedes tematizar. Y todo sucede
con la forma material. dibujable. Entonces, estamos agregando
la forma del material dibujable como fondo para botones, Tarjetas, fabulosas, barra de mapa inferior.
Funciona con borde y esquina. tratos. Tenemos
borde y esquina. tratamientos definidos para esquinas
redondeadas y cortadas, que es cada componente que vas a encontrar. Siempre
puedes crear el tuyo propio, también. Entonces,
aquí hay un ejemplo de Kotlin. código, que define una esquina redondeada,
tratamiento y establece que a la forma del material dibujable, para
aplicar esquinas redondeadas a todo. Aquí también está la versión
XML. Así que si usted queremos hacerlo en XML, tenemos
apariencia de forma y es similar a la apariencia del texto. Los
atributos, aquí, son la esquina. familia y el tamaño de la esquina y esto
lo configura como redondeado esquina con radio 24Dd.

Puedes
sobrescribir individuos esquinas. Estamos sobrescribiendo la parte
superior izquierda para cortar y puedes Haz lo mismo en XML. Una cosa a tener
en cuenta es que estamos usando una superposición de apariencia de
forma aquí, que es básicamente la Lo mismo excepto que solo definimos
los atributos que desea anular. El botón de material
tiene una apariencia de forma. algunos aquí, estamos configurando la esquina
superior derecha para cortarla. Todo lo demás será
heredado del estilo del botón de materiales. Una
llave La idea de Material Theming es agregar
mapeo.

Esto puede ayudar a dar su aplicación una apariencia más consistente
al conectar superficies a través de la forma. Hay componentes
pequeños, medianos y grandes y Estos son los atributos que puedes
establecer en tu tema. Si quieres rediseñar todos los componentes
pequeños para tener un corte correcto esquina, puedes hacer eso. He aquí
un ejemplo donde, simplemente como dije, anulando el estilo de componente
pequeño. Así que nosotros redefinir la apariencia pequeña, la
forma del componente pequeño apariencia, en la temática, a nuestro
estilo. Y aquí estamos poniendo la esquina superior derecha que se va a cortar
y también estamos configurando el padre aquí para que herede todo
el otro: el redondeado esquinas para las otras partes.
La sombra es algo que queremos mencionar también.

Se admite
la elevación nativa para formas en Lollipop. Para API 21 y superiores.
Pero volvemos a portar sombras a API 15 para formas
cóncavas y convexas para casos comunes, como esquinas redondeadas
o cortadas, así como para el barra inferior del mapa porque tiene
el recorte en su interior. Él no obtendrá sombra nativa, por lo que
simulamos la sombra con un degradado. Ahora que hemos oído hablar de nuestro
subsistema temático, ¿cómo ¿Aplicarlos a tu aplicación? Tienes
esta aplicación appcompat, nosotros Estaré construyendo algo que se parezca
un poco a esto. Cuando Si construyes tus propias aplicaciones,
se verá mucho más hermosa y más cohesivo que esto. Entonces, lo primero
que tendrías que hacer es, si estás usando el tema de la barra de
acciones, puedes cambiar al material Tema de componentes. Estamos usando
el tema puente porque queremos para optar por usarlos uno por uno.
Generalmente te recomendamos cambie al tema completo, el
tema normal antes de probar El tema del puente.

Entonces,
digamos que configuras estos atributos de color del tema. Algunos
de los existentes que conoces son Primaria y secundaria. Hay primaria
y secundaria. usted Veo que este color secundario no aparece
en ninguna parte de tu aplicación. todavía, pero lo será. Lo
siguiente que queremos hacer es obtener Botones materiales. Si configura el
estilo del botón de material en tu tema, todos tus botones deberían
convertirse en material botones cuando cambia la etiqueta XML.
Si estás usando nuestro completo tema, esto sucede automáticamente.
Tenemos muchos otros estilos predeterminados
que hemos presentado aquí, todos es el nombre del componente, más el estilo.
Por ejemplo, si configurara estilo de tarjeta de material
en su tema. Y luego vamos a Estaremos aplicando algunos atributos a
estas tarjetas. Puedes enviar tarjeta elevación, color de trazo y ancho
de trazo. Y luego digamos que desea cambiar
el estilo base de todos los botones, usted definiría su propio estilo
de botón y establecería el padres de él para delinear el botón
y luego todos sus botones cambiar a botones de contorno.

Ahora
podemos aplicar alguna forma. Tematización de todos tus botones. Entonces,
vamos a definir la forma. apariencia y establezca las esquinas derechas
a cortar y las esquinas izquierdas esquinas para redondear y establezca el
tamaño de la esquina y ahora tiene este botón en forma de flecha. También
puedes hacer esto usando una forma. apariencia superpuesta, ya que los botones
tienen una esquina redondeada por por defecto. No es necesario configurarlo
para el lado izquierdo. tu deset lo que estás cambiando y tendrá
efecto normalmente. Y luego digamos que queremos tener
algunos botones con iconos, Defina este estilo de botón de icono.

Establecer
los rellenos y los anchos mínimos. como quieras y luego aplica esto
a tu botón directamente en el XML, además de configurar ese icono
en la descripción del contenido y entonces tienes el botón del ícono de
compartir en lugar de ese compartir botón de texto.
También puedes cambiar al barra inferior del mapa. Entonces, para esto,
tendrías que configurarlo en tu tema y luego elimine la barra de aplicaciones
superior de su diseño XML y agregue esta barra de aplicaciones inferior aquí.
Puedes agregar una acción flotante.

Botón agregando el botón de acción
flotante a su diseño y configurar el atributo de anclaje de
diseño para que apunte a la aplicación bar. Esta fabulosa tiene ese color verde
azulado y eso se debe a que Aún no he configurado el estilo predeterminado
del botón de acción flotante. Entonces, Una vez configurado, verás que está usando la
sección de color. secundario. Luego
podemos darle estilo al texto. por el contenido de nuestras tarjetas.
Digamos que quieres que todo tu texto Sea color en la superficie, usaremos
un tema material. superposición, de la que hablaré
en solo un segundo. Establece el tema para todos los contenidos de esos
componentes. estamos configurando es terciario. Superposición de temas materiales,
es posible que hayas oído hablar de ellos.

Tema de Android, puedes diseñar una
subsección. Puedes diseñar un barra de herramientas de color oscuro
en su aplicación. El defecto es no funciona en el estilo predeterminado. No
puedes configurar el tema de Android. El atributo Material Theming está respaldado
por nuestros componentes y Funciona en estilos predeterminados para
que puedas configurar esto para tu componentes y tenga su tema: las
subvistas de sus componentes. Por último, crearemos algunos temas para
la apariencia del texto. Entonces, anteriormente, el título tenía una
apariencia de texto codificado estilo. Y de manera similar, para el texto,
observe también el cuerpo. Y luego podemos aplicarle algo
de estilo. Entonces, para Por ejemplo, si cambia el título seis
para que sea comic sans, debería ahora luce así. Entonces,
¿por qué pasar por el problema? de hacer esto? ¿Por qué tomarse
la molestia de usar ¿Atributos de alto nivel para tu estilo?
Generalmente hacemos esto porque queremos poder diseñar
toda tu aplicación usando estos atributos de nivel superior. Digamos que tu
compañero de equipo dijo, oye, nuestro Los colores de la marca están cambiando
y queremos este color granate.

De estos azules que tenemos. Cambias
los atributos del color superior. y toda tu aplicación cambia de tema.
Si quieres un tema oscuro o falso tema oscuro, cambias los atributos
de color y deberían responder apropiadamente a eso.
Ahora vamos a hablar de componentes personalizados y cómo puede
utilizar algunos de sus estilos. Realmente no hay nada mágico en la forma
en que se utilizan nuestros componentes. tematización. Se trata solo de temas básicos
de Android, por lo que puedes usar también en sus componentes. Sólo
tienes que crear un estilo predeterminado y páselo a
su constructor. Entonces vamos a través de eso. Aquí tenemos una
definición de un tema y algunos atributos. Aquí, estamos creando
un estilo predeterminado. atributo y configurarlo en nuestro tema para
que tengamos mi vista personalizada estilo y lo estamos configurando en
este estilo widget.mycustomview.

Entonces, esto significará que cualquier
componente que use este mycustomview utilizará este estilo de forma
predeterminada. También puedes crear un estilo, que contenga
algunos estilos diferentes. atributos. Y luego solo necesitas
usarlos en el constructor. A continuación se muestra un
ejemplo de una vista. Aquí pasamos el estilo predeterminado, que creamos
anteriormente. Y nosotros pase esto aquí para que pueda elegir
ese estilo predeterminado si no se establece nada más.

Y luego,
elevar atributos y pasar. el estilo que acabamos de
crear, así como el que pasado al constructor y un estilo
alternativo como último recurso para encontrar atributos
y leerlos. Eso es básicamente cómo funcionan nuestros componentes. Entonces
definitivamente puedes hacerlo. usted mismo también. Y
también ampliar los sistemas para sus casos de uso. Me gusta,
si necesitas más atributos en algunos casos, definitivamente
puedes agregarlos. Podría requerir un poco más de trabajo
de tu parte porque tendrás para actualizar los estilos de todos los componentes
que está utilizando desde nuestros componentes no harán referencia
a ellos.

Pero si tu Necesito si, definitivamente puedes hacer
eso. He aquí un ejemplo. Como un
atributo. Créalo y define póngalo en su tema y haga referencia a
él en estilos o en otros lugares. Ahora, un poco sobre nuestro proceso.
Hemos tenido algunos lanzamientos. La versión 1.0 salió, se
cortó el 20 de julio y ya está. Ha pasado un poco de tiempo. Pero
ahora con Android Jetpack re finalizar la refactorización, podemos publicar con
más frecuencia, así que estamos intentando para aumentar nuestros lanzamientos y cortamos
1.1 alfa el 1 de octubre 31 y estamos intentando hacer esto
con más frecuencia. Había temas de tipo, temas de colores y temas
oscuros, además de muchos errores correcciones y mejoras de
rendimiento.

En los próximos lanzamientos, habrá
temas de formas. 1.1 alfa, el subsistema de tematización
de formas existe, pero ninguno de los componentes en realidad
responden a esos temas atributos todavía. Pero con el próximo
lanzamiento, debería hacerlo. También actualizamos algunos estilos para los
diálogos, la hoja inferior, los menús, Ese tipo de cosas están por
llegar. En cuanto a cuestiones de contribución
y archivo, GitHub está donde está. Vaya a GitHub y podrá ver todo
nuestro código. Está abierto fuente. Y también verifique: puede
consultar GitHub para instrucciones sobre cómo enviar informes
de errores. Estamos tomando errores reportera en issuestracking.Google.
Pero, Estamos buscando diferentes maneras
de hacerlo más obvio. Estamos trabajando y tratando de
integrarnos más con el comunidad. Y aquí
hay algunos recursos más.

El sitio Material.io es genial, especialmente
la sección de Android. Definitivamente visítanos en
Discord si estás interesado en chateando con nosotros o está
interesado en ayudarnos a tener una idea para cualquier cosa. Ven y charla
con nosotros. tenemos una etiqueta Stack Overflow, así que si tienes preguntas
sobre la implementación, puedes preguntar algo allí, lo
estamos observando y lo haremos responder. Y luego tenemos algunos codelabs,
puedes encontrar el enlace a esos codelabs en esta página de GitHub.
Y eso es prácticamente todo.
Gracias por venir. Iban estar disponible para preguntas
y respuestas en el receso que es ocurriendo ahora.
Gracias. [Aplausos] [Aplausos]
Hola a todos. Mi nombre es Ian Lago. Soy desarrollador en el equipo
de Android. Y trabajo en bastantes proyectos, pero el más notable
es el de Navegación.

Componente de arquitectura, así
como fragmentos y AndroidX artefacto y cargadores. Y
hoy quiero hablar contigo sobre una sola actividad, por qué, cuándo
y cómo. Y realmente trata de compartir las mejores prácticas
de Android treme y de Equipo de componentes de arquitectura sobre
lo que realmente está sucediendo en este mundo. Ha habido muchas preguntas,
desde hace mucho tiempo, desde 2014, 16 e incluso aquí en 2018, así que
estamos aquí, hoy, para algo así como hablar sobre todas esas cosas maravillosas
que componen lo que son actividades. Las
actividades son realmente una hormiga componente, al mismo nivel de proveedores
de contenido, transmisión recibe y son las piezas de su aplicación
orientadas a la interfaz de usuario. Entonces, cuando el marco de Android
inicie su aplicación desde un ícono de inicio o un acceso directo
a una aplicación o lo que vemos cuando estás haciendo ventanas múltiples, todas esas
son actividades, ¿verdad? Entonces son los puntos de entrada a las aplicaciones.
Cuando el usuario va a inicia su aplicación, están
iniciando una actividad.

Y tuvimos una cita muy interesante
de Diane Hackborn. En 2016, una vez que llegamos a este
punto de entrada, realmente No importa cómo organices el flujo
interior. Esto fue en 2016 y Creo que fue controvertido, supongo,
en 2016. Tenía 77 comentarios en Google+, ¿de acuerdo?
[Risa] Mucha gente se mostró muy entusiasmada
con esta publicación. Bueno, ¿qué significa? Bueno, lo
que creo que significa es que Al marco no debería importarle. Al
marco no debería importarle sobre la arquitectura de
su aplicación. necesita Proporcionar los ganchos necesarios para
que el marco de Android inicie su solicitud. Pero probablemente deberías
preocuparte por el arquitectura de su aplicación y es
por eso que están todos aquí hoy y me encanta tenerte aquí. Entonces,
el mayor problema es que realmente no sabes qué actividad
va a hacer realmente. Entonces, ¿cuál es la animación predeterminada
para una actividad? Depende de la versión de Android, de
qué fabricante eres y qué temas que el usuario ha seleccionado. Bien.
Entonces, de manera similar, tuvimos animaciones de propiedades agregadas
en API 11 y son muy superiores a ver animaciones.

Y es que
si bien estos nuevos cosas se vuelven posibles en las nuevas
versiones de Android, no son siempre aplicado a todo y cosas
como actividades, ellos no admite animaciones de propiedades,
en absoluto, incluso hoy en día. E incluso si los agregáramos, en
la próxima versión de Android, tal vez la letra después de
P, no podríamos respaldar ellos porque son parte del
marco. Pensar en todas estas cosas es como,
bueno, está bien, ¿qué ¿Para qué se debe utilizar una actividad?
¿Por qué incluso tenemos actividades? Son útiles como punto de entrada
y más allá de eso, estás en tu ámbito de lo que tu aplicación
necesita hacer y tú no necesariamente debemos confiar en
que las actividades sean lo que tienes que trabajar con. Entonces,
tomemos un ejemplo. Estamos llamando a iniciar actividad y
tenemos que usar ActivityCompat. porque queremos hacer una transición de elemento
compartido. Nosotros decimos, oh queremos que este elemento sea compartido.
Bueno, ¿qué funcionan las API? ¿en? Depende de lo que quieras decir
con trabajo. Se lanza un actividad, eso es cierto.

Solo
va a hacer una parte. transición a ediciones más nuevas,
21+. Técnicamente funciona, estás guardando algunas comprobaciones de
API. Pero realmente, este no es el El código más bonito para mirar.
¿Hay trampas ocultas? Si probaste en una versión anterior de
Android, ¿realmente estás ¿Tendrás la misma experiencia?
En este ejemplo, yo De hecho me encontré con esto y pensé,
oh, las cosas se están desvaneciendo y fuera. Debe excluir cosas
como la barra de estado y barra de navegación; de lo contrario,
parpadearán y pensé: Bueno, está bien, eso es divertido.
Nunca lo hubiera sabido a menos que lo haya probado una vez
y lo haya probado en un montón de tener de dispositivos. Hay muchas trampas
que no puedes controlar. Otro ejemplo donde tenemos diferentes
actividades y es su propio componente. Si tienes
dos y quieres compartir datos entre ellos, no hay margen
para eso. es atendido por servicios. Quieres un alcance compartido
dentro de un par de componentes. Entonces
esta es la estructura que Android ofrece, pero tal vez no
sea el que realmente deseas usar.

Lo que realmente quieres
es construir las capas. necesitas. Podemos tener múltiples
destinos dentro de una actividad. y compartir información en
cada uno de estos destinos utilizando el ámbito de actividad como un
elemento realmente útil ahora. Entonces, por ejemplo, podría tener un elemento
de vista compartido, un ViewModel que ambos destinos hablan. Un
destino podría poner datos y se podían observar cambios en
esos datos. No es necesario trabaje en el nivel de alcance de la aplicación
para que esto funcione. Entonces, mencioné esta palabra,
destino. Entonces, ¿qué es un ¿destino? Bueno, en realidad, es sólo una
subsección de tu interfaz de usuario. Entonces, para la mayoría de los
destinos, se harán cargo la mayor parte de tu pantalla.
Bien.

Por ejemplo, cuando pasas de una pantalla
a la siguiente en tu aplicación, va a cambiar la gran mayoría
de tu pantalla. Tal vez tienes navegación global, como una navegación
inferior. El resto de esto Está todo en un destino. Entonces,
la subsección de su UI, nosotros Tengo una palabra para esto llamada
fragmento. Pero es un fragmento implementación de esta idea de
tener destinos separados para cada pantalla de tu aplicación.
Y realmente, este fragmento es sirviendo como controlador de vista,
cierto. Lo que no es un vista en sí misma, sino algo que
posee y cambia esas vistas, que en realidad tienen más que ver con la visualización.
Está bien.

Entonces, realmente, la
actividad, en lugar de poseer todo de esta lógica de negocios
y cosas así, es realmente tan lo más pequeño físicamente posible y trabajando
en esa interfaz de usuario compartida que es compartido en todos los destinos.
Entonces, cuando pensamos en esto, como, si nos estamos moviendo de este
mundo de actividades a un mundo de destino, queremos hacer que ese
mundo sea lo más fácil posible posible, de lo contrario, ¿por qué nos
mudaríamos? Nos centramos en dos cosas. Uno era el tipo de interfaz de
usuario global. Como, ¿cómo podemos ¿Hacer esa parte fácil? Es
algo que cada aplicación tiene mismo tipo de patrones y no
queremos que eso sea algo eso requiere mucho esfuerzo para hacerlo.
Además, la navegación entre destinos, cierto. Actividad,
cosa compatible con actividad, ¿Podemos hacerlo aún más fácil?
Iniciamos la Navegación Componente de arquitectura y se
lo reintroduje a todos ustedes en E/S.

Todavía está en alfa en este momento
y estamos buscando completar elimine todas las lagunas de funciones antes
de llevarlo a 1.0 aquí pronto. Pero realmente lo que esto nos permite hacer
es tomar una forma súper simple. actividad como esta, configura la vista de contenido,
configuraremos una barra de acción porque eso es una cosa, ¿verdad? Y
queremos que esto sea inteligente pero aún queremos que quepa en esta diapositiva
de código. Asi que algunos de esto es que necesitamos un navegador controlador. Sabe cómo funciona tu aplicación
a través de una navegación.

Grafico. Podemos conseguir uno. Estamos
usando Kotlin aquí y llamamos encontrar controlador de navegación. Le estamos dando
el ID de un host de navegación. fragmento. Es esa parte de tu
UI la que va a cambiar. cada vez que cambias de destino.
Agregaremos una aplicación configuración de la barra. Esto controla
la acción hacia arriba y lo que debe suceder cuando asciendes
desde un destino. y como ¿Conectamos eso? Tenemos una bonita
frase que dice configurar el barra de acciones, le proporciona un controlador
de navegación y una barra de aplicaciones configuración. Ahora
porque estamos usando un cajón.

Diseño aquí en la configuración de nuestra
barra de aplicaciones, también queremos abre y cierra el cajón cuando
presionas el botón. llamaremos navega hacia arriba en nuestro soporte navega
hacia arriba. Hemos configurado nuestro barra de acción completa y ahora cambia
los títulos según nuestro cambios de destino. Estamos bien.
Si queremos agregar el vista de navegación para que podamos hacer clic
en la navegación lateral, esa es una línea.

Podemos hacer todo esto porque
el controlador de navegación sabe sobre nuestros destinos en nuestra aplicación.
Entonces, ¿cómo hacemos realmente
acciones de navegación si no ¿Haciendo cosas elegantes de una sola línea? Podemos
obtener un controlador de navegación de en cualquier lugar. Es aún más fácil a partir de
un fragmento, podemos hacerlo. findnavcontroller y hemos creado
una extensión Kotlin para este. Cualquier vista creada por cualquier
fragmento en su El gráfico de navegación puede llamar a buscar.
Entonces, tienes esta referencia a básicamente desde cualquier lugar.
Y realmente tratamos de pensar, como, está bien, bueno, si tienes
argumentos para algo, ¿cómo? ¿Hacemos esto lindo? Entonces, creamos
un complemento de Gradle. . Generamos un objeto de direcciones, que
tiene una apariencia agradable y simple. mostrar método de perfil, que le proporciona
un objeto de direcciones con argumentos de tipo seguro que usted define
en su gráfico de navegación y luego solo llamas para navegar. Entonces
esto lo hace mucho más fácil.

Pero podemos llegar mucho más lejos con
la navegación. ¿Alguien alguna vez ¿Construiste un filtro de intención antes? ¿Enlaces
profundos en tu aplicación? Tiene ¿Alguien disfrutó esa experiencia?
[Risa] ¡Excelente! Una persona disfrutó de esa
experiencia. Esto es lo que el El marco de Android lo sabe. Lo sabe,
puedo analizar una intención. filtrar e iniciar una actividad. Pero
en muchas ocasiones, eso es no es suficiente. Necesitas ir un
poquito más lejos. Entonces lo que hemos hecho, en la navegación,
es para cualquiera de sus fragmentos, cualquier destino en su
gráfico, puede agregar un profundo enlace.

Es una frase simple y puedes
agregar argumentos correctamente. aquí y los analizaremos en busca de parámetros
de consulta y le daremos Se los presento como argumentos para
su destino. porque nadie le gusta escribir filtros de intención,
generaremos la intención filtros para ti. Agregamos esto al manifiesto
de fusión para generar eso para ti. Entonces,
todas estas capas nos ayudan construir API mejores. Pero también hace
que sea más fácil probar su solicitud. Bien. Si estás realizando la
prueba en el nivel de actividad, de repente, eso significa, está bien,
bueno, ¿cómo pruebo, empiezo? La actividad realmente tuvo la intención
correcta y tenemos que construir marcos de prueba adicionales además de
los marcos de prueba para maquetar estas cosas. Si pasamos a un
modelo de actividad única, Quiero probar todas esas cosas. Queremos
que sea fácil de probar. Entonces, la regla número uno para probar
cosas en el nivel de destino es decir, no realice la prueba
en el nivel de destino. Es realmente Lo principal de las pruebas,
cierto, es hacer cosas. agradable y separado y extrayendo
parte de esa lógica empresarial de un destino y en algo
que puedas probar en aislamiento.

Bien. Por ejemplo, un
ViewModel es un gran lugar porque puedes probarlo de forma
aislada. Tenemos un modelo de vista proveedorfabricante de proveedores donde
puedes inyectarlo y probarlo separado de su interfaz de usuario. Pero
eso no significa que no quieras prueba cualquiera de tus elementos de interfaz
de usuario. Bien. Tenemos la prueba de Espresso por
una razón. queremos asegurarnos Todas las partes de nuestra aplicación funcionan
bien y se pueden probar. ¿Entonces cómo podemos hacer esto?
Así que el pasado lunes publicamos fragmento 1.1, el primer alfa. Y con esto
se convirtió en un nuevo artefacto llamado prueba de fragmentos,
que son aproximadamente seis años de retraso.
[Risa] Y realmente se trata de poder
probar tu AndroidX. fragmentos de forma aislada. Bien.
Separado de una actividad. Separar de todo lo demás
y poder probar y verificar que ese fragmento esté
haciendo lo correcto. Súper útil para Epress, así que pruebe. Tu
alojamiento de negocios, aparte. Su La interfaz de usuario sigue siendo algo que
queremos verificar que sea correcta.

Ahora, lo bueno de esto es que se
llama escenario de fragmentos. porque se basa en el escenario de
actividad, que es parte del El equipo de pruebas de AndroidX y el equipo
de pruebas fueron fundamentales para sacando fragmentos por ahí. Pero
la mejor parte de esto Todo el escenario es que funciona tanto
en pruebas de instrumentación, pruebas en su dispositivo real y
en robo electric. Tienes uno marco de prueba que funciona en
ambos. Realmente emocionante oportunidad y algo que ahora puedes
probar con fragmentos. Entonces, ¿cómo se ve esto? Digamos
que queremos probar nuestro fragmento de perfil. Hicimos una identificación
de usuario falsa aquí y llamamos a iniciar fragmento en contenedor.

Eso es todo.
Esta línea tiene ambos creó una actividad vacía, le agregó
un fragmento y esperó se reanudará y ya está listo.
Ahora puedes usar esto fragmento. Si desea llamar a onfragment
y ejecutar algún código y digamos que el fragmento está en el estado
correcto, genial, puedes hacerlo. Aquí vamos a ver si es lo que
creemos que es. Nosotros pasado una ID de usuario, podemos usar
la clase ARG y decir, es el usuario ¿ID igual al ID de usuario que
ingresamos? Puedes ver, puedes ejecute cualquier lógica, cualquier método
en su fragmento directamente desde aquí o Realizamos la prueba Espresso OE.

Cuando hacemos
clic en el botón de suscripción, ¿Cambia el texto a suscrito?
¿Hace su ¿cosa? Podemos hacer esto con esa línea
de fragmento de lanzamiento en envase. Para los
usuarios de Java, será escenario de fragmento. Lo hacen más agradable
para ustedes. Pero no se prueba un fragmento de
forma aislada porque, ya sabes, Los fragmentos hablan con otros fragmentos,
¿verdad? Yo trabajo en navegación, así que hay otra parte
de prueba sobre cómo podemos probar los vínculos entre diferentes
destinos, entre diferentes ¿fragmentos? Lo bueno que tenemos
aquí es que estamos usando estos componentes de
nivel superior, y no algo Al igual que la actividad, tenemos
una capa simulable.

Bien. Uno de las cosas que encontramos, qué construcción
de navegación es más empresas, una vez que llegan
a cierto punto y dicen, bueno, deberíamos agregar pruebas.
Agregaron navegador para simular la actividad de inicio llama. Esa
capa se maneja por usted. Qué lo que podemos hacer, en nuestras actividades, es simplemente
simular esa navegación controlador y confirme que sí, está
llamando a la persona correcta navegar llamadas. Aquí
tenemos nuestro perfil. fragmentar nuevamente y obtener nuestra identificación
de usuario y lo que queremos La prueba es este en el botón Ver suscriptores.
Hacemos clic en esto y es haciendo algo complicado en
el fragmento. como vamos para probar esto? Está llamando a
navegar. ¿Cómo podemos asegurarnos ¿Esto realmente está haciendo lo que
queremos que haga? Bueno es muy fácil.

Podemos hacer nuestro
escenario de todos modos, fragmento de lanzamiento. Y ahora podemos simular
nuestro controlador de navegación y ahora llamas a onfragment y lo que estamos
haciendo aquí es en realidad simplemente creando nuestro propio controlador
de navegación. Como, no hay host de navegación aquí. Pero podemos simplemente
inyectar uno. esto es lo que navega fragmento de host está haciendo bajo las
sábanas. Está llamando a set nav. controlador en una vista. Ahora lo que hemos
hecho es a partir de esto. Desde el punto de vista de los fragmentos, tiene
un controlador de navegación. Todo esas llamadas al controlador de navegación
que normalmente tendrías que inyectar algo, ahora simplemente funciona. Están
ahí dentro. Y ahora nosotros puede simplemente ejecutar pruebas de Espresso
y hacer clic en la vista de suscriptores botón. Podemos usarlos también en nuestras
pruebas. Y porque ellos implementar iguales, podemos simplemente hacer
una verificación simple y decir, verificar. ¿Realmente navegaste hasta donde
creemos que estás? navegando? Incluso si hay muchos
parámetros ahí, nosotros Ahora puedes simplemente verificar y esto
hace que sea mucho más fácil probar.

Aquellas interconexiones entre
cada destino. Entonces, navegación El controlador es algo especial.
Tantas otras cosas no son un tipo de patrón de localizador
de servicios. Necesitamos inyectar esas dependencias y esta es
otra de esas, como, seis años demasiado tarde, algo así. Pero
finalmente estamos trabajando en él. Entonces,
hay una clase en Android P. llamados factores de componentes de la
aplicación que le permiten construir actividad todo a través de inyección
de dependencia. Tienes la oportunidad de llama al constructor en lugar de
que el sistema lo llame. Mismo cosa aquí con fragmentos. Ahora puedes
hacer conSTRTRUTH estructurar en fragmentos. Puedes utilizar
una fábrica de fragmentos. Entonces, esto también es realmente útil
para los casos en los que su fragmento Fue como transmitir tu actividad
a algo. se que nosotros Probablemente todavía tenga una plantilla
que haga esto. Lo arreglaremos. Y hay muchas maneras en las que realmente
quiero inyectar en todas esas dependencias externas para que podamos
probar de forma aislada y fragment funciona muy bien con nuestro
escenario de fragmentos. Sabemos cómo probar un ViewModel,
¿verdad? Es sólo un objeto, Tiene un método real llamado
suscripción.

Realmente queremos probar nuestro fragmento. Y nuestro
fragmento tiene una suscripción. fragmenta y hace lo suyo. ¿Cómo
obtenemos este ViewModel? Bueno, podemos inyectar la fábrica
misma, inyectar el ViewModel fábrica. Aquí estamos usando by
ViewModels, una propiedad que hace todo ese tipo de cosas que proporcionan
los proveedores de ViewModel para tú. Pero
ahora tenemos un fragmento que Hemos inyectado algo, pero aún
tenemos que probarlo. como, está bien, ¿realmente llamó? ¿suscribir? Entonces,
podemos construir una navegación. actividad. Así es como se
verá en la vida real. Bien. Vamos a inyectar nuestra
fábrica ViewModel y luego porque el código es difícil y quería
escribir cosas en él diapositivas, construí un inicializador de
llamadas de clase auxiliar y tú llamas agregamos un inicializador para cada
fragmento y llamamos a ese método para construir. Entonces, un poco
de magia. Hay un enlace aquí si quieres comprobarlo. Estamos
tratando de intentar integrar esto más profundamente en
la biblioteca.

Una vez que hayas llamado a esta fábrica
de fragmentos, creará un perfil. fragmento. Utilizará este constructor
y pasará nuestro Fábrica de ViewModel. Excelente. Entonces,
nuestra actividad se ve bien. Pero, nuestras pruebas, ¿cómo se ve? Creamos
un simulacro de nuestro perfil. ViewModel y luego podemos configurar una
fábrica para él y luego nuevamente, Es una especie de uso de una fábrica de fragmentos
aquí que, nuevamente, hace lo mismo. tipo de cosa que estamos pasando
en nuestro modelo de vista simulado fábrica y nuestro escenario parece
el mismo. Lo agregamos y en lugar de sólo argumentos, también
la fábrica de fragmentos. Ahora podemos hacer lo mismo en la
vista, realizar el clic y luego verifique que sí, nuestro ViewModel
simulado se suscribió llamar.

Tenemos un fragmento comprobable,
un ViewModel comprobable. Tenemos algo comprobable. Ahora,
estamos viendo algunos mejoras en esta API porque,
ya sabes, queremos haz esto aún más fácil. Entonces, en
este caso, debido a que conocemos su Al construir un fragmento de perfil,
queremos cambiar esto a algo que se parece a esto. Donde
puedes decir lanzar y luego dale un método diciendo,
oh, como si lanzaste esto fragmentar y darle específicamente
la instancia construida de su fragmento para que no tenga
que saber realmente que es usando una fábrica de fragmentos en bajo el capó. Hay
algunos casos en los que usted Podría pensar, oh hombre, tal vez necesito
múltiples actividades. Y, Tiene que haber razones para utilizar múltiples
actividades además de solo impulso. Bien. Entiendo que muchas
aplicaciones, si tienes múltiples actividades en este momento, esto
no es realmente una tarea fácil vender. Bien. Así pues, hay algunos
casos en los que incluso hoy en día Recomiendo utilizar múltiples
actividades. Aunque no mucho.

Entonces, lo que me gustaría decir es que
en realidad no necesitas múltiples actividades. Lo que necesitas son
múltiples tareas. Cuáles son ¿tareas? Las tareas son en realidad lo
que los usuarios realmente hacen. interactuando con. Entonces, una tarea es
una pila de actividades y cada una La tarea tiene un backstack. Entonces, en su
menú de descripción general aquí, cada una de estas entradas no es sólo una
actividad. En realidad es un Pila de tareas completa, ¿verdad? Así que
apenas estás viendo la parte superior. la mayor parte de la actividad de esa pila. Entonces
cada elemento aquí es una pila. Bien. Cuando estás haciendo múltiples
ventanas en pantalla dividida, son dos tareas una al lado de la otra. Bien. En
dispositivos con sistema operativo Chrome, cosas que soportan múltiples ventanas
flotantes, cada una de estas tareas es una ventana. Uno a uno
entre ventanas y tareas.

No actividades vínculos y ventanas,
tareas y ventanas. Entonces, iniciar una nueva tarea en uno
de estos dispositivos Chrome OS brinda usted una nueva ventana. Bien. Entonces,
tu aplicación, tal vez no necesite múltiples actividades, pero tal vez
quiera múltiples ventanas. Bien. Entonces, este es el caso en
el que, sí, necesitas usar actividades bajo el capó, cada
una de estas tareas va a ser una actividad separada. Pero no
puede utilizar algunos de los otras cosas, como una pila de actividades
en una sola tarea. Entonces, ¿Cómo se ve esto realmente?
Mucho de esto es que Hay muchas formas diferentes
de decir nueva tarea. Bien. ¿Alguien ha mirado todas esas maravillosas
banderas del modo de lanzamiento y ¿Toda esa diversión? Sí. ¿Cuántas
personas de ustedes siguen cuerdas? Bueno. Bueno, diré que hubo
muchas buenas banderas allí, en Android 1.
[Risas] Eran geniales en Android
1. Hoy, en 2018, son Quizás no sea lo mejor que puedes usar.
Lo que realmente quieres usar es Modo de inicio de documentos. De hecho, se
agregó el modo de inicio de documentos.

En API 21. Si está pensando primero en la
versión anterior a API 21, ¿cuáles son? ¿haces? Y, en segundo lugar, probablemente
intente mantenerse consciente de soluciones hackie. Tal vez simplemente
no valga la pena para aquellos usuarios. Pero trate de evitar cosas como
indicadores de modo de inicio y tareas. afinidad y ese tipo de cosas
porque mientras el El marco los respeta, tal vez
no los respeta en el futuro. forma en que quieres que lo honren.
Ciertamente hay muy diferentes tipos de cosas. Con el modo de inicio
de documentos, hay multitarea, si puedes tener múltiples
tareas, puedes múltiples ventanas. Tiene varias entradas en
su pantalla de descripción general. Entonces, la primera forma de realizar
múltiples tareas es existir. En los medios existentes cada vez que
lanzo esta actividad, eso La actividad tiene su propia tarea.
Cada vez que lanzas esto actividad, tiene su propia tarea.
Pero si ya hemos lanzado esa tarea, no cree una segunda y una
tercera copia.

Esto es bueno para documentos, conversaciones y cosas
que alguien podría querer comparar lado a lado. No
van a salir de una. doc, abre otro y cópialo allí.
esta tomando el modelo multitarea que es Android
y hacerlo así tu La aplicación realmente puede usar esto.
Ahora, por supuesto, la existencia Se supone que tienes alguna noción
de unicidad. Se supone de un ajustador de intenciones es igual a un punto
de vista, si estás usando los datos UI en su actividad, que hay algún tipo
de identificación única, una ID de conversación, ID de documento, algo para definir de forma única
esa tarea. Un gran ejemplo es Google. Documentos. Lo lanza en otra
tarea. Puedes cargarlos, uno al lado del otro en un teléfono. Dos ventanas
diferentes en un sistema operativo Chrome dispositivo. Y simplemente funciona.
Aunque es una aplicación, puede tener múltiples ventanas y realmente
permitir un nivel diferente de multitarea entre diferentes
cosas. Entonces, otro importante es la creación de contenido
nuevo. Entonces el contenido nuevo es un un poco diferente porque en realidad no hay
ninguna identificación única, pero tú Si desea ese comportamiento multitarea, puede
hacer referencia a los existentes.

Material mientras creas algo nuevo.
La bandera de siempre Es similar a existir, pero
siempre crea algo nuevo. Son como nombres autodescriptivos.
Podemos hacer esto, muchachos. Te permite hacer varias cosas
a la vez. Un ejemplo es Gmail, utiliza este tipo de modo cuando
creas un nuevo correo electrónico. Esto le permite crear un nuevo correo electrónico
y hacer referencia a su correo electrónico existente al mismo tiempo.
Es mágico, ¿verdad? Este es el equivalentes, en el móvil, a cuando
lo haces en una web y aparece un pequeño lunar que está separado
del otro. Tú todavía Necesito ese otro material como
referencia. En un teléfono o tableta, se
ve ligeramente diferente. El el otro caso es
imagen en imagen, tiene dos modos completamente separados. Uno está
utilizando una tarea separada. Bien. Entonces, esta sería una actividad
separada, sólo para su reproducción.

Entonces, esto es realmente común en Android TV. La televisión utiliza
este enfoque para que puedas poner las cosas en modo
imagen en imagen y navegar por otras películas. Entonces,
en este modo, es mucho que tienes un botón de imagen
en imagen específico en su interfaz de usuario. El otro
modo utiliza una sola tarea, una actividad. No necesitas nada
en absoluto. este es dúo y Google Maps, donde toda tu tarea
es convertirte en la Actividad de imagen en imagen. Bien.
Entonces, ¿cuándo querrías elegir uno u otro? Es realmente
este caso donde una vez Estoy en modo imagen en imagen,
si hicieran clic en mi icono del iniciador, ¿qué
pasaría? porque el lanzador El ícono siempre inicia la tarea predeterminada
de su aplicación.

Entonces, en Duo's caso, donde solo tienen una tarea,
cuando inicias ese Duo desde el icono de su iniciador,
simplemente se abrirá el imagen en imagen. Porque no
tiene sentido tener múltiples conversaciones al mismo
tiempo. nunca lo eres vamos a reemplazar uno por
el otro. nunca vas a continuar haciendo referencia
a algo aunque algo ya esté yendo. Ese es el diferenciador
aquí. Tú desea explorar imagen
en imagen que es la misma tiempo. Si quieres, sí, estás
usando Android. marco y necesitan posicionarlos
por separado. Tareas separadas. Actividades
separadas. Pero eso es todo. Lo único
que no mencioné es cosas como aplicaciones instantáneas. Las
aplicaciones instantáneas funcionan en el nivel de actividad. Bien. Lo llamas
inicio-actividad. Pero en realidad hay algunas cosas realmente
interesantes que se están trabajado por el equipo de Play.

Creo
que hubo una charla aquí en Cumbre de desarrolladores de Android. Mucho de esto
está relacionado con la instancia. experiencia para tu App Bundle, haciendo que
toda tu aplicación sea instantánea y también módulos de funciones
dinámicas. Estos son realmente formas interesantes de agregar
cosas a la cosa, que No requiere una arquitectura de aplicación
específica para implementar. Nosotros De hecho, puedo hacer más cosas con
esto. Para la experiencia instantánea, se agrega
igual significa verdadero. Pueden probar
toda tu aplicación, toda tu módulo base totalmente instantáneo
y esto funciona muy bien con cosas como enlaces de aplicaciones.
Entonces esos enlaces profundos que dije puedes agregar a cualquier
destino, también puedes hacer en enlaces de aplicaciones añadiendo la verificación
automática igual a verdadera. Cuando alguien lanza su enlace
profundo en la web, irá para abrir su experiencia de aplicación
instantánea y descargarla módulo base completo para usted y su
gráfico de navegación completo es ya ahí, listo para partir.
Pero esto no funciona si tu La aplicación es demasiado grande, por lo que
desea entregar dinámicamente cosas que No se usan muy a menudo o más bien
son cosas grandes.

Eso es lo que De qué se tratan los módulos de funciones dinámicas.
Sobre poder descargarlos bajo
demanda. Lo interesante Lo que pasa con los módulos de funciones
dinámicas es que estás agregando clases. No es necesario agregar actividades.
Puedes agregar solo destinos, sólo el número de fragmentos.
En este caso, usted Puede agregar nuevos destinos,
bajo demanda. Sólo porque has creó un archivo XML, cada uno de estos
módulos de funciones dinámicas Puede agregar su propio gráfico de navegación.
Entonces, esto significa que No estamos atados a actividades
separadas. Ahora podemos realmente Todavía uso una actividad.
Ahora aún queda más por hacer hecho aquí, tanto en el lado de Reproducción
como en el lado de navegación. Pero Queremos que esto sea realmente fácil de usar
para los desarrolladores. Así que lo que queremos llegar es donde puedes
agregar algo a tu gráfico de navegación con una etiqueta de
función, tal como agregaría un etiqueta de fragmento y cuando
navegas a este destino, eso en realidad va a hacer toda
la descarga y creación su módulo de funciones disponible desde
cualquier nombre de su división es.

Entonces, ese es el mundo al
que queremos entrar, donde puedas utilizar una sola actividad. Donde puedes
usar muchas de las cosas útiles. cosas, como enlaces profundos en la
navegación, sin contorsionarse la arquitectura de su aplicación. Entonces,
realmente me gustaría terminar esto. con una nota. Muchos de ustedes tienen
aplicaciones existentes que tienen tipos de experiencias muy
diferentes y me gustaría decir, Haz lo correcto para tu aplicación.

Creo
que una sola actividad es genial. Estaba escribiendo una nueva actividad, también
sería una actividad única. pero yo Date cuenta de que hacer y decir, oye,
eliminemos toda la aplicación. aparte, a veces es difícil de vender. A
algunos de ellos no les gusta tu aplicación actual. Entonces tal vez
consigas algo, sí, está bien, bien por ello. Realmente depende
de tu propia experiencia si Te encuentras contorsionando tu
propia experiencia y no es tiene sentido para ti, no lo hagas.
Bien.

Si algo funciona, está
bien. Mantenlo funcionando. Bien. Pero si descubre que
tiene problemas, estás teniendo un comportamiento
inconsistente o quieres compartir ViewModel, tal vez sea el momento
de pensar en avanzar hacia una sola actividad. Gracias.
Preguntas y respuestas afuera. En realidad Agradezco que todos hayan venido.
[Aplausos] Todos, la próxima sesión, en esta
sala, comenzará en 10 minutos. Gracias. [Aplausos] Hola. Y bienvenidos a la última
sesión de Android Dev. Cumbre, sobre lo último, creo.
El se llama Obtener Animado. Soy Nick Carnicero.
Soy Doris Liu. Soy Responsable de la API de Android.
Soy Nicolás Roard.
John Hoford, trabajando en MotionLayout y herramientas de diseño.
Excelente.

Entonces empecemos. Entonces, Android siempre ha tenido
API de animación. El número de Las API han crecido a medida que el sistema
ha crecido y se ha vuelto más Totalmente destacado. Hay una variedad
de API diferentes para diferentes situaciones que se han agregado
a lo largo de los diferentes Lanzamientos de API, así como a las nuevas
bibliotecas de soporte, como AndroidX. Pero,
a veces, escuchamos que el variedad, la variedad de sistemas de
animación puede ser abrumadora. Que no sabes a cuál recurrir
ni cuál es el mejor para un caso de uso determinado.

Entonces Nuestro objetivo es brindarle una descripción
general, decirle cuáles son. bueno, para lo que podrían no
ser buenos y te dan allí confianza sobre qué alcanzar.
vamos a gastar más tiempo en MotionLayout también.
El primero es el más antiguo y API de animación original, que es la animación
de vista de Android. me gustaría Le insto a que lo considere
obsoleto. En realidad no es en desusoen desuso. Pero tal vez sólo
piense en ello de esa manera. Entonces, esto, como digo, una API de animación
más antigua, era algo así como… se ejecuta en una determinada fase del sistema.
La mayoría de las vistas tienen un diseño de medidas y un sorteo.

Porque
las animaciones solo se ejecutan en el pase de sorteo, significa que no
podemos hacer ciertas cosas como aplazar un renderizado cuando no lo
necesitamos. También conduce a ciertas cosas a donde porque solo
la animación es solo Aplicaste el pase de dibujo, tal
vez hayas animado un botón, el Las vistas no han desafiado. Sólo existen
con el sorteo de visualización. sistema básicamente, considérelo
obsoletoobsoleto. Él Pertenece a un MUSEO.
[Risa] Yo diría que está en desuso excepto
que hay un único caso de uso y eso es cuando estás haciendo animaciones
de ventana. Cuando una nueva actividad se inicia, esta API solo acepta este
tipo de animación de ventana porque existía desde API 1. Pero también
porque estas ventanas Las animaciones deben indicar toda la información
para realizar la acción. animación. El hecho de que corra en
el pase del sorteo es útil. Eso le permite definir ciertas cosas
como, aquí, estamos viendo una animación amplia, 10% de la
posición y.

Porque es Garantizado para ser medido, esto puede
ser útil. El único otro lugar es cuando estás
haciendo fragmentos. actas. Puede proporcionar esta animación
de vista de Android. Pero la aplicación acepta el nuevo animador
de Android, así que te recomiendo que Para usar el más nuevo si puedes. Entonces,
eso fue ver animaciones, Básicamente, solo lo uso para animaciones
de viento o si es necesario. confiar en esa parte. De lo
contrario, piensa que es obsoleto. A continuación.
Animador. Está bien. No cambió. Ups. Está
bien. Entonces, Nick tiene Hablamos de ver animación, ahora echemos
un vistazo a la nueva animador que se introdujo en API 11.
Entonces, el nuevo animador Las API son mucho más versátiles
porque te permiten animar más que ver la propiedad. Incluso
puedes animar cualquier valor, no necesariamente asociado con cualquier
propiedad, utilizando el valor API de animador.
Y desde la introducción de animador, hemos creado un montón de animadores
de nivel superior construcciones, como el dibujable
animador, la transición y el animador de elementos predeterminado
en RecyclerView.

La gente siempre me pregunta, entre
animación y animador, cuál ¿API de animación debería usar? Y la
respuesta es, definitivamente la API de animador. Porque es mucho
más capaz. y en esto sección, veremos algunos
animadores. Iremos a Mire los animadores de valores y los
animadores de objetos, que no solo anima el valor, pero puede
evaluar ese valor. Iban para mirar el conjunto del animador.
Y luego, también vamos a tomar una Mire el animador de propiedades
de vista. no es un animador, pero respaldado por un animador
de valor.

Hablaremos un poco un poco más sobre eso en un minuto.
Y luego, también, vamos a Mire el titular de los valores de propiedad,
que puede usar junto con con valor animador. Aquí tenéis una
interesante animación con hombre haciendo malabarismos. Eso
se puede lograr con el animador. dibujable, del que Nick hablará
en la siguiente sección. Pero Ahora miremos más allá de eso y encima
de este hombrecito, hay son textos que se animan dentro y
fuera. Entonces, para lograr Para eso, simplemente podemos crear
un objeto animador a animador. La propiedad alfa de esta vista
es bastante sencilla. Soy suministrando una cadena alfa y eso
es una mala idea porque cuando se pasa una cadena de propiedad
al animador de objetos, tenemos que prefijar esa cadena con
un conjunto y comenzar a usar Reflexión para encontrar el colocador
y el captador en el objetivo.

Clase de objeto y eso es más costoso.
Lo que recomendamos, en su lugar, está utilizando este objeto
de propiedad. Se introduce en API. 14. Junto con muchas otras propiedades.
Lo que ocurre es Cada vez que se actualiza el valor de
la animación, el valor establecido ser llamado y desde allí, el conjunto
alfa será llamado en el vista. Debe ser más eficiente que la
reflexión. Si miramos más de cerca esta animación,
podemos ver que el El texto explota, por lo que
se animan tres propiedades. La escala alfa X y la escala y. Así
es como podemos hacerlo. Nosotros Puede crear tres titulares de valor de
propiedad, uno para cada propiedad. y luego podemos especificar el valor
inicial y el valor final y Una vez que tengamos definidos todos estos titulares
de valor de propiedad, podemos establezca esto en el animador de objetos.
Entonces el animador de objetos puede impulsar el cambio de los valores de las propiedades.
Una advertencia es cuando utiliza
varios titulares de valor de propiedad en un animador de objetos, esencialmente
estás animando todos estos propiedades con el mismo en turpulator,
usando el mismo duración en el mismo objeto.
Muchas veces queremos animar escala X y escala y simultáneamente,
eso es lo que necesidad.

Si desea definir eso
en XML con la propiedad titular de valores, parece bastante
sencillo. Si echas un vistazo a la parte inferior
de esta animación, hay una botón que aparece gradualmente. Para coordinar
estas diferentes animaciones juntos, podemos crear un conjunto
de animadores y luego con el — con el método Play, devolvería
un edificio y nosotros desea reproducir el desvanecimiento después
del desvanecimiento. Entonces… y luego, Si bien el texto encaja, también queremos
ampliarlo, por lo que estamos vamos a reproducir el desvanecimiento
con la animación de escala y luego Quiero reproducir todas las animaciones
de texto antes del botón. se desvanece. Entonces,
eso es bonito. API sencilla y potente
también. Ahora hemos visto cómo podemos
animar diferentes propiedades. desconjunción con objeto
animador. Si resultan ser propiedades de vista, puede llamar a esto
para crear una propiedad de vista animador y luego hay un montón
de métodos para varios propiedades y luego establece un valor
final y, opcionalmente, puede coloque un turpulator y deténgase.
No se vuelve más hermoso y conciso que esto.

Ver propiedad
está respaldada por un animador de valores. No es un animador,
así que realmente no puedes. coordinar con los otros tipos de
animadores. No puedes revertir o repetirlo. Algunas personas, algunas personas
me preguntan, ¿es la vista? ¿El animador de propiedades es tan eficiente
como el animador de objetos? Puedo Le aseguro que en realidad es
un poco más eficiente que animador de objetos. La razón de esto
es ver el animador de propiedades. ha sido optimizado para animar las propiedades
de la vista y garantiza que para todas las propiedades de vista,
hay una pasada de validación se activa. Mientras que si usas el
animador de objetos para animar varias propiedades, cada
cambio de propiedad va a desencadenar su propio conjunto de
pases de validación. Ver el animador de propiedades es más para
disparar y olvidarse del tipo de uso. caso en el que inicias la animación y
simplemente te olvidas de ella.

Ahora, es posible que hayas visto esta
animación antes, en el diapositivas anteriores. ¿Notaste que
hay tres pequeños puntos? animando al final del texto?
Y estos pequeños puntos son No es realmente una propiedad para la vista
de texto. Así que aquí estamos Vamos a crear un animador de valores
para animar el número de puntos. Vamos a escribir un tipo de
número entero.

Hay una repetición contar. Y con el animador de valor,
casi siempre querrás usar un actualizar el oyente porque el
animador de valores va a animar su propio. Entonces, aquí, con valor, con
el detector de actualizaciones, vamos a leer el valor del
animador de valores y Úselo como la cantidad de puntos que queremos
mostrar. Y luego vamos a tener una cadena
expandible del texto. vista. Vamos a establecer un lapso
para… vamos a establecer un gama de colores transparentes, más
bien en los puntos que no debería mostrarse.

Y — que
con cada animación actualización, actualizaremos la
cantidad de puntos que deben ser mostrando y luego correspondientemente,
cambie el rango para ocultar los puntos que queremos
que no se muestren. Entonces, en resumen, ¿cuándo deberíamos
utilizar qué tipo de animador? Objeto animador es una especie de
animador multiusos que, como Siempre que tengas una propiedad que
quieras animar, puedes usar eso.

El animador de valores sirve para
animar un tipo más personalizado. de animación donde desea animar
este valor y luego usar ese valor para aplicarlo a otra
cosa en su interfaz de usuario. Vista El animador de propiedades es el mejor
uso cuando tienes vistas múltiples. propiedades que necesita animar
simultáneamente en el misma vista y porque realmente no
puedes coordinar esta vista animador de propiedades con cualquier
otra cosa, solo sirve para el disparar y olvidar el caso de uso.

Y luego
los valores de las propiedades. titulares, con el titular de valores de
propiedad, puede definir múltiples propiedades y crearlas usando un
animador de objetos. El bueno Lo que pasa con el titular del valor
de la propiedad es que no solo le permite animar múltiples propiedades
simultáneamente debido a que realmente se está configurando
en el animador de objetos, puedes luego coordine eso o busque o revierta,
para que sea más poderoso. Conjunto de animadores, tienes varias
animaciones que deseas coordinar, el conjunto de animadores sería
una buena opción. Muchas gracias. A continuación, tenemos
vectores animados. dibujable. Estos son excelentes para
hacer animaciones gráficas como los maravillosos íconos que ves en
la aplicación Google Fit. Él básicamente conecta entre sí un
vector dibujable a uno o múltiples animadores de objetos y
ejecuta animaciones en ellos. Tiene una especie de API pequeña y enfocada,
básicamente implementa el animador. Puedes obtener un
dibujable como este y llamar comenzar. Es fantástico para aplicaciones
de rendimiento crítico y vectoriales. Información gráfica, especialmente cuando
se reimplementó el dibujable.

En codigo. Incluso si estás haciendo el hilo de
la interfaz de usuario, se mantendrá jugando. Hay más tiempo para que usted
haga su código en lugar de ejecutando el código de animación.
Cuando necesitas animar íconos o gráficos animados, cuando es
necesario este fuego y olvidar. No puedes buscar a través de
él. No puedes controlar el avances para ello. Te insto a que mires
el dibujable de Kirye. Es Bueno para cualquier cosa que sea crítica
para el rendimiento. Ahora, animación física. ¿A quién
no le encanta la física? Es perfecto para un caso de uso altamente
interactivo donde tienes muchos gestos y quieres continuar
con ese impulso de ese gesto en una interfaz de usuario para crear
esta sensación de continuidad. Porque cuando permiten gestos en
vuelo, entonces podrías potencialmente interrumpir la
animación en curso existente.

Soy Seguro que has visto animaciones
donde quieres que aparezcan. desea que la vista se mueva
de un lugar a otro y luego solo hay algunos de los usuarios
y la ubicación final hubiera cambiado. Y en este caso,
si usas espacio físico animación, eso simplemente cambiaría
algo de fuerza física y entonces, como resultado, la corrección
del rumbo sería realmente liso. Así
que aquí tengo un ejemplo de esta pequeña burbuja con la foto
de mi gato. Y está en un ventana de superposición de la aplicación para
que quede encima de otras aplicaciones. Y en este caso,
esa es la hermosa Timely. aplicación. Mi objetivo es arrastrar
esta pequeña burbuja. Cuando yo suéltelo, debe descansar a ambos lados
de la pantalla y, por así decirlo, Para lograr esto, obviamente necesitamos
comenzar con un oyente y usar Oyente de velocidad para rastrear el movimiento
y rastrear las posiciones. y en los eventos posteriores, necesitaremos
calcular cuánto su dedo se ha movido desde ese evento
hacia abajo y actualice el la posición de la burbuja en consecuencia
y luego cuando hay una acción arriba, ahí es donde surge
lo interesante.

Iremos a calcular la velocidad y luego aquí,
para simplificar, para la demostración, solo vamos a decir,
cuando la velocidad es mayor que cero, nos moveremos
hacia el lado derecho de la pantalla. En caso contrario, lado izquierdo.
Ahora que tenemos la final posición donde queremos que descanse
la burbuja, podemos crear una animación de cadena. Esa es una propiedad
personalizada, que haré explique en la siguiente diapositiva.
Antes de comenzar la animación, También queremos establecer la velocidad
inicial y esto es fundamental para asegúrese de que esa transición del
gesto a la animación sea sin costura.

Entonces,
esta es mi propiedad personalizada. y el objetivo de esta propiedad personalizada
es realmente simplemente para asociar el valor de la animación
con la posición de ese burbuja. Cada vez que cambia el valor
de la animación, obtenemos esto: Obtenga esta llamada de valor establecido.
Luego vamos a configurar la animación. valor en el diseño params.X porque se está animando en una descripción
general de la aplicación ventana y hacer que el administrador de ventanas actualice
el diseño de la vista para reflejar ese cambio y de manera similar, en
obtener valor, simplemente vamos a devuelve el parámetros de diseño.X.
Gracias. El siguiente es el API de transiciones. Ahora bien,
las transiciones consisten en mirar dos estados de diseño diferentes
y decir qué ha cambiado entre entre ellos. Realmente, puedes pensar
en las transiciones como una fábrica. Hace un tiempo, hablé
de lo genial que es hacer cosas como esta, dos conjuntos de restricciones
diferentes y el uso gerente de transición.

Creo que ésto
es MotionLayout mejor resuelto. No
lo consideraría bueno para eso. Llamas
a esto y haces cambios. a la jerarquía de vistas y ocurre
la magia. mira a los dos diferentes estados de la interfaz de usuario,
determina qué ha cambiado, crea un animador. Hay una superposición
donde puedes controlar esas transiciones. Lo que me encanta
de las transiciones es lo que lo hace con el código base.

Aquí
hay un cambio donde lo saqué la capa de vista en transiciones. A
veces puede parecer retorcido como esto. Dibujar previamente a los
oyentes y husmear en la vista. jerarquía. Al moverlo a transiciones,
lo movemos a esto. arquitectura declarativa. Está compuesto
con algunos de los transiciones de una manera más componible.
Sin embargo, es posible que tengas que Escribe algunas transiciones tú mismo.
Pero ese código termina siendo mucho más, no lo sé, es más agradable
trabajar con ellos y mucho más Me concentré y lo encontré como
un muy buen cambio en el base de código.
Transiciones, ¿cuáles deberías ¿usalos, usalos a ellos? Para mí, hay un
caso de uso importante que se comparte.

Es prácticamente lo único que puedes
usar para lograr esto. a menos que seas súper personalizado.
En realidad hay dos transiciones. pasando aquí. Ahí está el elemento
compartido entre los 2 AK. actividades y luego hay una transición
de contenido de ventana. Cuando Cuando la ventana se abre o se cierra,
ejecute estas animaciones en el contenido. Cuando llega el espectador,
el resto del contenido anima hacia arriba. Entonces,
¿cuándo deberías usar ¿API de transición? Elemento compartido Elementos, para mí. Además,
si busca modularizar y Redacte su código de animación, las
transiciones pueden ser útiles. Como así como transiciones simples, utilizando
el método de inicio [ __ ]. Diseños de movimiento.
Está bien.

Hasta ahora hemos estado hablando de codificación. Es
súper poderoso. Las API son realmente muy completo. Por otro
lado, 24 es bastante pérdida de tiempo. ¿Qué podemos hacer
para ayudar con eso? queremos hacer Eres más productivo, te permite iterar
más rápido. queremos hacer El diseño de movimiento es mucho más
accesible. Entonces una cosa que que presentamos es el objeto de
ayuda. Y de hecho, ayudantes. El objeto es algo que has estado
usando. Usamos para pautas. Realmente no forma parte de tu
punto de vista, tu jerarquía en el siento que no aparece en la pantalla
pero están aquí para ayudar usted crea esos diseños.

Para aportar
conceptos adicionales a Hazlo más fácil. En 2.0, los expusimos
para que puedas, usted mismo, cree ayudantes simplemente
narrando la clase. Está lejos de hacer código y ponerlo en un ayudante,
apoyamos al usuario, por lo que es fácil de agregar y puedes considerarlo
como una forma de Etiquetar con un comportamiento
específico. En el caso de animación, eso es realmente bueno
porque, ya sabes, obtienes la código. Tienes tu ayudante construido
y nosotros tenemos toda la riqueza. de las API de animación de Android
y puedes hacer cosas así. Bien. Por ejemplo, ya sabes, una
animación bastante conocida. Lo único que realmente necesitaba
hacer aquí es definir esta pieza.

De código y realmente de lo que
estoy hablando, está bien. Qué — Lo único que necesito hacer aquí
es este código que ves en el pantalla, simplemente estoy llamando. No
estoy reinventando la rueda aquí. No se me ocurre una nueva forma.
Pero eso es lo único necesito hacer para mi ayudante y luego
en su archivo de diseño, usted Sólo es necesario declarar ese ayudante
y especificar los ID del widgets a los que desea aplicar.
Básicamente, es un Es mucho más fácil para usted empaquetar
bloques de código utilizable y, ya sabes, úsalos en tu
aplicación.

Entonces, volvamos al tema del código.
Entonces, de otra manera nosotros pensado en hacerte la vida más fácil,
permitiéndote construir ladrillos razonables es pasar a la
forma declarativa para animación. Entonces, puedes considerarlo
como una especificación para movimiento. Y interpretamos esta especificación
con un movimiento motor y además de eso, estamos construyendo
un movimiento gráfico editor. Es algo que presentamos
en Google I/O. Nosotros Todavía estamos trabajando en ello.
Decidimos centrarnos en la biblioteca. lado. Porque quiero asegurarme de
que sea adecuado para usted y para tus necesidades. Pero sólo una rápida
visión general de la situación actual. construir, está avanzando y,
con suerte, llegará pronto, en una versión de Estudio. Entonces,
eso es algo así como el enfoque general que tenemos para
ayudarle. Entonces, el ayudante en por un lado y esta especificación
de movimiento por el otro. Lo que es agradable, si
miro esto, es que tú Podemos especificar esta moción y
luego nos encargaremos de ello.

Tú Realmente no es necesario escribir código
para ello. Entonces, el que implementamos es a través
de MotionLayout. Así que lo que Qué es MotionLayout? Es un grupo de vistas.
Entonces, una advertencia es que significa que solo puedes animar a
los niños de ese grupo de vista y es una subclase. Si conoce
ConstraintLayout, es excelente. Puede utilizar MotionLayout
directamente. Por otro lado, tienes que usar ConstraintLayout.
Pero hace un lote. Entonces, hacemos transiciones,
propiedades, tenemos una verdadera Buen soporte para movimientos táctiles.
Entonces es algo así como pensar en los valores de la animación
y empaquetarlos en un solo lugar.

Entonces,
en términos generales, el único Lo que tienes que entender es que
estamos animando entre dos. estados. Tenemos un estado inicial
y un estado final y interpretar entre esas dos
cosas. Así, además de básicamente admite cambios de
diseño, esencialmente tienes Dos versiones vírgenes del diseño,
admitimos personalización. propiedades si desea animar
colores y fotogramas clave y Puedes pensar en el fotograma clave como
un modificador de eso, ya sabes, transformado entre el principio
y el final. Entonces, para resumir, con
MotionLayouts, te dice que piensa en tu animación, tu transición,
tu movimiento como un declaración. Simplemente especifica
lo que debe hacer y tomamos preocuperase por ello. Específicamente
es genial cuando quieres hacer animación afinada.

Entonces, es
muy específico lo que quieres hacer, se trata de coordinarnos juntos
de una manera muy específica y finalmente, también es muy bueno
para los usuarios táctiles. movimiento. movimiento.
No creo que necesite el micrófono.
Entonces, quiero simplemente, como, mostrarles muchas cosas
y ser un poco más visual de ahora en adelante. Entonces,
esta es la forma en que deseas crear – cuidadosamente Crea animaciones personalizadas, coordinadas,
locas y geniales. Tu puedes hacer cosas como esas.
[Risa] [Aplausos] Entonces,
¿cómo hicimos eso? Es sólo dos… dos cadenas. El
cambio en una cadena y cada La letra es una vista y usamos un escalonamiento
y un cambio de color y un vista de partido personalizada. Es bastante
sencillo de ver. me llevó un ver minutos, se ve genial.
Y eso es lo que esto se trata todo esto. Entonces,
lo primero que puedes hacer es Expulsar cosas con el tacto. Se encargará
de los golpes. Si usted Flick, se transmitirá rápidamente.
Entiende la velocidad y maneja eso. Lo siguiente que hay que entender
es que estamos empezando de dos conjuntos de restricciones pero tenemos
fotogramas clave y en este En este caso, estoy empezando con dos
conjuntos de restricciones y no ¿Tiene algún fotograma clave y
ve cómo se cruza allí mismo? Allí mismo se superponen.

Entonces lo
que haces es agregar alguna clave posición, fotogramas clave
y aceleras en la X: terminar la parte X del movimiento,
a la mitad y eso da Eres un poco suave, ya sabes,
has visto esto. Es su menú de configuración.
[Risa] Entonces, el extremo más extremo de lo que podemos
hacer con los fotogramas clave es ciclos clave y aquí, puedes ver un
montón de diferentes tipos de efectos que podemos hacer. Básicamente,
cualquier cosa que sea oscila, tiembla, rebota,
no quieres realmente ir y construir caminos
complejos con fotogramas clave. Esto lo soluciona. En alfa 2, presentamos
los ciclos de tiempo. Esta es una animación loca que puedes
hacer con ella. Por supuesto, esto es demasiado exagerado y por
favor no lo uses en producto.
[Risa] Pero… entonces, veamos cómo usarlo.
Bien. Entonces, primero que nada,
hay información que creado así que voy a ir rápido.
Por favor mira esos artículos. También hay un
GitHub con ejemplos. Una cosa que quizás te preguntes es, está
bien, esto es genial. Como hacer ¿Usas esto en mi aplicación?
Hay un ejemplo donde usted tener una barra de herramientas plegable
y a este tipo de cosas con el barra de herramientas plegable normal, simplemente
puede usar un MotionLayout en cambio.

Realmente no
cambias nada más en tu código, pero plegable se convierte en
un MotionLayout y toma todos los ventajas de ello. Del mismo
modo, no es necesario utilizar una nueva clase, puedes usar MotionLayout
para ello. La misma cosa para ver la página. Puedes conectar
fácilmente MotionLayout a él. El último ejemplo es interesante.
Es… realmente parece… en realidad, esto es MotionLayout
puro. y que es bueno La cuestión es que en realidad está
demasiado anidado MotionLayouts y Tengo uno plegable para la barra, es
exactamente el mismo que yo. usado antes. Y simplemente está
anidado en MotionLayout. Lo que es realmente bueno es que para
especificar esto en general pantalla, sólo necesito crear
esos dos estados, el inicio y fin. Verás que al final simplemente
hago el MotionLayout.

Eso es para la barra de herramientas más pequeña
y básicamente, nos encargamos de todo ello. Entonces,
para resumir para el presente estado, estamos trabajando en el
editor gráfico. Pero para el biblioteca, hicimos Google I/O
e hicimos una alfa 2. Y tú Sabes, incluso en alfa, está construido en
1.1, por lo que en realidad es bastante estable. Y de hecho, debido a que
es bastante estable, bastantes la gente empezó a construir cosas
con él y pasaremos por Algunos ejemplos sólo para darle una pequeña
muestra de lo que puede hacer.

Con MotionLayout. Entonces,
busqué en Twitter un lote. Revisé MotionLayout en Twitter
todo el tiempo y Pensé en compartir algunas animaciones
interesantes que la gente ha publicado. La mayoría de estos,
en realidad puedes encontrarlos en GitHubs. Estas personas los publican
como vídeos y los muestran. Este tipo ha estado trabajando
bastante con él. Es algo interesante ver lo que
hizo aquí. Y éste es particularmente interesante.
Básicamente, tu tal vez note que en el anterior
hubo un movimiento. Muy lindo. En este ejemplo particular,
lo bueno es que es algo así como un buscapersonas. Añadió
una forma de conducirlo desde código y ese es un futuro
muy interesante, ya sabes, avenida para nosotros. Es un poco: ¿cómo
puede reutilizarse su código? ¿Algo de este comportamiento previamente
definido? Entonces, otro de él, lo interesante
aquí es que es una especie de mezcla de lo que es un RecyclerView
normal y luego una especie de revelar vista detallada. Pero es
interesante MotionLayout. Es muy fácil idear tus propias
formas de hacer esto. tipos de transiciones.
Ya no estás limitado. Este tipo implementó una especificación de animación
de diseño de materiales, pero solo usando MotionLayout y una vista personalizada
que él creó.

Era un bastante buen trabajo. Una
de las cosas que me gustó este es muy original. Verás páginas
de visualización. Bueno. Este en realidad, le está dando un
giro completamente nuevo. [Risas] Pero
puedes ver, es original. Puedes explorar tu propia creatividad
o la de tu equipo. Creaty con lo que les gusta y lo
que hacen. Este es interesante porque
es como un típico cosas de diseño del coordinador.
Ves que es transparente y hay efectos especiales y cosas que
se desvanecen. Produce un vista única, ya sabes, personalizada
de todo el asunto. Y este es nuestro Chris Banes.
[Risa] E hizo una muy interesante y es
una aplicación completa. Todo Los códigos involucrados están ahí fuera.
Es muy personalizado. Entonces vamos Échale un vistazo más de cerca.
Entonces, lo bueno de esto es este es el tipo de movimiento que es
puramente por código.

Hay una mucha coordinación sutil
entre tantos elementos. El el texto se está desvaneciendo, ese cartel en
realidad está girando, pero en realidad coinciden. A eso
nos referimos cuando hablamos. sobre movimiento o movimiento elaborado
y afinado. Este es el tipo de ejemplo que
esperamos animarle a dar. construir.
Como un pequeño adelanto de lo que Tendremos en alfa 3, admitirá
múltiples estados. y le permite interactuar con los múltiples
estados puramente desde tocar. Entonces, este es un solo
MotionLayout, pero de hecho, es Manejo de transiciones entre tres transiciones
desde un espacio en blanco. página para deslizar la parte inferior
para deslizar un poco, para deslizar más.

Es todo una página, un
MotionLayout y puede producir una vista personalizada bastante sofisticada.
Este comportamiento táctil, cero por
tu parte. es todo declarativo. [Aplausos y vítores] Bastante
impresionante. Fresco. Entonces, Hoy, esperamos haberte brindado una visita
guiada desde la API animada. y nuestro objetivo era familiarizarte
con lo que son. buenos y en qué no son tan buenos,
así que voy a intentar Resuma eso como una conclusión.
El complejo diseño coordinado y por ese agradable traspaso
entre gesto y animación, Realmente echa un vistazo
a MotionLayout. Si necesita crear animaciones
interrumpibles o Gesto con el seguimiento de
velocidad, mira la física. sistema de disposición.
Si necesitas hacer transiciones compartidas, transiciones
es para ti. Si necesita hacer vectores, haga vectores
dibujables. Si necesita hacer animaciones
de ventanas, el SDK 1 original Se debe utilizar el sistema de animación de visualización.
Si necesita animar propiedades
de vistas, mire la ver animador de propiedades.

Si
necesitas hacer algo personalizado ver animación o impulsado por una animación
pulso, mira al animador. Animator
es tu opción predeterminada para animación de propósito general. La próxima
vez tendrás que construir. algo, no quedarás paralizado
por la elección del Diferentes API de animación. Así
que muchas gracias por unirte. nosotros y estaremos afuera. Muchas
gracias. [Aplausos] ¿Hola?
Entonces, ahora es el momento de una sesión completamente diferente
que durará unos dos minutos largo. Estamos cerrando el día
aquí. yo estaba personalmente Tengo curiosidad por saber si te gustó o
no. ¿A cuántas personas les gustó el cumbre de desarrolladores?
[Aplausos] ¿A cuántas personas no les gustó la cumbre
de desarrollo y qué estás haciendo? haciendo aquí todavía, al final del
segundo día? [Risas] Entonces
tal vez funcionó. Eso podría Relájate. Creo que a la gente de
mi equipo y de Google les gustó qué pasó. Un aspecto comunitario
escuchando de usted y poder comunicar el contenido.
Ojalá aguantemos esto de nuevo. Ojalá sean un
poco menos de tres años. La próxima vez.

Tenemos que convencer a
las personas que escriben los cheques. ¿Algunas de las cosas favoritas
que viste esta semana? Justo ¿gritar? No
lo hagas incómodo. MotionLayout está bien. ¿Qué otra
cosa? Preferencias. Lindo. Todo bien. Sí, algo nuevo sale
del kit de herramientas. área. LiveData, sí. Muy genial.
Audio de baja latencia. Sí y codificación en vivo de C++ en una charla
relámpago de cinco minutos. Aplicación Paquetes, sí. Nativo de Kotlin.
Está bien. Muy interesante entrando en línea. ¿Qué
otra cosa? escuché paraside charla, que no es así… en la chimenea,
escuché de ese. De hecho, Eso fue muy divertido hoy.

¿Te
gustó la charla? Bien. Impresionante.
Hay de todo disponible, ahora, ya casi en línea. El día uno
ya está publicado en YouTube. Escuché anteriormente que
el día dos se transmitirá como temprano como las 8:00 o 9:00 esta noche.
Vuelve a tus hoteles o domicilios y míralo. Además,
obtendrás un encuesta, tal vez esté en tu bandeja de entrada
ahora mismo. Por favor complete. De hecho, leemos estas cosas y
prestamos mucha atención a él.

Díganos qué funcionó, díganos
qué no funcionó y lo haremos esas cosas para ti porque eres la razón
por la que estamos haciendo este. Vamos
a ver. ¿Algo más? I creo que eso es todo. Estoy
deseando hacer otro uno de estos. Ojalá nos veamos
en 2021. Mientras tanto…
[Risas] En caso de que te hayas perdido todo
lo que pasó, intentamos capturarlo en 90 segundos.
Bienvenidos al Android 2018 Cumbre de desarrolladores. Este es un evento
para desarrolladores, por desarrolladores. Con más de dos mil millones de dispositivos,
tres cuartos de billón Aplicaciones descargadas cada año. La comunidad
de desarrolladores de Android es creciente. creciente. Entonces,
el paquete de aplicaciones de Android lo hace mucho más sencillo. Sin trabajo
de desarrollador adicional necesario, el App Bundle ahora hace que las aplicaciones
sean un promedio de 8% más pequeñas para descargar para dispositivos.
Simplemente no pudimos hacer esto sin ti, así que gracias. [Aplausos y vítores] Como
acaba de decir Dave, gracias.

Gracias por venir..

As found on YouTube

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *