TextView - la définition de la taille du texte par programme ne semble pas fonctionner

140

J'utilise Eclipse Indigo, en testant sur 2 émulateurs (2.2 et 3.0).

le code ci-dessous montre ce que je teste maintenant, mais la définition de la taille du texte ne révèle rien à l'écran lorsque vous essayez d'exécuter l'émulateur (si je commente la taille du texte, le texte apparaît avec une couleur rouge). Je pensais qu'éclipse ne reconstruisait pas d'une manière ou d'une autre le code, mais j'ai ajouté la ligne de code pour ajouter l'arrière-plan bleu et cela a fonctionné. J'ai essayé de définir la taille du texte après avoir défini le texte sans toujours aucun succès. le code est ci-dessous. Merci de votre aide! (clause de non-responsabilité) - j'essaye de rester loin de xml. Étant donné que je connais déjà Java, je ne veux pas dépendre de cela.

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
la source

Réponses:

19

La taille du texte 2 sera pratiquement invisible. Essayez-le avec au moins 14. BTW, l'utilisation de xml présente de nombreux avantages et vous facilitera la vie une fois que vous aurez besoin de faire quelque chose de plus complexe que «Hello World».

Nikolay Elenkov
la source
Je vais l'essayer avec 14. Comme je l'ai dit dans le premier post - même si 2 est trop petit, cela ne devrait pas rendre mon écran vide, n'est-ce pas? Je suppose que je le lisais comme une échelle au-delà de ce que le texte était déjà au lieu de simplement définir la taille. - Je vais regarder mais je vais quand même demander - quelle est la taille par défaut? en tout cas merci.
cspam
btw - oui, je réalise que xml peut avoir ses avantages mais je n'ai aucune expérience avec lui. Ouais, je sais que c'est probablement facile à apprendre. Comme je suis déjà familier avec java, j'ai juste pensé qu'il serait vraiment utile de se familiariser avec autant de classes que possible. Il semble que l'utilisation de XML vous cache une grande partie de cela.
cspam
Cela ne le cache pas - ce sont les mêmes classes avec les mêmes paramètres. Cela prend du temps pour pouvoir traduire entre les deux, mais c'est en fait assez efficace. En prime, si vous définissez des vues en XML, le système prend en charge différentes tailles d'écran, densités et orientations, sans qu'il soit nécessaire de modifier votre code, uniquement les fichiers de mise en page.
Nikolay Elenkov
seriez-vous capable de modifier les dispositions et les orientations au moment de l'exécution en fonction d'un certain nombre de facteurs?
cspam
C'est une question très large, mais, en bref, oui. Même si vous définissez votre interface utilisateur en XML, vous pouvez toujours ajouter / supprimer des vues au moment de l'exécution. Vous pouvez également remplacer le comportement par défaut et gérer vous-même les changements d'orientation.
Nikolay Elenkov
536

la méthode TextView.setTextSize(int unit , float size);prend deux paramètres.

Essaye ça :

text.setTextSize(TypedValue.COMPLEX_UNIT_SP,14);

renvoyer ceci et cela .

MISE À JOUR: Maintenant, le setTextSize(float size)va définir automatiquement la taille du texte en scaled pixelunités " ". pas besoin de mentionner le COMPLEX_UNIT_SP manuellement. Reportez-vous à la documentation .

Houcine
la source
36
C'est la bonne réponse. Plus précisément: float myTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 18F, context.getResources().getDisplayMetrics());
Brill Pappin
2
Merci beaucoup!
DmitryKanunnikoff
72

Cela a résolu le problème pour moi. J'ai une taille de police uniforme sur tous les appareils.

 textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,getResources().getDimension(R.dimen.font));
Vikas
la source
R.dimen.font est-il un numéro uniforme ou avez-vous des tailles différentes pour différents appareils?
The_Martian
Dans mon cas, j'ai déclaré la police dans les fichiers dimen.xml dans ces dossiers: values, values-sw600dp, values-sw720dp avec des valeurs spécifiques.
Vikas
c'est bizarre que TextView ait disparu après l'appel de textView.setTextSize (R.dimen.text_size_max), mais utilisez votre méthode, cela fonctionne.
li2
Travaille pour moi. Je vous remercie!
apurv thakkar le
24

Actuellement, la setTextSize(float size)méthode fonctionnera bien , nous n'avons donc pas besoin d'utiliser une autre méthode pour modifier la taille du texte

Code source 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);
}

Exemple d'utilisation

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

Veuillez consulter ce lien pour plus d'informations sur la définition de la taille du texte dans le code. En gros, il dit:

public void setTextSize (unité int, taille flottante)

Depuis: API Niveau 1 Définissez la taille du texte par défaut sur une unité et une valeur données. Voir TypedValue pour les unités de dimension possibles. Attributs XML associés

android: paramètres textSize

unit L'unité de dimension souhaitée.
size La taille souhaitée dans les unités données.

Jack
la source
1
Je viens de vérifier Eclipse dans mon code et, selon intellisense, j'ai en fait 2 options pour setTextSize, setTextSize (taille flottante), setTextSize (unité int, taille flottante). La documentation que vous avez liée le confirme.
cspam
Bien - avez-vous essayé? Nikolay dit également que 2 sera beaucoup trop petit à voir, essayez également d'augmenter.
Jack
oui mais le problème est que quand j'essaye de le faire comme je l'ai maintenant, le texte n'apparaît même pas. c'est juste un écran vide. Même si 2 n'était pas perceptible, pourquoi l'écran est-il vide?
cspam
Ce n'est pas vierge. Si vous regardez vraiment de près, vous pouvez voir les petits pixels rouges :). Augmentez progressivement la taille pour voir.
Nikolay Elenkov
Et au fait, setTextSize (float) est équivalent à setTextSize (COMPLEX_UNIT_SP, float).
Nikolay Elenkov
10

Dans mon cas, j'ai utilisé cette méthode :

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

Ici, définissez TextSize de TextView par programme :

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

Profiter encore:)

Dhruv Raval
la source
Salut @Dhruv Raval, je décroche pour pouvoir ajuster la taille de la police dans mon projet, au cas où cette valeur 18 serait valide pour n'importe quelle densité d'écran, ou devrais-je créer une dimension pour chaque écran?
Armando Marques Sobrinho