Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


<Compatible-pantallas> en Android

Buen día, estoy tratando de restringir los tamaños de pantalla a sólo teléfonos (es decir, no las tabletas) en google play. Después de que encontré este artículo lo agregué a mi archivo de manifiesto:

<compatible-screens> <!-- all small size screens --> <screen android:screenSize="small" android:screenDensity="ldpi" /> <screen android:screenSize="small" android:screenDensity="mdpi" /> <screen android:screenSize="small" android:screenDensity="hdpi" /> <screen android:screenSize="small" android:screenDensity="xhdpi" /> <!-- all normal size screens --> <screen android:screenSize="normal" android:screenDensity="ldpi" /> <screen android:screenSize="normal" android:screenDensity="mdpi" /> <screen android:screenSize="normal" android:screenDensity="hdpi" /> <screen android:screenSize="normal" android:screenDensity="xhdpi" /> </compatible-screens> 

Pero parece que ahora los usuarios con teléfonos de 5,5 ++ pulgadas no pueden instalar mi aplicación. A continuación, también encontré este artículo y la imagen en él:

Introduzca aquí la descripción de la imagen

Mi primera pregunta – ¿es posible restringir el tamaño de la pantalla por el valor específico de la pulgada, o puedo utilizar solamente las etiquetas como pequeño, normal, grande y xlarge?

En algún momento decidí aumentar el tamaño de la pulgada de la ayuda a 7 actualizando el manifiesto como esto:

 <compatible-screens> <!-- all small size screens --> <screen android:screenSize="small" android:screenDensity="ldpi" /> <screen android:screenSize="small" android:screenDensity="mdpi" /> <screen android:screenSize="small" android:screenDensity="hdpi" /> <screen android:screenSize="small" android:screenDensity="xhdpi" /> <!-- all normal size screens --> <screen android:screenSize="normal" android:screenDensity="ldpi" /> <screen android:screenSize="normal" android:screenDensity="mdpi" /> <screen android:screenSize="normal" android:screenDensity="hdpi" /> <screen android:screenSize="normal" android:screenDensity="xhdpi" /> <!-- all large size screens --> <screen android:screenSize="large" android:screenDensity="ldpi" /> <screen android:screenSize="large" android:screenDensity="mdpi" /> <screen android:screenSize="large" android:screenDensity="hdpi" /> <screen android:screenSize="large" android:screenDensity="xhdpi" /> </compatible-screens> 

Pero los usuarios con teléfonos de 5,5 pulgadas e incluso con 5,2 pulgadas todavía no pueden instalar la aplicación.

Así que mi segunda pregunta – ¿qué estoy haciendo mal o no entiendo?

Honestamente leí todas las preguntas similares sobre stackoverflow y artículos en la documentación android y no encontré la respuesta adecuada. Gracias.

2 Solutions collect form web for “<Compatible-pantallas> en Android”

Parece que intenta restringir el tamaño de la pantalla a los teléfonos, y no a los tablets. Es difícil discernir de su pregunta, pero de cualquier manera creo que puedo aclarar la confusión.

Cuando declares <compatible-screens> en tu manifiesto, debes declarar todas las configuraciones de pantalla con las que deseas que tu aplicación sea compatible:

Usted debe declarar cada uno de estos; Cualquier combinación de tamaño y densidad que no especifique se considera una configuración de pantalla con la que su aplicación no es compatible.

Sospecho que los teléfonos de 5,5+ pulgadas que usted menciona tienen una densidad mayor que xhdpi ; Como xxhdpi o xxxhdpi . Estas densidades se omitieron en la documentación (ya sea porque la documentación está obsoleta o incompleta de otro modo) pero siguen siendo pertinentes; Están documentados en la página <compatible-screens> .

Por lo tanto, si desea que su aplicación sea compatible con dispositivos de mayor densidad, debe incluir esas densidades en el elemento <compatible-screens> . Pero un método más fácil sería usar el elemento <supports-screens> lugar. Según la documentación, el elemento <supports-screens> no tiene en cuenta la densidad:

Nota: Aunque también puede utilizar el elemento <compatible-screens> para el escenario inverso (cuando su aplicación no es compatible con pantallas más pequeñas), es más fácil si utiliza las <supports-screens> como se explica en la siguiente sección, ya que No requiere que especifique cada densidad de pantalla que admite su aplicación.

Con esto sólo puede especificar lo siguiente en su manifiesto:

 <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="false" android:xlargeScreens="false" android:largestWidthLimitDp="840"/> 

El atributo largestWidthLimitDp no debería ser necesario, pero 840dp parece un buen límite para los teléfonos basados ​​en la documentación de diseño de materiales para los puntos de interrupción de densidad .

De lo contrario, todavía puede usar la etiqueta <compatible-screens> si desea un control más preciso sobre los dispositivos compatibles con su aplicación:

 <compatible-screens> <!-- all small size screens --> <screen android:screenSize="small" android:screenDensity="ldpi" /> <screen android:screenSize="small" android:screenDensity="mdpi" /> <screen android:screenSize="small" android:screenDensity="hdpi" /> <screen android:screenSize="small" android:screenDensity="xhdpi" /> <screen android:screenSize="small" android:screenDensity="xxhdpi" /> <screen android:screenSize="small" android:screenDensity="xxxhdpi" /> <!-- all normal size screens --> <screen android:screenSize="normal" android:screenDensity="ldpi" /> <screen android:screenSize="normal" android:screenDensity="mdpi" /> <screen android:screenSize="normal" android:screenDensity="hdpi" /> <screen android:screenSize="normal" android:screenDensity="xhdpi" /> <screen android:screenSize="normal" android:screenDensity="xxhdpi" /> <screen android:screenSize="normal" android:screenDensity="xxxhdpi" /> </compatible-screens> 

EDIT (2017-12-21)

Después de que Bryan sugiera usar la herramienta de compilación 25.0.1, no tengo más error de compilación con su solución:

 <compatible-screens> <!-- all small size screens --> <screen android:screenSize="small" android:screenDensity="ldpi" /> <screen android:screenSize="small" android:screenDensity="mdpi" /> <screen android:screenSize="small" android:screenDensity="hdpi" /> <screen android:screenSize="small" android:screenDensity="xhdpi" /> <screen android:screenSize="small" android:screenDensity="xxhdpi" /> <screen android:screenSize="small" android:screenDensity="xxxhdpi" /> <!-- all normal size screens --> <screen android:screenSize="normal" android:screenDensity="ldpi" /> <screen android:screenSize="normal" android:screenDensity="mdpi" /> <screen android:screenSize="normal" android:screenDensity="hdpi" /> <screen android:screenSize="normal" android:screenDensity="xhdpi" /> <screen android:screenSize="normal" android:screenDensity="xxhdpi" /> <screen android:screenSize="normal" android:screenDensity="xxxhdpi" /> 

PERO … con la nueva versión, algunos dispositivos no aparecen en la lista de dispositivos compatibles (consola de Google Play): Google Pixel, Nexus 5x, Google Pixel XL, Nexus 6 y Nexus 6P.

Por eso mi nueva solución se ve así:

 <!-- just handsets allowed--> <compatible-screens> <!-- all small size screens --> <screen android:screenSize="small" android:screenDensity="ldpi" /> <!-- 120 --> <screen android:screenSize="small" android:screenDensity="mdpi" /> <!-- 160 --> <screen android:screenSize="small" android:screenDensity="hdpi" /> <!-- 240 --> <screen android:screenSize="small" android:screenDensity="280" /> <!-- Workaround --> <screen android:screenSize="small" android:screenDensity="xhdpi" /> <!-- 320 --> <screen android:screenSize="small" android:screenDensity="360" /> <!-- Workaround --> <screen android:screenSize="small" android:screenDensity="420" /> <!-- Workaround Google Pixel, Nexus 5x --> <screen android:screenSize="small" android:screenDensity="xxhdpi" /> <!-- 480 --> <screen android:screenSize="small" android:screenDensity="560" /> <!-- Workaround Google Pixel XL, Nexus 6, Nexus 6P --> <screen android:screenSize="small" android:screenDensity="xxxhdpi" /> <!-- 640 --> <!-- all normal size screens --> <screen android:screenSize="normal" android:screenDensity="ldpi" /> <!-- 120 --> <screen android:screenSize="normal" android:screenDensity="mdpi" /> <!-- 160 --> <screen android:screenSize="normal" android:screenDensity="hdpi" /> <!-- 240 --> <screen android:screenSize="normal" android:screenDensity="280" /> <!-- Workaround --> <screen android:screenSize="normal" android:screenDensity="xhdpi" /> <!-- 320 --> <screen android:screenSize="normal" android:screenDensity="360" /> <!-- Workaround --> <screen android:screenSize="normal" android:screenDensity="420" /> <!-- Workaround Google Pixel, Nexus 5x --> <screen android:screenSize="normal" android:screenDensity="xxhdpi" /> <!-- 480 --> <screen android:screenSize="normal" android:screenDensity="560" /> <!-- Workaround Google Pixel XL, Nexus 6, Nexus 6P --> <screen android:screenSize="normal" android:screenDensity="xxxhdpi" /> <!-- 640 --> </compatible-screens> 

ANTIGUO:

Según la respuesta de Bryan, mi fragmento de manifiesto se parece a esto:

  <!-- just handsets allowed--> <compatible-screens> <!-- all small size screens --> <screen android:screenSize="small" android:screenDensity="ldpi" /> <!-- approximately 120 dpi --> <screen android:screenSize="small" android:screenDensity="mdpi" /> <!-- approximately 160 dpi --> <screen android:screenSize="small" android:screenDensity="hdpi" /> <!-- approximately 240 dpi --> <screen android:screenSize="small" android:screenDensity="280" /> <!-- Workaround --> <screen android:screenSize="small" android:screenDensity="xhdpi"/> <!-- approximately 320 dpi --> <screen android:screenSize="small" android:screenDensity="360" /> <!-- Workaround --> <screen android:screenSize="small" android:screenDensity="420" /> <!-- Workaround --> <screen android:screenSize="small" android:screenDensity="480" /> <!-- Workaround --> <screen android:screenSize="small" android:screenDensity="560" /> <!-- Workaround --> <screen android:screenSize="small" android:screenDensity="640" /> <!-- Workaround --> <!-- all normal size screens --> <screen android:screenSize="normal" android:screenDensity="ldpi" /> <!-- approximately 120 dpi --> <screen android:screenSize="normal" android:screenDensity="mdpi" /> <!-- approximately 160 dpi --> <screen android:screenSize="normal" android:screenDensity="hdpi" /> <!-- approximately 240 dpi --> <screen android:screenSize="normal" android:screenDensity="280" /> <!-- Workaround --> <screen android:screenSize="normal" android:screenDensity="xhdpi"/> <!-- approximately 320 dpi --> <screen android:screenSize="normal" android:screenDensity="360" /> <!-- Workaround --> <screen android:screenSize="normal" android:screenDensity="420" /> <!-- Workaround --> <screen android:screenSize="normal" android:screenDensity="480" /> <!-- Workaround --> <screen android:screenSize="normal" android:screenDensity="560" /> <!-- Workaround --> <screen android:screenSize="normal" android:screenDensity="640" /> <!-- Workaround --> </compatible-screens> 

No se puede usar la solución de Bryan porque tengo un error de compilación: "AAPT: No se permiten tipos de cadenas (en 'screenDensity' con valor 'xxxhdpi')"

Funciona para dispositivos más nuevos como Pixel de Google (2,6 * 160 dp = 420 dp -> explicación 🙂 / Pixel XL (3,5 * 160 dp = 560 dp) o Samsung Galaxy S6 (4,0 * 160 dp = 640 dp ). Los valores de dp se describen aquí: https://material.io/devices/

Creo que esto funciona porque los dispositivos que mencioné anteriormente aparecen en la lista de "dispositivos compatibles" en la consola de Google Play.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.