Existe-t-il un équivalent de ce CSS dans React Native, de sorte que l'application utilise la même police partout?
body {
font-family: 'Open Sans';
}
L’appliquer manuellement sur chaque nœud de texte semble trop compliqué.
La méthode recommandée consiste à créer votre propre composant, tel que MyAppText. MyAppText serait un composant simple qui restitue un composant Text en utilisant votre style universel et peut passer par d'autres accessoires, etc.
https://facebook.github.io/react-native/docs/text.html#limited-style-inheritance
Récemment, un module de nœud a été créé pour résoudre ce problème et vous ne devez pas créer un autre composant. .
https://github.com/Ajackster/react-native-global-props
https://www.npmjs.com/package/react-native-global-props
La documentation indique que, dans votre composant d'ordre le plus élevé, importez la fonction setCustomText
de cette manière.
import { setCustomText } from 'react-native-global-props';
Créez ensuite le style/les accessoires personnalisés de votre choix pour le composant rea-native Text
. Dans votre cas, vous voudriez que fontFamily fonctionne sur tous les composants Text
.
const customTextProps = {
style: {
fontFamily: yourFont
}
}
Appelez la fonction setCustomText
et transmettez-lui vos accessoires/styles.
setCustomText(customTextProps);
Et ensuite, tous les composants réagit-native Text
auront votre déclaration déclarée fontFamily avec tous les autres accessoires/styles que vous fournissez.
Ajoutez Text.defaultProps.style = { fontFamily: 'some-font' }
dans le constructeur du fichier App.js (ou tout composant racine que vous possédez).
Vous pouvez remplacer le comportement du texte en l'ajoutant à n'importe lequel de vos composants à l'aide de Texte:
let oldRender = Text.prototype.render;
Text.prototype.render = function (...args) {
let Origin = oldRender.call(this, ...args);
return React.cloneElement(Origin, {
style: [{color: 'red', fontFamily: 'Arial'}, Origin.props.style]
});
};
Edit: depuis React Native 0.56, Text.prototype
ne fonctionne plus. Vous devez supprimer le .prototype
:
let oldRender = Text.render;
Text.render = function (...args) {
let Origin = oldRender.call(this, ...args);
return React.cloneElement(Origin, {
style: [{color: 'red', fontFamily: 'Arial'}, Origin.props.style]
});
};
Avec React-Native 0.56, la méthode ci-dessus de modification de Text.prototype.render
ne fonctionne plus. Vous devez donc utiliser votre propre composant, ce qui peut être effectué sur une seule ligne!
MyText.js
export default props => <Text {...props} style={[{fontFamily: 'Helvetica'}, props.style]}>{props.children}</Text>
AnotherComponent.js
import Text from './MyText';
...
<Text>This will show in default font.</Text>
...
Ajoutez cette fonction à votre composant racine App
, puis exécutez-la à partir de votre constructeur après avoir ajouté votre police à l'aide de ces instructions. https://medium.com/react-native-training/react-native-custom-fonts-ccc9aacf9e5e
import {Text, TextInput} from 'react-native'
SetDefaultFontFamily = () => {
let components = [Text, TextInput]
const customProps = {
style: {
fontFamily: "Rubik"
}
}
for(let i = 0; i < components.length; i++) {
const TextRender = components[i].prototype.render;
const initialDefaultProps = components[i].prototype.constructor.defaultProps;
components[i].prototype.constructor.defaultProps = {
...initialDefaultProps,
...customProps,
}
components[i].prototype.render = function render() {
let oldProps = this.props;
this.props = { ...this.props, style: [customProps.style, this.props.style] };
try {
return TextRender.apply(this, arguments);
} finally {
this.props = oldProps;
}
};
}
}
Super tard pour ce fil mais voilà.
TLDR; Ajoutez le bloc suivant dans votre AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
....
// HERE: replace "Verlag" with your font
[[UILabel appearance] setFont:[UIFont fontWithName:@"Verlag" size:17.0]];
....
}
Quelques manières de le faire en dehors d’un plugin tel que react-native-global-props
afin que je puisse vous guider pas à pas.
Commençons par créer un emplacement pour nos actifs. Faisons le répertoire suivant à notre racine.
`` `
ios/
static/
fonts/
`` `
Ajoutons maintenant un NPM "React Native" dans notre package.json
"rnpm": {
"static": [
"./static/fonts/"
]
}
Nous pouvons maintenant exécuter le "lien natif de réaction" pour ajouter nos ressources à nos applications natives.
Cela devrait ajouter vos noms de police dans les projets .plist
(pour les utilisateurs de code VS, exécutez code ios/*/Info.plist
pour confirmer)
Ici supposons que Verlag
soit la police que vous avez ajoutée, elle devrait ressembler à ceci:
<dict>
<plist>
.....
<key>UIAppFonts</key>
<array>
<string>Verlag Bold Italic.otf</string>
<string>Verlag Book Italic.otf</string>
<string>Verlag Light.otf</string>
<string>Verlag XLight Italic.otf</string>
<string>Verlag XLight.otf</string>
<string>Verlag-Black.otf</string>
<string>Verlag-BlackItalic.otf</string>
<string>Verlag-Bold.otf</string>
<string>Verlag-Book.otf</string>
<string>Verlag-LightItalic.otf</string>
</array>
....
</dict>
</plist>
Maintenant que vous les avez cartographiées, assurez-vous qu’elles sont réellement présentes et chargées (c’est également ce que vous feriez manuellement).
Allez à "Build Phase" > "Copy Bundler Resource"
, si cela ne fonctionne pas, vous pouvez les ajouter manuellement ici.
Commencez par ouvrir vos journaux XCode, comme suit:
Ensuite, vous pouvez ajouter le bloc suivant dans votre AppDelegate.m
pour consigner les noms des polices et de la famille de polices.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
.....
for (NSString* family in [UIFont familyNames])
{
NSLog(@"%@", family);
for (NSString* name in [UIFont fontNamesForFamilyName: family])
{
NSLog(@" %@", name);
}
}
...
}
Une fois que vous avez exécuté, vous devriez trouver vos polices si elles sont chargées correctement. Nous avons trouvé ici les nôtres dans des journaux comme celui-ci:
2018-05-07 10:57:04.194127-0700 MyApp[84024:1486266] Verlag
2018-05-07 10:57:04.194266-0700 MyApp[84024:1486266] Verlag-Book
2018-05-07 10:57:04.194401-0700 MyApp[84024:1486266] Verlag-BlackItalic
2018-05-07 10:57:04.194516-0700 MyApp[84024:1486266] Verlag-BoldItalic
2018-05-07 10:57:04.194616-0700 MyApp[84024:1486266] Verlag-XLight
2018-05-07 10:57:04.194737-0700 MyApp[84024:1486266] Verlag-Bold
2018-05-07 10:57:04.194833-0700 MyApp[84024:1486266] Verlag-Black
2018-05-07 10:57:04.194942-0700 MyApp[84024:1486266] Verlag-XLightItalic
2018-05-07 10:57:04.195170-0700 MyApp[84024:1486266] Verlag-LightItalic
2018-05-07 10:57:04.195327-0700 MyApp[84024:1486266] Verlag-BookItalic
2018-05-07 10:57:04.195510-0700 MyApp[84024:1486266] Verlag-Light
Alors maintenant, nous savons qu'il a chargé la famille Verlag
et que sont les polices à l'intérieur de cette famille
Verlag-Book
Verlag-BlackItalic
Verlag-BoldItalic
Verlag-XLight
Verlag-Bold
Verlag-Black
Verlag-XLightItalic
Verlag-LightItalic
Verlag-BookItalic
Verlag-Light
Ce sont désormais les noms sensibles à la casse que nous pouvons utiliser dans notre famille de polices que nous pouvons utiliser dans notre application native rea.
Puis pour définir une police par défaut pour ajouter votre nom de famille de police dans votre AppDelegate.m
avec cette ligne
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
....
// ADD THIS LINE (replace "Verlag" with your font)
[[UILabel appearance] setFont:[UIFont fontWithName:@"Verlag" size:17.0]];
....
}
Terminé.
Cela fonctionne pour moi: Ajouter une police personnalisée dans React Native
téléchargez vos polices et placez-les dans le dossier assets/fonts, ajoutez cette ligne dans package.json
"rnpm": {
"assets": ["assets/fonts/Sarpanch"]}
puis ouvrez terminal et exécutez cette commande: lien de réaction natif
Maintenant, vous êtes prêt à partir. Pour l'étape plus détaillée. visitez le lien mentionné ci-dessus