নেটিভ ফন্ট পরিবার কীভাবে সেট করবেন?


100

রিএ্যাক্ট নেটিভে এই সিএসএসের সমতুল্য কি রয়েছে, যাতে অ্যাপটি সর্বত্র একই ফন্ট ব্যবহার করে?

body {
  font-family: 'Open Sans';
}

এটি প্রতিটি পাঠ্য নোডে ম্যানুয়ালি প্রয়োগ করা অত্যধিক জটিল বলে মনে হচ্ছে।


4
এই প্রশ্নের কোন নিখুঁত উত্তর আছে ??? আমি কোনও স্টাইলস.টেক্সট বা এর মতো কিছুতে কল করতে চাই না।
এমডি আশিক

উত্তর:


70

প্রস্তাবিত উপায় হ'ল মাই অ্যাপটেক্সট এর মতো আপনার নিজের উপাদান তৈরি করা। মাইঅ্যাপটেক্সট হ'ল একটি সাধারণ উপাদান যা আপনার সর্বজনীন স্টাইল ব্যবহার করে একটি পাঠ্য উপাদানকে রেন্ডার করে এবং অন্যান্য প্রপসগুলি ইত্যাদির মধ্য দিয়ে যেতে পারে etc.

https://facebook.github.io/react-native/docs/text.html# मर्यादित- স্টাইল- ইতিহাস


4
ধন্যবাদ ঠিক এটাই আমার দরকার ছিল। দেখে মনে হচ্ছে যে আমি উপাদানটির গভীরতা এখনও গভীরভাবে বুঝতে পারি নি :)
ডাগোবার্ট রেনোফ

4
ডকস থেকে একটি বিষয় যা স্পষ্টভাবে পরিষ্কার নয় তা হ'ল কীভাবে আপনার উপাদানগুলির বৈশিষ্ট্যগুলি পাস করতে হয় এবং আপনার উপাদানগুলির শৈলীর সম্মান করা যায়। আপনি এটি এর মতো করতে পারেন: gist.github.com/neilsarkar/c9b5fc7e67bbbe4c407eec17deb7311e
নীল সরকার

4
@ নীলসরকার সেই টুকরো উদাহরণের সাথে একটি সমস্যা হ'ল নির্মাণকারীর মধ্যে শৈলী তৈরি করা হয়েছে। ফলস্বরূপ, যদি স্টাইলের প্রপ পরিবর্তন হয় তবে আপনি এটি পুনরায় রেন্ডার করতে চান তবে এই ক্ষেত্রে এটি হবে না। এটি render()কনস্ট্রাক্টরের পরিবর্তে পরিচালনা করতে হবে । useMemoদক্ষতা গুরুত্বপূর্ণ হলে এর সাথে হুক ব্যবহার করাও সহায়তা করতে পারে। বিকল্পভাবে, আপনি যদি এটি কনস্ট্রাক্টরে রাখতে চান তবে একটি componentDidUpdateযুক্তি যুক্ত করা গুরুত্বপূর্ণ যা this.styleস্টাইল প্রোপ পরিবর্তনের কারণে উপাদানগুলি আপডেট হওয়ার পরে আপডেট হয়।
ফার্নান্দো রোজো

ভাল কথা, ধন্যবাদ! দেখে মনে হচ্ছে যে কেউ একজন গিস্টটিতে একটি রিফ্যাক্টরড সংস্করণ যুক্ত করেছে যা রেন্ডার পদ্ধতিতে (তাদের ক্ষেত্রে খাঁটি উপাদান হিসাবে) শৈলীগুলিকে একত্রিত করে
নীল সরকার

59

সেখানে সম্প্রতি একটি নোড মডিউল যে সমাধান এই সমস্যা হয়েছিল, যাতে তুমি ছিলে না আছে অন্য উপাদান তৈরি

https://github.com/Ajackster/react-native-global-prop

https://www.npmjs.com/package/react-native-global-prop

ডকুমেন্টেশনটি জানিয়েছে যে আপনার সর্বোচ্চ অর্ডারের উপাদানগুলিতে, setCustomTextফাংশনটি তেমনভাবে আমদানি করুন ।

import { setCustomText } from 'react-native-global-props';

তারপরে, প্রতিক্রিয়া-নেটিভ Textউপাদানটির জন্য আপনার পছন্দসই কাস্টম স্টাইলিং / প্রপস তৈরি করুন । আপনার ক্ষেত্রে, আপনি ফন্টফ্যামিলি প্রতিটি Textউপাদানগুলিতে কাজ করতে চান ।

const customTextProps = { 
  style: { 
    fontFamily: yourFont
  }
}

setCustomTextফাংশনটি কল করুন এবং আপনার প্রপস / শৈলীগুলি ফাংশনে প্রবেশ করুন।

setCustomText(customTextProps);

এবং তারপরে সমস্ত প্রতিক্রিয়া-নেটিভ Textউপাদানগুলিতে আপনার প্রদত্ত অন্য প্রপস / শৈলীর সাথে আপনার ঘোষিত ফন্টটি থাকবে ।


উপাদান সংমিশ্রণটি ব্যবহার করার জন্য আইডিয়োমেটিক পদ্ধতিটি আরও ভাল পছন্দ বলে মনে হচ্ছে, যদিও এটি দুর্দান্ত হ্যাক।
ড্যানিয়েল লিটল

যখন পাঠ্য উপাদানটি বাক্সের বাইরে ডিফল্ট ফন্টগুলি পরিবর্তন করতে সমর্থন করে না, তখন এই সমাধানটি আরও ভাল হয়ে যায়। আমি বরং এক জায়গায় বিশ্বব্যাপী নিয়ন্ত্রণ যুক্ত করব এবং প্রকৃত নেটিভ অ্যাপ্লিকেশনগুলি সরবরাহ করে এমন প্রতিটি বিবরণের জন্য একটি মোড়কের উপাদান তৈরির চেয়ে স্থানীয় উপাদানগুলি ব্যবহার করব।
মিয়ানাইকো

আমি উপরোক্ত 2 টি সমাধানের মধ্যে দ্বিধা বোধ করেছি, আসলে আমি আনুষ্ঠানিক প্লাগইনগুলি ইনস্টল করতে ঘৃণা করি যার ফলস্বরূপ দেশি-বিদেশী প্রতিক্রিয়া অব্যাহত থাকে, তবে অবশেষে আমি এটি বেছে নিই কারণ এটি আমার বিপুল পরিমাণ সময় সাশ্রয় করতে পারে। ধন্যবাদ!
ঝাং বাজ

আমার কি ফোন করতে হবে <Text style={styles.text}>?? এটি নির্ভুল সমাধান নয় যেমন Thats এর body {font-family: 'Open Sans';} কোনও আপডেট সমাধান আছে ??
এমডি আশিক

4
না আপনাকে করার দরকার নেই Text style={styles.text}>। আপনার অ্যাপ্লিকেশনের কোথাও আপনার কাস্টম প্রপসগুলি আপনাকে ঘোষণা করতে হবে এবং এটি আপনার সমস্ত পাঠ্যের উপাদানগুলিতে প্রয়োগ করা হবে। এটির সাথে খুব মিলbody {font-family: ....}
আজাক্সস্টার 14

32

দেশীয় 0.56.0+ প্রতিক্রিয়া জানানোর জন্য প্রথমে ডিফল্টপ্রোপগুলি সংজ্ঞায়িত করা হয়েছে কিনা তা পরীক্ষা করে দেখুন:

Text.defaultProps = Text.defaultProps || {}

পরে যুক্ত:

Text.defaultProps.style =  { fontFamily: 'some_font' }

অ্যাপ.জেএস ফাইল (বা আপনার কাছে থাকা কোনও মূল উপাদান) এর কনস্ট্রাক্টারে উপরেরটি যুক্ত করুন।

শৈলীতে ওভাররাইড করার জন্য আপনি একটি শৈলী অবজেক্ট তৈরি করতে এবং এটি ছড়িয়ে দিতে পারেন তবে আপনার অতিরিক্ত শৈলী যুক্ত করুন (উদাঃ { ...baseStyle, fontSize: 16 })


4
হয়তো defaultPropsযখন উপস্থিত করেনি সব অন্যান্য উত্তর লেখা হয়েছে কিন্তু এই ভাবে এখন এটা করতে হবে বলে মনে হচ্ছে।
ফ্রিল করুন

4
দুর্ভাগ্যক্রমে, আমরা যদি কিছু styleবিশেষ Textউপাদানগুলির শৈলীগুলি
ঝাপটানোর জন্য প্রপকে

সত্য তবে আপনি এটির চারপাশে কাজ করতে পারেন, একটি অবজেক্ট হিসাবে সাধারণ শৈলী তৈরি করুন এবং যখনই আপনি কিছু কাস্টম ফন্ট চান তখন কেবল সেই উপাদানটিকে এমন একটি অ্যারে পাস করুন যা আপনার অবজেক্টটি + আপনার নিউ স্টাইলঅবজেক্ট @ আমেরজিলা
এজেএ

4
সেখানে একটি সমস্যা আছে। তারপরে যদি কেউ styleটেক্সট উপাদানটিতে প্রপ সংজ্ঞা দেয় তবে ডিফল্ট ফন্টটি প্রতিস্থাপন করতে চলেছে।
ব্রোদা নোয়েল

4
এটি 2019 এবং এটি পুরোপুরি কাজ করছে। কেবল অ্যান্ড্রয়েডে মনে রাখবেন আপনি ফাইলের নামে "-" ব্যবহার করতে পারবেন না। আপনার ফন্ট ফাইলের নামগুলি font_name.ttf এর মতো কিছু সংজ্ঞায়িত করুন।
এমআরএসফারি

24

আপনি পাঠ্য ব্যবহার করে আপনার যে কোনও উপাদানতে এটি যোগ করে পাঠ্য আচরণকে ওভাররাইড করতে পারেন:

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]
    });
};

সম্পাদনা করুন: যেহেতু দেশীয় 0.56 প্রতিক্রিয়া দেখাচ্ছেন, Text.prototypeআর কাজ করছে না। আপনাকে এগুলি সরিয়ে ফেলতে হবে .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]
    });
};

4
এটি একটি দুর্দান্ত সমাধান তবে আপনাকে পরিবর্তন করতে হবে: [মূল.প্রপস.স্টাইল, {রঙ: 'লাল', ফন্টফ্যামিলি: 'এরিয়াল'}] -> [{রঙ: 'লাল', ফন্টফ্যামিলি: 'আড়িয়াল'}, উত্স। প্রোপস.স্টাইল] অন্যথায় আপনি উপাদানটিতে সেট করা কাস্টম স্টাইলটি ওভাররাইড করবেন
আইকোনিস সিমোন

4
সেরা কাজ করেছেন। Text.prototype.render আর কাজ করে না, Text.render করে!
কীরা

4
আইকনগুলি উত্তরাধিকার সূত্রে কীভাবে এড়ানো যায়?
ভেঙ্কট 10

4
আমি ফন্টফ্যামিলি সেট করার জন্য @ আইকনিস সিমোন সেরা পদ্ধতির সাথে একমত এবং কাস্টম শৈলীর ওভাররাইড না করার বিষয়ে নিশ্চিত হতে
ডিসিজিআই

4
এটি যাওয়ার উপায়
উইটালো বেনিসিও

14

প্রতিক্রিয়া-নেটিভ ০.০6 সহ, উপরের পরিবর্তনের উপরের পদ্ধতিটি Text.prototype.renderআর কাজ করে না, সুতরাং আপনাকে নিজের উপাদান ব্যবহার করতে হবে, যা এক লাইনে করা যেতে পারে!

MyText.js

export default props => <Text {...props} style={[{fontFamily: 'Helvetica'}, props.style]}>{props.children}</Text>

আরেকটি কম্পোনেন্ট.জেএস

import Text from './MyText';

...
<Text>This will show in default font.</Text>
...

@ ফ্যানসি জোন এটি এখন হুকস এবং সহ useRefreactjs.org/docs/hooks-reference.html#useref
ক্রিস্টোফার রিড

11

আপনার মূল Appউপাদানটিতে এই ফাংশনটি যুক্ত করুন এবং তারপরে এই নির্দেশাবলী ব্যবহার করে আপনার ফন্ট যুক্ত করার পরে এটি আপনার নির্মাণকারীর কাছ থেকে চালান। https://medium.com/react-native-training/react-native-custom-fouts-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;
            }
        };
    }
}

এটি হ'ল আমি যা খুঁজছিলাম, আরও কিছু ইনস্টল করতে চাইনি।
zevy_boy

যদি আমার অ্যাপ.জেএসগুলি মূলত সমন্বিত থাকে const App = StackNavigator({...})এবং export default Appআমি এই কোডটি ঠিক কোথায় রাখব কারণ আমি মনে করি না যে আমি এখানে কোনও নির্মাণকারী ব্যবহার করতে পারি?
kojow7

: আমি এখানে আমার নিজের প্রশ্নের যুক্ত করেছেন stackoverflow.com/questions/50081042/...
kojow7

কম্পোনেন্টডিডমাউন্টের উপর কেন কনস্ট্রাক্টর?
ভয়ঙ্কর বার

2

এই থ্রেডে দুর্দান্ত দেরি হলেও এখানে যায়।

টিএলডিআর; আপনার নিম্নলিখিত ব্লক যুক্ত করুনAppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

 ....
    // HERE: replace "Verlag" with your font
  [[UILabel appearance] setFont:[UIFont fontWithName:@"Verlag" size:17.0]];
  ....
}

পুরো প্রবাহের ওয়াকথ্রু।

আপনি react-native-global-propsএইভাবে কোনও প্লাগইন ব্যবহারের বাইরে কিছু উপায় করতে পারেন সুতরাং ধাপে ধাপে আপনাকে হাঁটতে পারে।

প্ল্যাটফর্মগুলিতে ফন্ট যুক্ত করা হচ্ছে।

আইওএস প্রকল্পে ফন্টটি কীভাবে যুক্ত করা যায়

প্রথমে আমাদের সম্পদের জন্য একটি অবস্থান তৈরি করা যাক। আসুন নীচের ডিরেক্টরিটি আমাদের রুটে তৈরি করুন।

`` `

ios/
static/
       fonts/

`` `

এখন আসুন আমাদের প্যাকেজ.জসনে একটি "রিএ্যাক্ট নেটিভ" এনপিএম যুক্ত করুন

  "rnpm": {
    "static": [
   "./static/fonts/"
    ]
  }

এখন আমরা আমাদের দেশীয় অ্যাপ্লিকেশনগুলিতে আমাদের সম্পদ যুক্ত করতে "প্রতিক্রিয়া-নেটিভ লিঙ্ক" চালাতে পারি।

যাচাই বা ম্যানুয়ালি করছেন।

প্রকল্পগুলিতে এটি আপনার ফন্টের নাম যুক্ত করা উচিত .plist (ভিএস কোড ব্যবহারকারীদের code ios/*/Info.plistনিশ্চিত করার জন্য চালিত হয়)

এখানে ধরে Verlagনেওয়া যাক আপনি যে ফন্টটি যুক্ত করেছেন এটি এটির মতো দেখতে হবে:

     <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>

এখন আপনি সেগুলি ম্যাপ করেছেন, এখন আসুন নিশ্চিত হয়ে নিন যে তারা প্রকৃতপক্ষে সেখানে রয়েছে এবং বোঝা হচ্ছে (এটি আপনি নিজে নিজে এটি করতে চান)।

যান "Build Phase" > "Copy Bundler Resource", যদি এটি কাজ না করে তবে আপনি এখানে তাদের ম্যানুয়ালি যোগ করবেন।

1_uuz0__3kx2vvguz37bhvya

হরফের নাম পান (এক্সকোড দ্বারা স্বীকৃত)

প্রথমে আপনার এক্সকোড লগগুলি খুলুন:

এক্সএক্সএক্সএক্স

তারপরে আপনি AppDelegate.mফন্ট এবং ফন্ট পরিবারের নাম লগ করতে আপনার নিচের ব্লকটি যুক্ত করতে পারেন ।

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    .....


  for (NSString* family in [UIFont familyNames])
  {
    NSLog(@"%@", family);
    for (NSString* name in [UIFont fontNamesForFamilyName: family])
    {
      NSLog(@" %@", name);
    }
  }

  ...
}

একবার চালানোর পরে আপনার ফন্টগুলি সঠিকভাবে লোড করা সন্ধান করা উচিত, আমরা এখানে আমাদের মতো লগগুলিতে দেখতে পেলাম:

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

সুতরাং এখন আমরা জানি যে এটি Verlagপরিবারের বোঝা এবং এটি পরিবারের অভ্যন্তরে হরফ

  • Verlag-Book
  • Verlag-BlackItalic
  • Verlag-BoldItalic
  • Verlag-XLight
  • Verlag-Bold
  • Verlag-Black
  • Verlag-XLightItalic
  • Verlag-LightItalic
  • Verlag-BookItalic
  • Verlag-Light

এগুলি হ'ল কেস সংবেদনশীল নাম আমরা আমাদের ফন্ট পরিবারে ব্যবহার করতে পারি আমরা আমাদের প্রতিক্রিয়া নেটিভ অ্যাপ্লিকেশনটিতে ব্যবহার করতে পারি।

এখনই ডিফল্ট ফন্ট সেট করেছে।

তারপরে AppDelegate.mএই লাইনের সাথে আপনার ফন্টের পরিবারের নাম যুক্ত করতে একটি ডিফল্ট ফন্ট সেট করতে

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

 ....
    // ADD THIS LINE (replace "Verlag" with your font)

  [[UILabel appearance] setFont:[UIFont fontWithName:@"Verlag" size:17.0]];
  ....
}

সম্পন্ন.


সেরা পদ্ধতির, কিন্তু কাজ করছে না, আরএন 0.57 এর লাস্ট আপডেটের সাথে সম্পর্কিত কিছু?
ব্যবহারকারী 2976753

1

এটি আমার পক্ষে কাজ করে: প্রতিক্রিয়া নেটিভে কাস্টম ফন্ট যুক্ত করুন

আপনার ফন্টগুলি ডাউনলোড করুন এবং সেগুলি সম্পদ / ফন্ট ফোল্ডারে রাখুন, প্যাকেজ.জসনে এই লাইনটি যুক্ত করুন

 "rnpm": {
"assets": ["assets/fonts/Sarpanch"]}

তারপরে টার্মিনালটি খুলুন এবং এই আদেশটি চালান: দেশীয় লিঙ্কটি প্রতিক্রিয়া করুন

এখন আপনার যেতে ভাল। আরও বিস্তারিত পদক্ষেপের জন্য। উল্লিখিত লিঙ্কটি দেখুন



আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.