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.
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"
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 .
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.
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.
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.
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());
}
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"
/>
À l'Aide de la taille de police dans DPs au lieu de SPs dans textSize
résout ce problème.
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.
Vous devez écrire dans les balises TextView en XML:
android:textSize="32dp"