TextView: establecer el tamaño del texto mediante programación no parece funcionar

140

Estoy usando Eclipse Indigo, probando en 2 emuladores (2.2 y 3.0).

el código a continuación muestra lo que estoy probando ahora, sin embargo, establecer el tamaño del texto no revela nada en la pantalla cuando intento ejecutar el emulador (si comento el tamaño del texto, el texto aparece en color rojo). Pensé que de alguna manera eclipse no estaba reconstruyendo el código, pero agregué la línea de código para agregar el fondo azul y funcionó. He intentado configurar el tamaño del texto después de configurar el texto sin éxito aún. El código está abajo. ¡gracias por tu ayuda! (descargo de responsabilidad) - Estoy tratando de mantenerme alejado de xml. Siendo que ya sé Java, no quiero depender de eso.

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.TextView;

public class TestAndroidvs2Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TextView text = new TextView(this);
    text.setTextColor(Color.RED);
    text.setTextSize(2);    
    text.setBackgroundColor(Color.BLUE);
    text.setText("Hello Android");


    setContentView(text);
  }
}
cspam
fuente

Respuestas:

19

El tamaño del texto 2 será prácticamente invisible. Pruébalo con 14 al menos. Por cierto, usar xml tiene muchas ventajas y te hará la vida más fácil una vez que necesites hacer algo más complejo que 'Hello World'.

Nikolay Elenkov
fuente
Lo intentaré con 14. Como dije en la primera publicación, incluso si 2 es demasiado pequeño, eso no debería dejar mi pantalla en blanco, ¿verdad? Supongo que lo estaba leyendo como una escala más allá de lo que el texto ya era en lugar de simplemente establecer el tamaño. - buscaré pero preguntaré de todos modos - ¿cuál es el tamaño predeterminado? gracias de todos modos.
cspam
Por cierto, sí, me doy cuenta de que XML puede tener sus ventajas, pero no tengo experiencia con él. Sí, sé que probablemente sea fácil de aprender. Como ya estoy familiarizado con Java, pensé que sería realmente útil familiarizarse con la mayor cantidad de clases posible. Parece que usar XML te oculta mucho de eso.
cspam
No lo oculta: son las mismas clases con los mismos parámetros. Toma algún tiempo poder traducir entre los dos, pero en realidad es bastante eficiente. Como beneficio adicional, si define vistas en XML, el sistema se ocupa de diferentes tamaños de pantalla, densidades y orientaciones, sin necesidad de cambiar su código, solo los archivos de diseño.
Nikolay Elenkov
¿podría cambiar los diseños y las orientaciones en tiempo de ejecución en función de una serie de factores?
cspam
Esa es una pregunta muy amplia, pero, en resumen, sí. Incluso si define su IU en XML, aún puede agregar / eliminar vistas en tiempo de ejecución. También puede anular el comportamiento predeterminado y manejar los cambios de orientación usted mismo.
Nikolay Elenkov
534

el método TextView.setTextSize(int unit , float size); toma dos parámetros.

Prueba esto :

text.setTextSize(TypedValue.COMPLEX_UNIT_SP,14);

Consulte esto y esto .

ACTUALIZACIÓN: Ahora setTextSize(float size)establecerá el tamaño del texto automáticamente en " scaled pixel" unidades. no es necesario mencionar el COMPLEX_UNIT_SP manualmente. Consulte la documentación .

Houcine
fuente
36
Esta es la respuesta correcta. Más específicamente: float myTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 18F, context.getResources().getDisplayMetrics());
Brill Pappin
2
¡Muchas gracias!
DmitryKanunnikoff
72

Esto solucionó el problema para mí. Obtuve un tamaño de fuente uniforme en todos los dispositivos.

 textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,getResources().getDimension(R.dimen.font));
Vikas
fuente
¿El número de R.dimen.font es uniforme o tiene diferentes tamaños para diferentes dispositivos?
The_Martian
En mi caso, declaró la fuente en los archivos dimen.xml en estas carpetas: valores, valores-sw600dp, valores-sw720dp con valores específicos.
Vikas
Es extraño que TextView desapareciera después de que textView.setTextSize (R.dimen.text_size_max) llamó, pero usa tu método, funciona.
li2
Funciona para mi. ¡Gracias!
apurv thakkar
24

Actualmente, el setTextSize(float size)método funcionará bien, así que no necesitamos usar otro método para cambiar el tamaño del texto

Código fuente android.widget.TextView.java

/**
 * Set the default text size to the given value, interpreted as "scaled
 * pixel" units.  This size is adjusted based on the current density and
 * user font size preference.
 *
 * <p>Note: if this TextView has the auto-size feature enabled than this function is no-op.
 *
 * @param size The scaled pixel size.
 *
 * @attr ref android.R.styleable#TextView_textSize
 */
@android.view.RemotableViewMethod
public void setTextSize(float size) {
    setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
}

Ejemplo usando

textView.setTextSize(20); // set your text size = 20sp
Phan Van Linh
fuente
Enlace a la fuente de AOSP TextView: github.com/aosp-mirror/platform_frameworks_base/blob/…
Albert Vila Calvo
12

Consulte este enlace para obtener más información sobre cómo configurar el tamaño del texto en el código. Básicamente dice:

public void setTextSize (int unidad, tamaño flotante)

Desde: API Nivel 1 Establece el tamaño de texto predeterminado en una unidad y valor dados. Consulte TypedValue para conocer las posibles unidades de dimensión. Atributos XML relacionados

android: parámetros de textSize

unidad La unidad de dimensión deseada.
tamaño El tamaño deseado en las unidades dadas.

Jack
fuente
1
Acabo de hacer doble check en Eclipse en mi código y de acuerdo con intellisense, en realidad tengo 2 opciones para setTextSize, setTextSize (tamaño flotante), setTextSize (unidad int, tamaño flotante). La documentación que vinculó confirma esto.
cspam
Bien, ¿lo intentaste? Además, Nikolay dice que 2 será MUY pequeño para ver, intente aumentar también.
Jack
Sí, pero el problema es que, cuando trato de hacerlo como lo tengo ahora, el texto ni siquiera aparece. Es solo una pantalla en blanco. Incluso si 2 no se notaba, ¿por qué la pantalla está en blanco?
cspam
No esta en blanco. Si miras muy de cerca, puedes ver los pequeños píxeles rojos :). Aumente el tamaño gradualmente para ver.
Nikolay Elenkov
Y, por cierto, setTextSize (float) es equivalente a setTextSize (COMPLEX_UNIT_SP, float).
Nikolay Elenkov
10

En mi caso utilicé este método :

public static float pxFromDp(float dp, Context mContext) {
    return dp * mContext.getResources().getDisplayMetrics().density;
}

Aquí establezca TextSize TextSize de forma programática :

textView.setTextSize(pxFromDp(18, YourActivity.this));

Sigue disfrutando:)

Dhruv Raval
fuente
Hola @Dhruv Raval, estoy recogiendo para poder ajustar el tamaño de fuente en mi proyecto, en caso de que este valor 18 sea válido para cualquier densidad de pantalla, ¿o debería crear una dimensión para cada pantalla?
Armando Marques Sobrinho