La taille de la police de TextView dans l’application Android change en changeant la taille de la police à partir des parameters natifs

Je souhaite spécifier ma propre taille de texte dans mon application, mais cela pose un problème.

Lorsque je change la taille de la police dans les parameters de l’appareil, la taille de la police de mon application TextView change également.

En fait, la taille de la police des parameters n’affecte que les tailles dans sp . Donc, tout ce que vous devez faire – définir textSize dans dp au lieu de sp , alors les parameters 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 fonts de toutes les applications respectent les préférences de l’utilisateur. Il y a de nombreuses raisons pour lesquelles un utilisateur peut vouloir ajuster la taille de la police et certaines peuvent même être des utilisateurs ayant une déficience visuelle. Utiliser dp au lieu de sp pour du texte peut conduire à une discrimination involontaire contre certains utilisateurs de votre application.

c’est à dire:

 android:textSize="32dp" 

Le plus simple est simplement d’utiliser quelque chose comme ceci:

 android:textSize="32sp" 

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

Utilisez le type de dimension des ressources comme vous utilisez ssortingng ressources de ssortingng ( DOCS ).

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

   25dp 150dp 30dp 16sp  

Ensuite, vous pouvez utiliser ces valeurs comme ceci:

  

Vous pouvez déclarer différents fichiers dimens.xml pour différents types d’écrans. Faire cela garantira l’aspect désiré de votre application sur différents appareils.

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

Notez également que si le textSize est défini dans le code, l’appel à textView.setTextSize(X) interprète le nombre (X) comme SP. Utilisez setTextSize(TypedValue.COMPLEX_UNIT_DIP, X) pour définir les valeurs dans dp .

Ce n’est pas une bonne chose de devoir spécifier à nouveau DIP ou SP par code quand ils sont déjà définis dans un fichier dimen.xml.

Je pense que la meilleure option est d’utiliser PX avec une valeur dimen.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 un fichier dimen.xml sans avoir à changer de code.

Un moyen simple d’empêcher l’application entière d’être affectée par la taille de police du système consiste à mettre à jour la configuration à l’aide d’une activité de base.

 //in base activity add this code. public void adjustFontScale( Configuration configuration) { configuration.fontScale = (float) 1.0; DisplayMesortingcs mesortingcs = getResources().getDisplayMesortingcs(); WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); wm.getDefaultDisplay().getMesortingcs(mesortingcs); mesortingcs.scaledDensity = configuration.fontScale * mesortingcs.density; getBaseContext().getResources().updateConfiguration(configuration, mesortingcs); } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); adjustFontScale( getResources().getConfiguration()); } 

Utiliser la taille de la police dans les DP au lieu des SP dans textSize résout ce problème.

C’est le code de textview Creation Asortingbute.

  

cela peut aider. Ajouter 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.getDisplayMesortingcs()); } return resources; } 

Toutefois, la ressource # updateConfiguration est déplacée au niveau de l’API 25, ce qui signifie qu’elle ne sera plus prise en charge un jour plus tard.

Vous devez écrire dans les balises TextView dans XML:

 android:textSize="32dp"