2011-05-27 20 views
6

Tenía varios botones en LinearLayout horizontalmente. En un dispositivo más grande, todo el texto del botón encaja en una línea con un tamaño de texto de 20sp. Sin embargo, en un dispositivo más pequeño con un tamaño de texto de 20sp, el texto de los botones va a dos líneas.Maximizar el tamaño del texto del botón de Android

¿Cómo puedo decirle que haga que el tamaño del texto sea lo más grande posible para que el texto permanezca en una línea?

+0

¿Ha intentado establecer la propiedad de líneas máximas en 1? – Sam

+0

Sí, pero eso no funciona, ya que simplemente descarta las letras que irían en la segunda línea. Necesito que el texto se redimensione cuando no hay suficiente espacio, no para que el texto se trunque. –

+0

Ah veo, parece que la propiedad 'singleLine' será más de lo que estás buscando. – Sam

Respuesta

0

se puede obtener la resolución de la pantalla, y en su código, se puede adaptar el tamaño del texto de los botones cambiando el LinearLayout.LayoutParams

EDIT: algoritmo de

Primera: obtener la resoluciones de pantalla, para ver si el teléfono es un pequeño, o grande meduim (para ello, utilizar la clase: DisplayMetrics).

Segunda: en ti r code, que pondrá a prueba para cada tipo de tamaño (en general creo que 3: pequeña, meduim, grande), y modificar el TEXTSIZE de los botones de la siguiente manera:

btn.setTextSize(float size) ; 
+1

¿Cómo ajustaría el tamaño del texto en función del ancho de la pantalla? ¿Cuál sería el algoritmo? –

+0

hola, explicaré el algoritmo, vea mi edición :) – Houcine

+1

Eso no funcionará, ya que tengo en cuenta diferentes densidades usando el tamaño "sp". –

1

Esto funciona para mí ... será necesario personalizar para sus necesidades:

// Determine Scaled Density for later calculations 
Display dd = ((Activity) m_Context).getWindowManager().getDefaultDisplay(); 
DisplayMetrics dm = new DisplayMetrics(); 
dd.getMetrics(dm); 
float m_ScaledDensity = dm.scaledDensity; 

Rect bounds = new Rect(); 
Paint p = new Paint(); 
p.setTypeface(btn.getTypeface()); 

// W is a very wide character 
String sample = "NeedsToFIt" 
int maxFont; 
for (maxFont= 1 
    ; -bounds.top <= btn.getHeight() && bounds.right <= btn.getWidth() 
    ; maxFont++) { 
    p.setTextSize(maxFont); 
    p.getTextBounds(sample, 0, sample.length(), bounds); 
} 
maxFont = (int) ((maxFont - 1)/m_ScaledDensity); 
btn.setTextSize(maxFont); 
+0

No funcionará si la muestra es una cadena vacía. – Vanuan

+0

Además, esto no tiene en cuenta el relleno del botón. – Vanuan

Cuestiones relacionadas