وقت شمردن جوجه‌هاست!

خب آخر پاییز شد و قراره جوجه‌هام رو بشمرم. کاری که دیدم مسعود فاطمی کرده و به نظرم جالب اومد و تصمیم گرفتم که من هم انجام بدم.

من همیشه نسبت به پاییز حس خوبی داشتم. برای منی که از گرما متنفره و مثل خون‌آشام از آفتاب و روشنایی روز فراری، پاییز یعنی بهشت. فصلی که توش روزها کوتاه میشه و هوا خنک. همه اینها رو بذارید کنار ریزش برگها و زیبایی‌های طبیعی این فصل. همینا کافیه که پاییز برای من بهترین فصل باشه.

اما امسال نبود. نه تنها بهترین نبود، که شاید بدترین بود. اتفاقات بدی برام افتاد و عملا درجا زدم. از نظر زندگی شخصی روزهای بدی رو پشت سر گذاشتم و همین روزهای بد باعث شد منی که فری‌لنسرم تمام برنامه‌ریزی‌هام به هم بریزه و زندگی کاریم هم از ریل خارج شه. وقتی که فری‌لنسری، باید خیلی مراقب خودت و زندگیت باشی. چون هر تنشی باعث میشه که دیگه نتونی خودت رو پای کار بشونی و تو مدیریت شخصیت حسابی دچار مشکل بشی. شاید اگه فری‌لنسر نبودم و یه مدیر باهوش داشتم، میتونست من رو به ریل برگردونه،‌ اما من تو اون شرایط خودم تنها بودم. خودم باید خودم رو روبه‌راه میکردم. اتفاقی که بعد از چند هفته سعی، بالاخره تونستم انجامش بدم.

اما مهم اینه که اون روزها گذشتند و من ازشون کلی تجربه کسب کردم. الان آماده‌ام تا یه فصل جدید رو شروع کنم. فصلی که آخرین فصل ساله و اولین فصل شروع یه کار جدید برای من.

تصمیم گرفتم که زمینه مطالعاتیمو تغییر بدم و علاوه بر برنامه‌نویسی موبایل، تو یه زمینه جدید هم به طور جدی وقت بذارم و کار کنم. البته هنوز راه درازی رو پیش رو دارم ولی جهت ثبت در تاریخ امشب رو شب شروع فعالیتم اعلام میکنم. البته ترجیح میدم فعلا در موردش حرف نزنم. هر وقت به حدی رسیدم که حرفی برای گفتن داشته باشم در موردش پست وبلاگی مینویسم و توضیح میدم.

امیدوارم این زمستون هم برای من و هم برای شما فصل خوبی باشه.

نظر بدید

گزارش من از بازدید الکامپ تو یه روز سرد و برفی

از دیروز تصمیم گرفته بودم که امروز ظهر سری به الکامپ بزنم. از قبل خبردار بودم که استارت‌آپها هم قراره توی این الکامپ حضور داشته باشند و این به این معنی بود که این الکامپ قراره رنگ و بوی متفاوتی داشته باشه.  حداقل خیلی بهتر از دفعات قبل که فقط ISPها و چند تا شرکت محدود تو این نمایشگاه حضور داشتند و نمایشگاه تکراری، خسته‌کننده و بدون هیچ شور و شوقی برگزار میشد.

elecomp2

از اونجایی که دو روزه تهران هوای وحشتناکی داره، تصمیم گرفتم با وسایل حمل و نقل عمومی خودم رو به نمایشگاه برسونم که حداقل نمایشگاه رفتن من هوا رو کثیف‌تر نکنه. این بود که خودم رو به یکی از ایستگاه‌های بی‌آر‌تی بزرگراه چمران رسوندم و درست کنار نمایشگاه پیاده شدم.

نمایشگاه مثل همیشه ورودیه داشت. یه بلیتی که با ۲هزار تومن میشد خریدش. اما مثل همیشه دانشجوها میتونستند رایگان وارد شن. من هم که همونطور که میدونید یک دانشجوی مادام‌العمرم و کارتی که از سال ۸۹ تو جیبمه رو نشون مسئولی که بلیت رو چک میکرد دادم و وارد نمایشگاه شدم.

ادامه این نوشته

۴ نظر

گپ و گفت من با روزنامه همشهری

دو سه ماه پیش بود که با روزنامه همشهری گپ و گفتی در مورد بازار اپلیکیشنهای موبایل و پتانسیلی که تو این بازار وجود داره داشتم. دوست خوبم موژان اردانی زحمت کشید و این گپ و گفت رو در قالب یه مقاله تو روزنامه همشهری منتشر کرد. خیلی وقت بود که میخواستم این مصاحبه رو اینجا هم بذارم. اما یا یادم میرفت و یا تنبلی اجازه نمیداد. به هر حال الان که دیدم یه سایت دیگه هم منتشرش کرده به این فکر افتادم که من هم تو وبلاگم منتشر کنم تا اگه کسی علاقمند بود بخونه.

 

روزنامه همشهری– موژان اردانی- همین حالا هر جا که هستید نگاهی به اطرافتان بیندازید، مثلا در واگن مترو، اتوبوس، محل کارتان، در خانه یا هزار و یک جا که در این لحظه می‌توانید در آن باشید.

حالا توجه کنید که چند نفر در این محیط سرگرم گوشی‌های هوشمند خود هستند؟ مطمئنا تعدادشان کم نیست. چندسالی می‌شود که استفاده از این گوشی‌ها در کشورمان همه گیر شده. با ظهور این نسل از تلفن‌های همراه، تولید اپلیکیشن‌های موبایل هم در ایران روز‌به روز افزایش پیدا کرده تا جایی که می‌شنویم به رقمی حدود ۲۵ هزار اپلیکیشن رسیده‌است. این بازار که منبعی برای کسب درآمد بسیاری از افراد شده در حال پیشرفت است و سود فروش بعضی از اپلیکیشن‌ها به اندازه‌ای است که می‌تواند هر سرمایه‌گذاری را وسوسه کند. اما دقت کنید که این بازار هم مثل کسب و کارهای دیگر فرصت‌ها و تهدید‌هایی دارد که لازم است در مورد آنها بیشتر بدانیم. ما برای گرفتن اطلاعات در این زمینه گپی با آرش خوئینی و سروش جاودان زده‌ایم که نزدیک به ۳سال است در این حیطه مشغول فعالیت هستند.

ادامه این نوشته

۳ نظر

تفاوت فری‌لنسری و کارمندی

فری‌لنسری دنیای خاص خودشو داره. دنیایی که تو وبلاگها و در کل وب فارسی خیلی راجع بهش صحبت نمیشه و اگرم میشه صحبتها قابل لمس نیستند. چند هفته پیش بود که تصمیم گرفتم به عنوان کسی که هم دنیای کارمندی و هم فری‌لنسری رو تجربه کرده (و در حال حاضر انتخابش فری‌لنسریه) کمی در مورد تفاوت این دو دنیا و این دو روش کار بنویسم. نوشته‌ام رو برای hive.ir نوشتم و اونجا منتشر شد. برای همین اینجا کمیش رو مینویسم و پیشنهاد میکنم اگر علاقمند بودید باقی مطلب رو در جایی که برای اولین بار منتشر کردم یعنی hive.ir بخونید: 

ما برنامه‌نویسها این شانس رو داریم که از بین روش‌های مختلف کار یکی رو انتخاب کنیم. میتونیم فری‌لنسر باشیم، میتونیم کارمند باشیم و تو شرکت حضور داشته باشیم، میتونیم کارمند باشیم و دورکاری کنیم، و احتمالا مدل های خلاقانه‌تر همکاری. این که کدوم یکی از این روشهای کاری مناسب ماست ممکنه یه سوال خیلی شخصی باشه که با توجه به روحیه هر کسی جواب متفاوتی داشته باشه. اما به طور کلی هر کدوم این مدل کارها مزایا و معایب خودشون رو دارند که مطرح کردنشون میتونه بهمون کمک کنه که روش مناسب خودمون رو انتخاب کنیم. من اینجا سعی میکنم چند تا از مهمترین تفاوتها رو توضیح بدم.

ادامه این نوشته

نظر بدید

به مناسبت ۴۱مین ساگرد Lucy

امروز که گذشت چهل و یکمین سالگرد پیدا شدن Lucy بود. سالگردی که از نظر گوگل انقدر مهم بود تا لوگوش رو به افتخار لوسی تغییر بده.

lucyلوسی که تصویر شبیه‌سازی شده‌اش از روی اسکلتش چیزی شبیه به عکس بالاست چیزی حدود ۳.۲ میلیون سال پیش روی زمین زندگی میکرده. اهمیت لوسی از این بابته که تا قبل از  سال ۱۹۷۳ که پیدا شد دانشمندا نمیدونستند موجودی به این شکل هم روی زمین زندگی میکرده. موجودی که ساختار استخونهاش نشون میده روی دو پا راه میرفته و قد نسبتا کوتاهی داشته. حدود ۱.۱ متر.

فسیل لوسی برعکس خیلی از فسیل‌های دیگه نسبتا کامل بود و حدود ۴۰درصد از تمام بدنش پیدا شد. همین باعث شد دانشمندا برای بازسازی تصویرش خیلی درگیر حدس و گمان نشدن و بتونند تصویر درستی از لوسی رو شبیه‌ سازی کنند.

چیزی که شواهد نشون میده اینه که لوسی احتمالا یکی از اجداد ما بوده. کسی که شاید اگه ۳.۲میلیون سال دیرتر به دنیا میومد شانس این رو داشت که یه زندگی متمدن رو تجربه کنه!

۳ نظر

پافشاری؛ شجاعت یا حماقت؟

همیشه معتقدم که تو شرایط خاص، پذیرش شکست به اندازه‌ی جنگیدن و تلاش کردن و مبارزه کردن برای پیروزی مهمه. قبول شکست تو موقعیت مناسب و درست، نه تنها نشونه‌ی ضعف نیست، که نشونه‌ی برخورد هوشمندانه با شرایطه. همونطور که تو جنگ تن به تن گاهی عقب‌نشینی هوشمندانه‌ترین و بهترین کاره، تو دنیای ما هم گاهی عقب‌نشینی از هدف، از رابطه، از رفاقت و …. هوشمندانه‌ترین کاریه که میتونیم بکنیم.

البته منظور من از عقب‌نشینی لزوما دست کشیدن از هدف به طور کلی نیست. عقب نشینی میتونه به این مفهوم باشه که تو یه فضای آروم و دور از هیاهوی نبرد، به خودت این فرصت رو بدی که به همه چیز بهتر فکر کنی تا شروع قوی‌تری داشته باشی. به چیزایی مثل: کجای کار من اشتباه بود که نتونستم موفق شم؟ شاید به طور کلی من به موضوع غلط نگاه میکردم، اصلا درک درستی از واقعیت داشتم؟ برای اینکه موفق شم بهتره چطور پیش برم؟ و …

همونطور که یه فرمانده جنگی بعد از عقب نشینی دوباره جذب نیرو میکنه و این بار با استراتژی متفاوتی به نبرد میره،‌ ما هم میتونیم با سنجش اوضاع و تغییر استراتژیمون یک شروع دوباره داشته باشیم.

اما لزوما هم قرار نیست اینجوری باشه. گاهی عقب‌نشینی واقعا باید به معنی دست کشیدن از هدف باشه. قرار نیست حتما و همیشه راهی برای رسیدن به هدف وجود داشته باشه. گاهی خیلی چیزها از کنترل ما خارجند. چیزهایی مثل شرایط محیطی، امکانات موجود، استعدادهای ما، نحوه زندگیمون تا الان و … چیزهایی هستند که ما کنترلی روشون نداریم و میتونند عوامل خیلی مهمی باشند که باعث شند ما به هدف نرسیم. این جاست که باید بپذیریم ما برای این هدف ساخته نشدیم و بهتره کوتاه بیایم!

البته ممکنه این حرف‌ها خیلی خوشایند ما نباشه. ما عادت کردیم تو همایشهایی شرکت کنیم که توشون مدام از زندگی آدمایی بشنویم که صدها بار برای رسیدن به هدفشون تلاش کردند تا درنهایت پیروز شدند. داستانهایی که اگرچه شنیدنشون جذابه و بهمون احساس قدرت میده، اما هیچ پایه و اساسی نداره و از نظر منطقی خیلی وقتها واقعا عملی نیست!

در نهایت من معتقدم فرق بین شجاعت و حماقت به اندازه یک تار مو باریکه. این ماییم که باید هوشمندانه همیشه این مرز رو تشخیص بدیم.

نظر بدید

به نظرت آدم موفق کیه؟

خیلی وقت پیش نبود که تو ماشین با دوستام شروع به بحث راجع به تقریبا هر چیزی کردیم. تو راه برگشت از انزلی بودیم و برای  اینکه مسیر رو کوتاه کنیم شروع کردیم در مورد مسائل مختلف گپ زدن. یکی از سوالایی که اونجا از من پرسیده شد این بود: به نظرت آدم موفق کیه؟ 

اون موقع بود که تازه فهمیدم که این سوال چقدر مهمه و چقدر بده که تا الان با دقت بهش فکر نکرده بودم. اون موقع سعی کردم با یکی دو دقیقه فکر به یک جواب سریع برسم. روشم هم حذف گزینه بود. خب من مطمئن بودم استیو جابز به نظرم موفق نیست. بیل گیتس هم همینطور. سومین نفری که به ذهنم رسیدن ریچارد استالمن بود. استالمن موفقه. پس جواب من به این سوال شد ریچارد استالمن.

اما بعد از این بحث نسبتا کوتاه با دوستام بود که تازه بحث من با خودم شروع شد. واقعا آدم موفق کیه؟ چرا من تا الان به این فکر نکرده بودم؟ اونم همچین سوالی که شاید یکی از مهمترین سوال‌هایی باشه که هر آدمی باید تو اوایل دهه بیست بهش جواب بده.

اشتباهی که خیلی از ما میکنیم اینه که اجازه میدیم الگوی موفقیت رو آدمای مختلف، رسانه‌ها و همایش‌ها برامون ترسیم کنند. از نظر پدر مادرم من موقعی موفقم که یک درآمد ثابت و ماهیانه نسبتا خوب و بیمه و ساعت کاری صبح تا عصر داشته باشم. از نظر فامیل احتمالا من وقتی موفقم که بتونم ماشین مدل بالا داشته باشم. از نظر دوستام و همکارام من وقتی موفقم که یه پروژه بزرگ انجام بدم. از نظر تعداد زیادی از آشناها و همکارها و همکلاسی‌های قدیم هم احتمالا وقتی موفقم که بتونم که یه کسب و کار نسبتا موفق راه اندازی کنم. 

من اگه به هرکدوم از معیارهای موفقیتی که تو پاراگراف بالا لیست کردم برسم احتمالا یه دسته‌ای از من راضی میشن. هر کدومشون یه عده رو خوشحال میکنه و یه عده رو دلسرد. اما سوال واقعی اینه که کدومشون من رو خوشحال میکنه؟

سوال سختیه. اما تا وقتی جوابش رو ندونیم هر حرکتی ممکنه یه حرکت غلط باشه. من اگه ندونم مقصدم کجاست نمیدونم باید از کدوم جاده حرکت رو شروع کنم. اوضاع وقتی بدتر میشه که مقصد اشتباهی رو انتخاب کنم. اون موقع مسیری رو میرم که قطعا به خوشحالی منجر نمیشه و در عمل بخشی ار عمرم رو حروم کردم.

به نظرم برای اینکه بتونیم معیار موفقیت خودمون رو پیدا کنیم تو مرحله اول باید شجاع باشیم:

۱. شجاعت دست کشیدن از شرایط فعلی

این تکنیکیه که من خیلی بهش علاقه دارم. وقتی که گیجم و احساس خوبی از شیوه شب کردن روزهام ندارم از همه چیز دست میکشم. اگر کارمند باشم یه هفته مرخصی میگیرم یا استعفا میدم و سعی میکنم با تمام نیرو خودم رو از روزمرگی بکشم بیرون و به خودم بیکاری مطلق بدم. برای من هیچ چیزی اندازه بیکاری مطلق باعث نمیشه که بتونم افکارم رو جهت دهی کنم و به ذهنم نظم بدم. مزیت دیگه‌ی بیکاری مطلق اینه که باعث میشه ناخودآگاه برای پر کردن روزاتون اون کاری رو بکنید که بهش علاقه دارید. و اینجوری خودتون رو بهتر بشناسید.

۲. شجاعت نه گفتن

باید به مدلهای موفقیتی که بقیه برامون ترسیم کردند نه بگیم و این اصلا کار آسونی نیست. وقتی از یه کاری با شرایط خوب صرفا به این دلیل که خوشحال نیستید استعغا میدید باید هفته‌ها به آدمای مختلف جواب پس بدید. وقتی به یه نفر میگید مدیرعامل یه شرکت بودن چیزی نیست که من دنبالشم باید منتظر دیدن پوزخند و نگاه عاقل اندر سفیهش باشید.

۳. شجاعت پذیرفتن اشتباه رفتن راه تا به الان

من دوستای زیادی دارم که برای کاری که میکنند ساخته نشدند. ویژگی‌ای که تو تمام این دوستام مشترکه اینه که ترس از پذیرفتن شکست و شروع دوباره دارند. البته کار آسونی هم نیست. شجاعت زیادی لازمه که من قبول کنم مثلا ۶ سال گذشته راه اشتباهی رو میرفتم. راهی رو میرفتم که راه من نبوده. این یعنی باید قبول کنم که باید برگردم به جایی که ۶ سال پیش بودم و از ابتدا شروع کنم. کار خیلی سختیه. اما اگر اینبار راه درست انتخاب شه قطعا خوشحالی رو به همراه داره.

بعد از اینکه مطمئن شدیم به اندازه کافی شجاع هستیم، وقتشه که خودمون رو بشناسیم و بفهمیم چی خوشحالمون میکنه.

امیدوارم همه‌ی ما تو رسم مدل موفقیتمون موفق باشیم. فقط یادمون باشه که مهم نیست این مدل چجوریه و چه شکلیه. مهمترین نکته اینه که این مدل رو خودمون رسم کنیم. اگر تو کشورمون جو استارت‌آپ وجود داره و همه آدما دنبال کارآفرین شدن هستند،‌ دلیل نمیشه کارآفرینی من رو هم خوشحال کنه. اگر همه دوستای من به هر دلیل دنبال جور کردن پول و خرید یه ماشین مدل بالان،‌ دلیل نمیشه ماشین خوب داشتن من رو هم خوشحال کنه. اگر یه کار ثابت و امنیت شغلی چیزی که پدر و مادرم از من توقع دارند،‌ دلیل نمیشه این من رو خوشحال کنه. اجازه ندیم بقیه مدل خوشحال مارو ترسیم کنند. فقط همین 🙂

۶ نظر

آپدیت لیست با SwipeRefreshLayout

قبلا داشتن یه لیستی که بتونید با کشیدنش به پایین آپدیتش کنید کار خیلی راحتی نبود. مجبور بودید از کتابخونه‌هایی مثل SwipeToRefresh استفاده کنید و با مشکلات احتمالی سر و کله بزنید.

مدتیه که گوگل کلاس SwipeRefreshLayout رو معرفی کرده و با این کلاس پیاده‌سازی این مکانیزم رو برامون حسابی آسون کرده. با هم پیش میریم و تو دو قدم طرز استفاده از این کلاس رو میبینیم. برای داشتن SwipeRefreshView تنها کافیه کتابخونه support ورژن ۴ رو داشته باشید. این کتابخونه رو میتونید با اضافه کردن خط زیر به dependecyهای gradle، به پروژتون اضافه کنید:

dependencies {
  
    compile 'com.android.support:appcompat-v7:22.0.0'
}

 

خب فرض میکنیم که ما قبلا یک RecyclerView داشتیم که توش دیتایی رو از وب سرویس میگرفتیم و نشون میدادیم (در مورد RecyclerView اینجا نوشتم). حالا میخوایم کاری کنیم که کاربر بتونه با Swipe کردن این لیست،‌ اون رو آپدیت کنه و اطلاعات جدیدتر رو هم ببینه. برای اینکار لازمه RecyclerViewمون رو بندازیم داخل یک SwipeRefreshLayout. مثل این:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swipe"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/resyclerview"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"

            />

    </android.support.v4.widget.SwipeRefreshLayout>

</FrameLayout>

تقریبا تموم شد! باورتون میشه؟ الان اگر اپلیکیشن رو اجرا کنید میبینید که با پایین کشیدن لیست یک دایره به دور خودش میچرخه و منتظره لیست رو آپدیت کنه. شما تنها کاری که باید بکنید اینه که بگید بعد از اینکه لیست Swipe شد، چجوری باید آپدیت شه. این کار رو به شکل زیر انجام میدیم:

public class MyFragment extends Fragment {


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
       .
       .
       .
       .
       . 

        vSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                
                //Download data from net and update list 
                 vSwipeRefreshLayout.setRefreshing(false);

            }
        });

        return view;
    }


}

کار اصلی رو در onRefresh انجام میدیم. برای مثال میایم دیتایی رو از اینترنت دانلود میکنیم و لیست رو آپدیت میکنیم.

نظر بدید

۹ مهارت نرمی که برای موفقیت در رشته نرم‌افزار به آن نیاز دارید

علی نعمتی شهاب تو یکی از کارگاه‌هاش از مهارت‌های نرم و تاثیر زیادی که این مهارتها تو موفقیت ما میتونه بذاره صحبت کرد. قبل از این کارگاه هم من به این موضوع فکر کرده بودم و جزو دغدغه‌هام بود. اما صحبتهای نعمتی شهاب عزیز باعث شب که بتونم ذهنم رو منظم کنم و به جمع‌بندی برسم.

مهارتهای نرم رو هیچ کجا به ما یاد نمیدند و جایی از این مهارتها صحبت نمیشه. اگر دوستی بیاد و از من بپرسه که چجوری میتونه یه برنامه‌نویس باشه، احتمالا من بهش چند کتاب و چند سایت معرفی کنم و کمی از روندهای بهینه یادگیری براش بگم. اما هیچوقت نمیام بهش در مورد نحوه صحیح حرف زدن تو تیم یا روش حرفه‌ای نوشتن رزومه بگم.

علی نعمتی شهاب در وبلاگش مهارتهای نرم رو اینجوری تعریف میکنه:

در هر شغل و حرفه گروهی از مهارت‌های تخصصی وجود دارد که فرد متخصص لازم است آن‌ها را فرا بگیرد (مثلا: یک جوشکار باید جوشکاری با گاز آرگون را بلد باشد!) اما گروهی از مهارت‌ها هم وجود دارند که در هر شغلی و از آن‌ مهم‌تر در زندگی روزمره برای ما کاربرد دارند. این مهارت‌ها مهارت‌های عمومی شغل و زندگی محسوب می‌شوند. مهارت‌های دسته‌ی اول را مهارت‌های سخت و مهارت‌های دسته‌ی دوم را مهارت‌های نرم می‌نامند.

و در مطلبی دیگه، ۲۱  مهارت نرم رو لیست میکنه. من در این نوشته قصد دارم به ۹ مهارت نرمی اشاره کنم که شما برای موفقیت تو رشته نرم‌افزار بهشون نیاز دارید.

ادامه این نوشته

۱۲ نظر

تغییر فونت کل اپلکیشن اندروید به طور یکجا

اگر برنامه‌نویس اندروید باشید احتمالا میدونید که عوض کردن فونت تمام view ها کار مهمل و اعصاب خورد کنیه. روشهای مختلف عمدتا دردسر زیادی دارند و همشون طوریند که باید از ابتدای پروژه به فکر باشید، وگرنه مجبورید حسابی وقت تلف کنید. من اینجا میخوام روشی رو معرفی کنم که حتی بعد از اتمام پروژه هم بتونید با صرف دو دقیقه وقت فونت تمام اپلیکیشن رو عوض کنید. چجوری؟ اینجوری:

ابتدا یه کلاس به اسم FontsOverride بسازید و دقیقا به شکل زیر بنویسیدش:

import java.lang.reflect.Field;
import android.content.Context;
import android.graphics.Typeface;

public final class FontsOverride {

    public static void setDefaultFont(Context context,
            String staticTypefaceFieldName, String fontAssetName) {
        final Typeface regular = Typeface.createFromAsset(context.getAssets(),
                fontAssetName);
        replaceFont(staticTypefaceFieldName, regular);
    }

    protected static void replaceFont(String staticTypefaceFieldName,
            final Typeface newTypeface) {
        try {
            final Field staticField = Typeface.class
                    .getDeclaredField(staticTypefaceFieldName);
            staticField.setAccessible(true);
            staticField.set(null, newTypeface);
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}

 

 

حالا یه کلاس به اسم اسم اپلیکیشن میسازیم و به شکل زیر مینویسیم:

public final class Application extends android.app.Application {
    @Override
    public void onCreate() {
        super.onCreate();
        FontsOverride.setDefaultFont(this, "DEFAULT", "MyFontAsset.ttf");
        FontsOverride.setDefaultFont(this, "MONOSPACE", "MyFontAsset2.ttf");
        FontsOverride.setDefaultFont(this, "SERIF", "MyFontAsset3.ttf");
        FontsOverride.setDefaultFont(this, "SANS_SERIF", "MyFontAsset4.ttf");
    }
}

 

 

کار اصلی‌ای که در این کلاس انجام میدیم اینه که فونت رو برای چهار حالت default , monospace , serif , sans_serif تایید میکنیم. دقت کنید که هر کدوم از فونت‌هایی که تو این کلاس اسمشون رو نوشتیم باید دقیقا با همین اسم داخل فولدر assets وجود داشته باشه.

حالا داخل تگ application در manifest باید به android:name اسم کلاس Applicationی که نوشتم رو بدیم. برای مثال من که این کلاس رو داخل پکیج utils نوشتم این ویزگی رو به این شکل تغییر میدم:

<application
        android:name=".utils.Application"
        .
        .
        .
        .
        >

 

خب به آخرش رسیدیم. حالا تنها کاری که باید بکنیم اینه که تو styles مشخص کنیم که میخوایم از کدوم فونت استفاده کنیم. برای مثال من میخوام که اپلیکیشنم از فونت monospace استفاده کنه:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        
        <item name="android:typeface">monospace</item>
    </style>

 

خب به انتهای کار رسیدیم. از تعییر فونت به همین سادگی لذت ببرید.

در اندروید ۵.۰ (API 21) ممکنه که کمی مشکل داشته باشید. مشکل به این خاطره که این روش با تم android:Theme.Material.Light سازگار نیست. برای حل این مشکل از تم قبلی استفاده کنید:

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
   <item name="android:typeface">monospace</item>
</style>

البته در اندروید ۵.۱ این مشکل هم حل شد و این روش بدون نیاز به تغییر تم کار خواهد کرد.

۱۱ نظر
android application Google I/O HomeBrew ImageMagick Material Design mobile PogressBar RecyclerView splash TEDxKish ux آموزش اندروید الوین تافلر اندروید اپلیکیشن برنامه نویسی برنامه نویسی اندروید برنامه‌نویسی برنامه‌نویسی اندروید تداکس کیش تعمیر تغییر سایز عکس با ترمینال خلاصه کتاب دانش داده دانشگاه دانشگاه ایده‌آل دزد دیتا ساینس رشته مهندسی کامپیوتر ریکامندرسیستم سیستم‌های توصیه‌گر فری‌لنس لپتاپ متریال دیزاین معرفی کتاب موج سوم نوار پیشرفت همایش هوش مصنوعی ُجزیره کیش کار کسب و کار یادگیری عمیق یادگیری ماشین