Cómo admitir diferentes tamaños de pantalla en Android
Estoy desarrollando una aplicación en Android y tengo que admitir todos los diferentes tamaños y densidades de pantalla. Así que he creado una carpeta diferente para el diseño: layout-small layout-large
ylayout
.
Luego creé una carpeta diferente para la imagen: ldpi, mdpi
y hdpi
. En todas las carpetas dibujables, la imagen debe tener un tamaño diferente, ¿verdad? Pregunto esto porque tengo un teléfono con tamaño de pantalla grande y densidad media, la imagen mostrada será más pequeña y no tomarán el tamaño correcto.
Para diferentes tamaños de pantalla, la siguiente es una lista de directorios de recursos en una aplicación que proporciona diferentes diseños de diseño para diferentes tamaños de pantalla y diferentes elementos de diseño de mapas de bits para pantallas de densidad pequeña, mediana, alta y extra alta.
res/layout/my_layout.xml // layout for normal screen size ("default")
res/layout-small/my_layout.xml // layout for small screen size
res/layout-large/my_layout.xml // layout for large screen size
res/layout-xlarge/my_layout.xml // layout for extra large screen size
res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation
res/drawable-mdpi/my_icon.png // bitmap for medium density
res/drawable-hdpi/my_icon.png // bitmap for high density
res/drawable-xhdpi/my_icon.png // bitmap for extra high density
El siguiente código en el Manifiesto admite todos los ppp.
<supports-screens android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"
android:anyDensity="true" />
Y también mira mi respuesta SO .
A partir de Android 3.2 (API nivel 13), los grupos de tamaños (carpetas pequeñas, normales, grandes, extragrandes) están en desuso en favor de una nueva técnica para administrar los tamaños de pantalla según el ancho de pantalla disponible.
Hay diferentes configuraciones de recursos que puede especificar según el espacio disponible para su diseño:
1) Ancho más pequeño : el tamaño fundamental de una pantalla, como lo indica la dimensión más corta del área de pantalla disponible.
Valor calificador: sw'dp value'dp
Ej. res/sw600dp/layout.xml -> se utilizará para todos los tamaños de pantalla mayores o iguales a 600dp. Esto no tiene en cuenta la orientación del dispositivo.
2) Ancho de pantalla disponible : especifica un ancho mínimo disponible en unidades dp en el que se deben utilizar los recursos.
Valor calificador: w'dp value'dp
Ej. res/w600dp/layout.xml -> se utilizará para todas las pantallas cuyo ancho sea mayor o igual a 600 dp.
3) Altura de pantalla disponible : especifica una altura mínima de pantalla en unidades dp en la que se deben utilizar los recursos.
Valor calificador: h'dp value'dp
Ej. res/h600dp/layout.xml -> se utilizará para todas las pantallas cuya altura sea mayor o igual a 600 dp.
Entonces, al final, la estructura de su carpeta podría verse así:
res/layout/layout.xml -> para teléfonos (menos de 600 dp de ancho disponible)
res/layout-sw600dp/layout.xml -> para tabletas de 7” (600 dp de ancho y más grandes) )
res/layout-sw720dp/layout.xml -> para tabletas de 10” (720dp de ancho y más grandes)
Para obtener más información, lea la documentación oficial:
https://developer.android.com/guide/practices/screens_support.html#DeclaringTabletLayouts
Puede utilizar la unidad de tamaño sdp en lugar de la unidad de tamaño dp. La unidad de tamaño sdp es relativa al tamaño de la pantalla y, por lo tanto, a menudo se prefiere para apuntar a múltiples tamaños de pantalla.
¡Úselo con cuidado! por ejemplo, en la mayoría de los casos aún es necesario diseñar un diseño diferente para tabletas.
Suena elevado cuando se trata de admitir múltiples tamaños de pantalla. Lo siguiente proporciona mejores resultados.
res/layout/layout-w120dp
res/layout/layout-w160dp
res/layout/layout-w240dp
res/layout/layout-w160dp
res/layout/layout-w320dp
res/layout/layout-w480dp
res/layout/layout-w600dp
res/layout/layout-w720dp
Verifique el ancho y alto del dispositivo usando métricas de visualización
Coloque/averigüe qué diseño se adapta al ancho resultante del dispositivo.
let smallestScreenWidthDp="assume some value(Which will be derived from Display metrics)"
Todo debe comprobarse antes de setContentView(). De lo contrario, te meterás en problemas.
Configuration config = getResources().getConfiguration();
if (config.smallestScreenWidthDp >= 600) {
setContentView(R.layout.layout-w600dp);
} else {
setContentView(R.layout.main_activity);
}
En la parte superior, he creado tantos diseños para adaptarse a varias pantallas, todo depende de usted, puede que lo pueda o no. Puede ver las reseñas de Play Store desde qué API, las descargas son altas... en la que debe continuar. .
Espero que te ayude mucho. Pocos usaban bibliotecas de terceros. Puede reducir tu trabajo, pero esa no es la mejor práctica. Acostúmbrese a las mejores prácticas de Android.
Mira esto