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

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».


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 .


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));

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


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.


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:)


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.