Lo sé, ya se discutió 1000 veces, pero no puedo ajustar el tamaño del texto para diferentes tamaños de pantalla. Intento usar 'sp' como unidades de tamaño en mi estilo personalizado:
<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
...
<item name="android:textSize">30sp</item>
...
</style>
En 2.7 QVGA se ve bien:
Pero en WSVGA de 7 pulgadas se ve así:
Intenté usar tanto 'sp' como 'dp' con el mismo resultado.
¿Podría explicar cómo hacer que estos botones se vean iguales en cualquier pantalla?
El estilo de botón personalizado completo
<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
<item name="android:background">@drawable/custom_button</item>
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_margin">3dp</item>
<item name="android:textColor">#ffffff</item>
<item name="android:gravity">center</item>
<item name="android:textSize">30sp</item>
<item name="android:textStyle">bold</item>
<item name="android:shadowColor">#000000</item>
<item name="android:shadowDx">1</item>
<item name="android:shadowDy">1</item>
<item name="android:shadowRadius">2</item>
</style>
Y en el tema de mi aplicación tengo
<item name="android:buttonStyle">@style/CustumButtonStyle</item>
Y ahí está mi diseño:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:background="@drawable/grid"
android:gravity="center"
android:orientation="vertical" android:layout_height="fill_parent">
<Button
android:id="@+id/buttonContinue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/continue_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>
<Button
android:id="@+id/buttonNewGame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/buttonContinue"
android:layout_alignRight="@+id/buttonContinue"
android:layout_below="@+id/buttonContinue"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/new_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>
<Button
android:id="@+id/ButtonAbout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/buttonNewGame"
android:layout_alignRight="@+id/buttonNewGame"
android:layout_below="@+id/buttonNewGame"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/about" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>
android
screen-size
text-size
forzar
fuente
fuente
Respuestas:
@forcelain Creo que debe consultar este PDF de Google IO para el diseño . En ese pdf, vaya a la página No: 77 en la que encontrará sugerencias para usar dimens.xml para diferentes dispositivos de Android. Por ejemplo, consulte la estructura a continuación:
por ejemplo, ha utilizado a continuación dimens.xml en valores.
En la carpeta de otros valores, debe cambiar los valores para el tamaño de su texto.
Nota: Como lo indica @espinchi, los valores pequeño, normal, grande y xlarge han quedado obsoletos desde Android 3.2 a favor de lo siguiente:
Declaración de diseños de tableta para Android 3.2
fuente
Creo que es demasiado tarde para responder a este hilo. Pero me gustaría compartir mi idea o forma de resolver el problema del tamaño del texto en los dispositivos de resolución de diferencia. Muchos sitios de desarrolladores de Android sugieren que tenemos que usar la unidad sp para el tamaño del texto que manejará el tamaño del texto para dispositivos de resolución diferente. Pero siempre soy incapaz de obtener el resultado deseado. Así que encontré una solución que estoy usando de mis últimos 4-5 proyectos y funciona bien. Según mi sugerencia, debe colocar el tamaño del texto para cada dispositivo de resolución, lo que es un trabajo un poco tedioso, pero cumplirá con sus requisitos. Cada desarrollador debe escuchar sobre la proporción de 4: 6: 8: 12 (h: xh: xxh: xxxh respectivamente) . Ahora, dentro de la carpeta res de su proyecto , debe crear 4 carpetas con el archivo dimens, por ejemplo
Ahora, dentro del archivo dimens.xml, debe colocar los tamaños de texto. Le estoy mostrando el código para values-hdpi , de manera similar, debe colocar el código para otros valores de resolución / archivo dimens.xml.
Para otras resoluciones es como xhdpi : 6px, xxhdpi : 8px, xxxhdpi : 12px. Esto se calcula con la proporción (3: 4: 6: 8: 12) que he escrito arriba. Analicemos otro ejemplo de tamaño de texto con la proporción anterior. Si desea tomar un tamaño de texto de 12px en hdpi, entonces en otra resolución sería
Esta es la solución simple para implementar el tamaño de texto requerido para todas las resoluciones. No estoy considerando dispositivos de resolución de valores-mdpi aquí. Si alguien quiere incluir el tamaño del texto para esta resolución, la ración es como 3: 4: 6: 8: 12 . En cualquier consulta por favor hágamelo saber. Espero que les ayude.
fuente
A veces, es mejor tener solo tres opciones
Utilice pequeño y grande para diferenciar el tamaño de pantalla normal.
Por lo general, no es necesario especificar nada.
Con esto, puede evitar probar y especificar dimensiones para diferentes tamaños de pantalla.
fuente
Hice lo mismo por dimensión y pinté algo como (con dp pero solo para texto y en drawText ())
XML:
Código:
fuente
dp
para el tamaño del texto ... usesp
en su lugar.Todos pueden usar la biblioteca de Android mencionada a continuación, que es la forma más fácil de hacer que los tamaños de texto sean compatibles con casi todas las pantallas de los dispositivos. En realidad, se desarrolló sobre la base de los nuevos calificadores de configuración de Android para el tamaño de la pantalla (introducido en Android 3.2) SmallestWidth swdp.
https://github.com/intuit/sdp
fuente
Si tiene API 26, entonces podría considerar usar autoSizeTextType :
La configuración predeterminada permite que el tamaño automático de TextView escale uniformemente en los ejes horizontal y vertical.
https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview
fuente
Creo que puede archivarlo agregando varios recursos de diseño para cada tamaño de pantalla, ejemplo:
Referencia: 1. http://developer.android.com/guide/practices/screens_support.html
fuente
Para unificar todas las pantallas para mostrar los mismos tamaños de elementos, incluido el tamaño de fuente: - Diseñe la interfaz de usuario en un tamaño de pantalla con los tamaños que considere apropiados durante el diseño, es decir, el tamaño de fuente de TextView es de 14 dp en el tamaño de pantalla predeterminado con 4'6 pulgadas.
Calcule programáticamente el tamaño de la pantalla física de los otros teléfonos, es decir, 5'2 pulgadas de otros teléfonos / pantallas.
Utilice una fórmula para calcular la diferencia porcentual entre las 2 pantallas. es decir, cuál es el% de diferencia entre 4'6 y 5'2.
Calcule la diferencia de píxeles entre los 2 TextViews según la fórmula anterior.
Obtenga el tamaño real (en píxeles) del tamaño de fuente de TextView y aplique la diferencia de píxeles (que calculó anteriormente) al tamaño de fuente predeterminado.
De esta manera, puede aplicar una relación de aspecto dinámica a todos los tamaños de pantalla y el resultado es excelente. Tendrá un diseño y tamaños idénticos en cada pantalla.
Puede ser un poco complicado al principio, pero logra el objetivo por completo una vez que descubres la fórmula. Con este método, no es necesario realizar varios diseños solo para adaptarse a diferentes tamaños de pantalla.
fuente
También puede utilizar
weightSum
ylayout_weight
la propiedad para ajustar su pantalla diferente.Para eso, tienes que hacer
android:layout_width
= 0dp, yandroid:layout_width
= (lo que quieras);fuente
Como mencionó @espinchi en 3.2 (nivel de API 13), los grupos de tamaño están en desuso. Los rangos de tamaño de pantalla son el enfoque preferido en el futuro.
fuente
No codifique los tamaños.
Para flexibilidad y nuevas resoluciones de pantalla, la mejor práctica es colocar TextView ficticio en el diseño para obtener el tamaño de texto:
Y en tu código por ejemplo:
Mantener
textSize
como referencia a la que puede agregar un tamaño constante o porcentual (calculando).fuente