studio - ¿Cómo definir dimens.xml para cada tamaño de pantalla diferente en Android?
dimension android xml (9)
Utilice DP escalable
Aunque hacer un diseño diferente para diferentes tamaños de pantalla es teóricamente una buena idea, puede ser muy difícil adaptarse a
todas las
dimensiones de pantalla y densidades de píxeles.
Tener más de 20 archivos diferentes
dimens.xml
como se sugiere en las respuestas anteriores, no es fácil de administrar.
Cómo utilizar:
Para usar
sdp
:
-
Incluya la
implementation ''com.intuit.sdp:sdp-android:1.0.5''
en subuild.gradle
, -
Reemplace cualquier valor
dp
como50dp
con un@dimen/50_sdp
así:<TextView android:layout_width="@dimen/_50sdp" android:layout_height="@dimen/_50sdp" android:text="Hello World!" />
Cómo funciona:
sdp
escala con el tamaño de la pantalla porque es esencialmente una gran lista de diferentes
dimens.xml
para cada valor de
dp
posible.
Véalo en acción:
Aquí está en tres dispositivos con dimensiones y densidades de pantalla muy diferentes:
Tenga en cuenta que el cálculo de la unidad de tamaño de
sdp
incluye algunas aproximaciones debido a algunas limitaciones de rendimiento y usabilidad.
Cuando se admiten diferentes tamaños de pantalla (densidades) en Android, a menudo el foco está en crear diferentes diseños para cada pantalla posible. ES DECIR
- ldpi
- mdpi
- hdpi
- xhdpi
- xxhdpi
- xxxhdpi
Diseñé un diseño para una pantalla xhdpi como referencia, y definí sus dimensiones en dimens.xml . Ahora quiero dar soporte a todos los tamaños de pantalla posibles. ¿Cómo puedo hacer eso?
Hasta donde sé, puedo usar this herramienta para determinar el dimens.xml adecuado para otros tamaños de pantalla y agregarlo a mi proyecto. ¿Es esta la forma correcta de hacerlo en mi situación?
Otra pregunta,
¿solo necesito crear
dimens.xml
para las dimensiones de pantalla anteriores?
En caso afirmativo, ¿qué es
w820dp
?
Gracias por tu ayuda. Solo necesito soportar teléfonos (no tabletas u otros dispositivos).
Android 3.2 presenta un nuevo enfoque para los tamaños de pantalla, los números que describen el tamaño de la pantalla están todos en unidades "dp".
dp de ancho más pequeño: el ancho más pequeño disponible para el diseño de la aplicación en unidades "dp"; Este es el dp de ancho más pequeño que encontrará en cualquier rotación de la pantalla.
Para crear un clic derecho en res >>> nuevo >>> directorio de recursos de Android
Desde la ventana de calificadores disponibles , mueva el ancho de pantalla más pequeño a los calificadores elegidos
En la ventana Ancho de pantalla, simplemente escriba el valor "dp" a partir del cual desea que Android Studio use esas monedas.
Luego de cambiar a la vista Proyecto , haga clic derecho en su nuevo directorio de recursos creado
nuevo >>> Archivo de recursos de valores ingrese un nuevo nombre de archivo dimens.xml y listo.
Debe crear una carpeta de diferentes valores para diferentes pantallas . Me gusta
values-sw720dp 10.1” tablet 1280x800 mdpi
values-sw600dp 7.0” tablet 1024x600 mdpi
values-sw480dp 5.4” 480x854 mdpi
values-sw480dp 5.1” 480x800 mdpi
values-xxhdpi 5.5" 1080x1920 xxhdpi
values-xxxhdpi 5.5" 1440x2560 xxxhdpi
values-xhdpi 4.7” 1280x720 xhdpi
values-xhdpi 4.65” 720x1280 xhdpi
values-hdpi 4.0” 480x800 hdpi
values-hdpi 3.7” 480x854 hdpi
values-mdpi 3.2” 320x480 mdpi
values-ldpi 3.4” 240x432 ldpi
values-ldpi 3.3” 240x400 ldpi
values-ldpi 2.7” 240x320 ldpi
Para más información puede visitar aquí.
Carpetas de diferentes valores en Android
http://android-developers.blogspot.in/2011/07/new-tools-for-managing-screen-sizes.html
Editado por @humblerookie
Puede utilizar el complemento de Android Studio llamado Dimenify para generar automáticamente valores de dimensión para otros Dimenify de píxeles basados en factores de escala personalizados. Todavía está en beta, asegúrese de notificar cualquier problema / sugerencia que encuentre al desarrollador.
En caso de que quiera ver más: aquí hay un
link
para una lista de dispositivos (tableta, móvil, relojes), incluidos
watch
,
chromebook
,
windows
y
mac
.
Aquí puede encontrar la densidad, las dimensiones, etc. Basándome aquí, es un buen recurso si también usa un emulador.
Si hace clic en un elemento específico, mostrará más detalles en el lado derecho.
Como es
Android
, publicaré algo relacionado.
~ Es mejor si guarda una copia de la web. Para verlo sin conexión.
Hay buenas bibliotecas que manejarán todo y reducirán su dolor. Para usarlo, solo agregue dos dependencias en gradle:
implementation ''com.intuit.ssp:ssp-android:1.0.5''
implementation ''com.intuit.sdp:sdp-android:1.0.5''
Después de eso, use
dimens
como este:
android:layout_marginTop="@dimen/_80sdp"
He subido un programa simple de Java que toma la ubicación de su proyecto y el archivo de dimensión que desea como entrada. Basado en eso, generaría el archivo de dimensión correspondiente en la consola. Aquí está el enlace:
https://github.com/akeshwar/Dimens-for-different-screens-in-Android/blob/master/Main.java
Aquí está el código completo para la referencia:
public class Main {
/**
* You can change your factors here. The current factors are in accordance with the official documentation.
*/
private static final double LDPI_FACTOR = 0.375;
private static final double MDPI_FACTOR = 0.5;
private static final double HDPI_FACTOR = 0.75;
private static final double XHDPI_FACTOR = 1.0;
private static final double XXHDPI_FACTOR = 1.5;
private static final double XXXHDPI_FACTOR = 2.0;
private static double factor;
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(System.in);
System.out.println("Enter the location of the project/module");
String projectPath = in.nextLine();
System.out.println("Which of the following dimension file do you want?/n1. ldpi /n2. mdpi /n3. hdpi /n4. xhdpi /n5. xxhdpi /n6. xxxhdpi");
int dimenType = in.nextInt();
switch (dimenType) {
case 1: factor = LDPI_FACTOR;
break;
case 2: factor = MDPI_FACTOR;
break;
case 3: factor = HDPI_FACTOR;
break;
case 4: factor = XHDPI_FACTOR;
break;
case 5: factor = XXHDPI_FACTOR;
break;
case 6: factor = XXXHDPI_FACTOR;
break;
default:
factor = 1.0;
}
//full path = "/home/akeshwar/android-sat-bothIncluded-notintegrated/code/tpr-5-5-9/princetonReview/src/main/res/values/dimens.xml"
//location of the project or module = "/home/akeshwar/android-sat-bothIncluded-notintegrated/code/tpr-5-5-9/princetonReview/"
/**
* In case there is some I/O exception with the file, you can directly copy-paste the full path to the file here:
*/
String fullPath = projectPath + "/src/main/res/values/dimens.xml";
FileInputStream fstream = new FileInputStream(fullPath);
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String strLine;
while ((strLine = br.readLine()) != null) {
modifyLine(strLine);
}
br.close();
}
private static void modifyLine(String line) {
/**
* Well, this is how I''m detecting if the line has some dimension value or not.
*/
if(line.contains("p</")) {
int endIndex = line.indexOf("p</");
//since indexOf returns the first instance of the occurring string. And, the actual dimension would follow after the first ">" in the screen
int begIndex = line.indexOf(">");
String prefix = line.substring(0, begIndex+1);
String root = line.substring(begIndex+1, endIndex-1);
String suffix = line.substring(endIndex-1,line.length());
/**
* Now, we have the root. We can use it to create different dimensions. Root is simply the dimension number.
*/
double dimens = Double.parseDouble(root);
dimens = dimens*factor*1000;
dimens = (double)((int)dimens);
dimens = dimens/1000;
root = dimens + "";
System.out.println(prefix + " " + root + " " + suffix );
}
System.out.println(line);
}
}
Puedes poner
dimens.xml
en
1) valores
2) valores-hdpi
3) valores-xhdpi
4) valores-xxhdpi
Y proporcione diferentes tamaños en
dimens.xml
dentro de las carpetas correspondientes según las densidades.
Queremos ver los cambios del tamaño de vista requerido en diferentes pantallas.
Necesitamos crear carpetas de valores diferentes para diferentes pantallas y colocar el archivo dimens.xml en función de las densidades de pantalla.
Tomé un TextView y observé los cambios cuando cambié dimens.xml en diferentes carpetas de valores.
Por favor sigue el proceso
normal - xhdpi / dimens.xml
Los siguientes dispositivos pueden cambiar el tamaño de las pantallas cuando cambiamos lo normal: xhdpi / dimens.xml
Nexus 5X (5.2 "* 1080 * 1920: 420 ppp)
nexus 6P (5.7 "* 1440 * 2560: 560 ppp)
nexus 6 (6.0 "* 1440 * 2560: 560 ppp)
nexus 5 (5.0 ", 1080 1920: xxhdpi)
Nexus 4 (4.7 ", 768 * 1280: xhdpi)
Galaxy nexus (4.7 ", 720 * 1280: xhdpi)
4.65 "720p (720 * 1280: xhdpi)
4.7 "WXGA (1280 * 720: Xhdpi)
Xlarge - xhdpi / dimens.xml
Los siguientes dispositivos pueden cambiar el tamaño de las pantallas cuando cambiamos Xlarge - xhdpi / dimens.xml
nexus 9 (8.9 ", 2048 * 1556: xhdpi)
nexus 10 (10.1 ", 2560 * 1600: xhdpi)
grande - xhdpi / dimens.xml
Los siguientes dispositivos pueden cambiar el tamaño de las pantallas cuando cambiamos el tamaño grande: xhdpi / dimens.xml
nexus 7 (7.0 ", 1200 * 1920: xhdpi)
nexus 7 (2012) (7.0 ", 800 * 1280: tvdpi)
Las pantallas a continuación son visibles en "Buscar teléfonos y tabletas genéricos"
grande - mdpi / dimens.xml
Los siguientes dispositivos pueden cambiar el tamaño de las pantallas cuando cambiamos el tamaño grande: mdpi / dimens.xml
5.1 "WVGA (480 * 800: mdpi)
5.4 "FWVGA (480 * 854: mdpi)
7.0 "WSVGA (tableta) (1024 * 600: mdpi)
normal - hdpi / dimens.xml
Los siguientes dispositivos pueden cambiar el tamaño de las pantallas cuando cambiamos lo normal - hdpi / dimens.xml
nexus s (4.0 ", 480 * 800: hdpi)
nexus one (3.7 ", 480 * 800: hdpi)
pequeño - ldpi / dimens.xml
Los siguientes dispositivos pueden cambiar el tamaño de las pantallas cuando cambiamos las pequeñas: ldpi / dimens.xml
Control deslizante QVGA de 2.7 "(240 * 320: ldpi)
2.7 "QVGA (240 * 320: ldpi)
xlarge - mdpi / dimens.xml
Los siguientes dispositivos pueden cambiar el tamaño de las pantallas cuando cambiamos xlarge - mdpi / dimens.xml
10.1 "WXGA (TABLETA) (1280 * 800: MDPI)
normal - ldpi / dimens.xml
Los siguientes dispositivos pueden cambiar el tamaño de las pantallas cuando cambiamos lo normal: ldpi / dimens.xml
3.3 "WQVGA (240 * 400: LDPI)
3.4 "WQVGA (240 * 432: LDPI)
normal - hdpi / dimens.xml
Los siguientes dispositivos pueden cambiar el tamaño de las pantallas cuando cambiamos lo normal - hdpi / dimens.xml
4.0 "WVGA (480 * 800: hdpi)
3.7 "WVGA (480 * 800: hdpi)
Control deslizante FWVGA de 3.7 "(480 * 854: hdpi)
normal - mdpi / dimens.xml
Los siguientes dispositivos pueden cambiar el tamaño de las pantallas cuando cambiamos lo normal: mdpi / dimens.xml
Control deslizante HVGA de 3.2 "(ADP1) (320 * 480: MDPI)
3.2 "QVGA (ADP2) (320 * 480: MDPI)
dimens.xml
crear una carpeta de
values
diferentes para diferentes pantallas y colocar el archivo
dimens.xml
según las densidades.
1) values
2) values-hdpi (320x480 ,480x800)
3) values-large-hdpi (600x1024)
4) values-xlarge (720x1280 ,768x1280 ,800x1280 ,Nexus7 ,Nexus10)
5) values-sw480dp (5.1'' WVGA screen)
6) values-xhdpi (Nexus4 , Galaxy Nexus)