La taille de la police de TextView dans l'application Android change lors de la modification de la taille de la police à partir des paramètres natifs

Je veux spécifier ma propre taille de texte dans mon application, mais j'ai un problème à le faire.

Quand je change la taille de la police dans les paramètres de l'appareil, la taille de la police de mon application TextView change également.

132
demandé sur 030 2012-11-07 11:09:16

10 réponses

En fait, les paramètres Taille de la police affecte uniquement les tailles dans sp. Donc, tout ce que vous devez faire - Définir textSize dans dp au lieu de sp, alors les paramètres ne changeront pas la taille du texte dans votre application.

Voici un lien vers la documentation: Dimensions

Cependant, veuillez noter que le comportement attendu est que les polices dans toutes les applications respectent les préférences de l'utilisateur. Il y a plusieurs raisons pour lesquelles un utilisateur pourrait vouloir ajuster les tailles de police et certains d'entre eux pourraient même être malvoyants médicaux utilisateur. L'utilisation de dp au lieu de sp pour le texte peut entraîner une discrimination contre certains utilisateurs de votre application.

C'est-à-dire:

android:textSize="32dp"
180
répondu sandrstar 2018-05-31 04:52:21

Le plus simple à faire est simplement d'utiliser quelque chose comme ce qui suit:

android:textSize="32sp"

Si vous souhaitez en savoir plus sur la propriété textSize, vous pouvez consulter la documentation du développeur Android .

126
répondu Evan Long 2013-08-24 13:08:09

Utiliser le dimension type de ressources comme vous utilisez string ressources (DOCS).

Dans votre fichier dimens.xml, déclarez vos variables de dimension:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <dimen name="textview_height">25dp</dimen>
  <dimen name="textview_width">150dp</dimen>
  <dimen name="ball_radius">30dp</dimen>
  <dimen name="font_size">16sp</dimen>
</resources>

, Alors vous pouvez utiliser ces valeurs comme ceci:

<TextView
   android:layout_height="@dimen/textview_height"
   android:layout_width="@dimen/textview_width"
   android:textSize="@dimen/font_size"/>

Vous pouvez déclarer différents fichiers dimens.xml pour différents types d'écrans. Cela garantira l'apparence souhaitée de votre application sur différents appareils.

Lorsque vous ne spécifiez pas android:textSize, le système utilise les valeurs par défaut.

43
répondu ashakirov 2014-06-15 22:03:45

Notez également que si la taille de texte est définie dans le code, l'appel textView.setTextSize(X) interprète le nombre (X) comme SP. Utiliser setTextSize(TypedValue.COMPLEX_UNIT_DIP, X) pour définir des valeurs dans dp.

23
répondu Arpit 2014-10-01 19:58:43

Ce n'est pas une bonne chose d'avoir à spécifier à nouveau DIP ou SP par code lorsqu'il est déjà défini dans un dimen.fichier xml.

Je pense que la meilleure option est d'utiliser PX lors de l'utilisation d'une dimen.valeur xml:

tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.txt_size));

De cette façon, vous pouvez passer de DP à SP si nécessaire dans dimen.fichier xml sans avoir à changer de code.

12
répondu mba 2014-12-10 11:02:23

Un moyen Simple d'empêcher toute l'application d'être affectée par la taille de la police du système est de updateConfiguration en utilisant une activité de base.

//in base activity add this code.
public  void adjustFontScale( Configuration configuration) {

    configuration.fontScale = (float) 1.0;
    DisplayMetrics metrics = getResources().getDisplayMetrics();
    WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
    wm.getDefaultDisplay().getMetrics(metrics);
    metrics.scaledDensity = configuration.fontScale * metrics.density;
    getBaseContext().getResources().updateConfiguration(configuration, metrics);

}

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    adjustFontScale( getResources().getConfiguration());
}
3
répondu Usama Saeed US 2018-04-07 18:02:11

C'est le code de création de textview avec la taille du texte Atribute.

<TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="2018 Sampath Bank PLC.All Rights Reserved."
        android:gravity="center"
        android:textColor="@android:color/darker_gray"
        android:textSize="14dp"
        android:layout_marginTop="26dp"
        />
2
répondu Gihan Kosala 2018-08-27 11:26:00

À l'Aide de la taille de police dans DPs au lieu de SPs dans textSize résout ce problème.

1
répondu bpr10 2018-03-04 01:43:52

Cela peut aider. ajoutez le code dans votre Application personnalisée ou BaseActivity

/**
 * 重写 getResource 方法,防止系统字体影响
 *
 * @return
 */
@Override
public Resources getResources() {
    Resources resources = super.getResources();
    if (resources != null && resources.getConfiguration().fontScale != 1) {
        Configuration configuration = resources.getConfiguration();
        configuration.fontScale = 1;
        resources.updateConfiguration(configuration, resources.getDisplayMetrics());
    }
    return resources;
}

Cependant, la ressource # updateConfiguration est décrite au niveau de L'API 25, ce qui signifie qu'elle ne sera pas prise en charge un jour dans le futur.

1
répondu Arno_J 2018-03-23 02:48:35

Vous devez écrire dans les balises TextView en XML:

android:textSize="32dp"
1
répondu neha 2018-07-24 12:29:27