Je souhaite spécifier ma propre taille de texte dans mon application, mais j'ai un problème à le faire.
Lorsque je change la taille de la police dans les paramètres de l'appareil, la taille de la police de mon application TextViewchange également.
Je souhaite spécifier ma propre taille de texte dans mon application, mais j'ai un problème à le faire.
Lorsque je change la taille de la police dans les paramètres de l'appareil, la taille de la police de mon application TextViewchange également.
Réponses:
En fait, la taille de la police Paramètres affecte uniquement les tailles dans sp. Donc, tout ce que vous devez faire - définir textSizedans dpau lieu de sp, 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 de toutes les applications respectent les préférences de l'utilisateur. Il existe de nombreuses raisons pour lesquelles un utilisateur peut souhaiter ajuster les tailles de police et certaines d'entre elles peuvent même être des utilisateurs malvoyants. L'utilisation dpau lieu de sppour le texte peut conduire à une discrimination involontaire à l'encontre de certains utilisateurs de votre application.
c'est à dire:
android:textSize="32dp"
spet quand je devais l'utiliser dp. J'ai eu une très bonne réponse ici: stackoverflow.com/questions/11638691/...
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 textSizepropriété, vous pouvez consulter la documentation du développeur Android .
Utilisez le dimensiontype de ressources comme vous utilisez les stringressources ( DOCS ).
Dans votre dimens.xmlfichier, 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>
Ensuite, 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 dimens.xmlfichiers 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:textSizele système utilise les valeurs par défaut.
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 fichier dimen.xml.
Je pense que la meilleure option est d'utiliser PX lors de l'utilisation d'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 le fichier dimen.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 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;
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());
}
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, Resource # updateConfiguration est déplié au niveau de l'API 25, ce qui signifie qu'il ne sera plus pris en charge un jour dans le futur.
Vous pouvez utiliser ce code:
android:textSize="32dp"
cela résout votre problème mais vous devez savoir que vous devez respecter les décisions des utilisateurs. ainsi, la modification de la taille du texte à partir des paramètres de l'appareil ne changera pas cette valeur. c'est pourquoi vous devez utiliser sp au lieu de dp . Ma suggestion est donc de revoir votre application avec différentes tailles de police système (petite, normale, grande, ...)
pour kotlin, ça marche pour moi
priceTextView.textSize = 12f
Si les unités utilisées sont SP, pas DP, et que vous souhaitez remplacer la mise à l'échelle des polices système, tout ce que vous faites est de remplacer une méthode dans l'activité - voir cet article .
resources.updateConfiguration est obsolète et boguée (sur Oreo, j'ai eu des problèmes avec le texte formaté).
Passer outre getResources() dans l'activité.
Définissez la taille de TextView dans sp comme d'habitude, comme android:textSize="32sp"
override fun getResources(): Resources {
return super.getResources().apply {
configuration.fontScale = 1F
updateConfiguration(configuration, displayMetrics)
}
}
dans Android 8, cette solution fonctionne pour moi
ajouter ce code dans l'activité de base
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(newBase);
final Configuration override = new Configuration(newBase.getResources().getConfiguration());
override.fontScale = 1.0f;
applyOverrideConfiguration(override);
}