La guía más completa para la adaptación de la pantalla plegable de Android está aquí

Con el lanzamiento de Samsung Galaxy Fold y Huawei Mate X, los teléfonos con pantalla plegable han comenzado a llamar la atención de todos. Si bien cambia la experiencia del teléfono móvil, también presenta más desafíos para nuestros desarrolladores en la adaptación. Este artículo te presenta algunos conceptos relacionados con las pantallas plegables en el desarrollo de Android y cómo adaptarlas a las pantallas plegables.

Adaptación de la pantalla plegable

La razón por la que es necesario adaptar la mampara es porque el tamaño de la pantalla en la que se está ejecutando nuestra aplicación puede cambiar, situación que ocasionará algunos problemas en los proyectos existentes.

Por lo tanto, la esencia de la adaptación de la pantalla plegable es: cuando la aplicación se está ejecutando, el tamaño, la densidad o la relación de la pantalla cambia, y la aplicación puede continuar mostrándose y ejecutándose normalmente en la pantalla modificada.

De hecho, esta situación no se da después de la aparición de la mampara plegable, lo mismo ocurre en el cambio vertical y horizontal de aplicaciones, pero muchas aplicaciones se ven obligadas a ser verticales y no necesitan lidiar con esta adaptación.

Permitir cambiar el tamaño de la aplicación

Para adaptarnos al biombo, lo primero es dejar que la aplicación soporte el cambio dinámico de tamaño, necesitamos declarar bajo la Aplicación o la Actividad correspondiente en el menú:

android:resizeableActivity="true"

 

Por el contrario, si no planea adaptarse por el momento, simplemente establezca este parámetro en falso.

Cabe señalar que este parámetro predeterminado es verdadero en Android 7.0 o superior, y lo siguiente predeterminado es falso.

A continuación se presentan dos conceptos relacionados con este parámetro.

Modo de pantalla dividida

La razón por la que resizeableActivity se cambia a verdadero de forma predeterminada desde Android 7.0 es porque se ha agregado una nueva función en 7.0, llamada modo de pantalla dividida.

Si resizeableActivity se establece en false, significa que la aplicación no admite el modo de pantalla dividida y determina si la aplicación tiene una configuración de pantalla dividida.

Modo de compatibilidad

Cuando resizeableActivity se establece en false, la pantalla desplegable y plegable puede convertirse en un efecto de este tipo:

Este efecto es similar al uso de una aplicación de iPhone incompatible en el iPad. Este modo lleno de negro alrededor se llama modo de compatibilidad.

La visualización del modo de compatibilidad está relacionada con la relación máxima admitida maxAspectRatio. Cuando la relación de pantalla excede maxAspectRatio, se rellenará con bordes negros. La recomendación oficial es establecer maxAspectRatio en 2.4 (12: 5). El método para modificar maxAspectRatio es el siguiente:

  • Android 8.0 o superior

Configure android: maxAspectRatio en la etiqueta <activity>:

 

<activity android:name=".MainActivity"
          android:maxAspectRatio="2.4" />
  • Android 8.0 o inferior

Agregue un metadato llamado android.max_aspect en la etiqueta <application>:

 

<meta-data android:name="android.max_aspect" android:value="2.4" />

Si resizeableActivity se establece en true, no es necesario establecer maxAspectRatio y no tendrá efecto si se establece.

Cambio de tamaño del monitor

De forma predeterminada, cuando la pantalla cambia, el sistema destruirá y volverá a crear toda la Actividad. Pero esperamos que después de que cambie la pantalla, el programa pueda continuar ejecutándose en el estado anterior al cambio, sin reiniciar la página.

Podemos agregar configuración a la Actividad:

 

android:configChanges="screenSize|smallestScreenSize|screenLayout"

Después de esta configuración, cuando la pantalla cambie, la actividad no se reiniciará y se llamará al método onConfigurationChanged. Podemos obtener la información de la pantalla actual en este método:

 

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    Log.i("config", "newConfig.screenHeightDp:" + newConfig.screenHeightDp
            + ", newConfig.screenWidthDp" + newConfig.screenWidthDp);
}

Después de este cambio, debe prestar atención a las pruebas para ver si el diseño de la página está desordenado. Si el diseño no es razonable, debe modificar el diseño para adaptarlo a diferentes resoluciones.

También podemos actualizar el diseño de acuerdo con la información de la pantalla, como cambiar LinearLayout a GridLayout en la pantalla grande para aprovechar al máximo el espacio de visualización de la pantalla grande. Este es un enfoque de optimización adicional:

Android Q

En el próximo Android Q, se han agregado algunas funciones que admiten pantallas plegables.

Multi-currículum

Para el modo de pantalla dividida, la pantalla dividida anterior solo admitía la visualización simultánea de dos aplicaciones, mientras que la pantalla grande ha traído más posibilidades, ahora ha permitido visualizar más de dos aplicaciones al mismo tiempo.

En versiones anteriores de Android Q, en las aplicaciones que se ejecutaban en modo de pantalla dividida, solo la actividad que tenía el foco estaba en el estado onResume, y otras actividades visibles estaban en el estado onPause.

En Android Q, todas las actividades visibles de nivel superior están en el estado onResume para garantizar que las actividades visibles en el modo de pantalla dividida puedan ejecutarse normalmente. Pero todavía hay una sola actividad que puede obtener el foco. A esta actividad la llamamos TopResumedActivity.

Se agregó un método de devolución de llamada de ciclo de vida onTopResumedActivityChanged () a la Actividad de Android Q. Se llamará cuando la Actividad se enfoque o pierda el foco. Se puede usar para determinar si la Actividad actual tiene el foco:

 

protected void onTopResumedActivityChanged(boolean topResumed) {
    if (topResumed) {
        // 获取到焦点
    } else {
        // 失去焦点
    }
}

Este método se utiliza cuando utilizamos recursos exclusivos. ¿Qué es un recurso exclusivo? Los micrófonos y las cámaras son, estos recursos solo pueden ser utilizados por una actividad a la vez.

Por ejemplo, varias actividades en modo de pantalla dividida usan la cámara, pero solo la actividad que tiene el foco tiene derechos de acceso. En este caso, onTopResumedActivityChanged () se usa para determinar si la actividad actual tiene el foco. No es necesario soltar la cámara cuando se pierde el enfoque, pero debe lidiar con la situación de que la cámara se desconecta y se vuelve a conectar.

minAspectRatio

Antes de Android Q, solo se puede configurar la proporción máxima de soporte maxAspectRatio. Ahora Android Q puede configurar la proporción mínima de soporte minAspectRatio. El
uso es el mismo que maxAspectRatio:

 

<activity android:name=".MainActivity"
          android:maxAspectRatio="2.4"
          android:minAspectRatio="1"/>

La proporción de soporte máxima y mínima solo es útil cuando resizeableActivity se establece en false.

depuración

Por supuesto, la mejor herramienta de depuración es utilizar la máquina real, pero actualmente solo un pequeño número de personas tiene esta condición.Los siguientes son dos esquemas de depuración distintos de la máquina real.

Estudio de Android

En Android Studio 3.5, se agregó una máquina virtual para dispositivos de pantalla plegable. Podemos crear una para depurar:

Al hacer clic en el botón del simulador, podemos cambiar el estado contraído y expandido de la máquina virtual:

Línea de comando

Podemos modificar dinámicamente la resolución del teléfono móvil a través de la línea de comando para lograr el efecto de simular el cambio de pantalla plegable. Tomando la resolución de Mate X como ejemplo, primero usamos la línea de comando:

 

adb shell wm size 1148x2480

La resolución del teléfono se simulará como 1148x2480, que es la resolución del Mate X cuando está plegado, luego ingrese:

 

adb shell wm size 2200x2480

La resolución del teléfono móvil se modifica a la resolución ampliada de Mate X 2200x2480, que simula el cambio de expansión de la pantalla plegable.

Puede modificar la resolución a 1148x2480 nuevamente para simular el cambio de plegado de la pantalla. Finalmente, después de jugar, use la siguiente línea de comando para restaurar la resolución del propio teléfono:

 

adb shell wm size reset

para resumir

En general, si desea adaptarse a la pantalla plegable, el primer paso es establecer resizeableActivity en true, luego configurar configChanges para la Activity y probarlo. Finalmente, puede ir un paso más cerca y diseñar otro conjunto de IU para la pantalla grande, y cambiar la IU cuando se cambia la pantalla plegable.

 

 

Supongo que te gusta

Origin blog.csdn.net/weixin_40611659/article/details/108747360
Recomendado
Clasificación