samirsamiri 6 ارسال شده در ۱۸ اسفند ۱۳۹۴ گزارش اشتراک گذاری ارسال شده در ۱۸ اسفند ۱۳۹۴ سلام من از کتابخانه کالی گرافی استفاده کردم برای تغییر فونت کل برنامه ومشکلی ندارم فقط یه سوالی که دارم اینه که من تو بخش تنظیمات اومدم ودو سه تا فونت تعریف کردم و با اسپینر اون هارو تغییر میدم و در یک تکس ویو این تغییرات رو اعمال میکنم و با SharedPreferences اونو ذخیره کردم تا اینجا مشکلی نیست.... من اومدم و میخام فونت کل برنامه رو عوض کنم . تو کتابخونه کالی گرافی یک کلاس هست که فونت کل برنامه اونجا تعریف شده کدش هم این طوریه : [align=left] public void onCreate() { super.onCreate(); CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() .setDefaultFontPath(font) .setFontAttrId(R.attr.fontPath) .build() ); } [align=right]فونت قرمز رنگ آدرس فونت هست. حالا میخام فونت کل برنامه رو از تنظیمات تغییر بدم من اومدم و با اضافه کردن کد زیر خواستم تا آدرس فونت رو تغییر بدم.یعنی کاربر از یک اسپینر در تنظیمات فونت رو انتخاب میکنه و پس از انتخاب کل فونت برنامه تغییر پیداکنه. [align=left] public void onCreate() { super.onCreate(); string font; SharedPreferences shared = getSharedPreferences("Shared", MODE_PRIVATE); SharedPreferences.Editor editor = shared.edit(); int fontNum = shared.getInt("FontNum",0); switch (fontNum){ case 0: font="font1"; break; case 1: font="font2"; break; default: font="font1"; break; } CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() .setDefaultFontPath(font) .setFontAttrId(R.attr.fontPath) .build() ); } [align=right]تو کد بالا من اومدم و اندیس اسپینر رو گرفتم و ذخیره کردم و به این کلاس گفتم که اون فونت رو اجرا کنه با دستو سوییچ. مشکل اینه که فونت تغییر نمیکنه نمیدونم چیکار کنم ... کسی هست که از این کتابخونه استفاده کرده باشه وبتونه چند فونت تو برنامه بزاره ؟؟؟؟ لطفا کمک کنید.. ممنون[/align] [/align] [/align] [/align] نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
Mostafa Nasiri 16 ارسال شده در ۱۸ اسفند ۱۳۹۴ گزارش اشتراک گذاری ارسال شده در ۱۸ اسفند ۱۳۹۴ شما نباید دوباره Config کتابخونه رو تغییر بدی و فقط یک بار باید این کار انجام بشه توی همون کلاسی که ساختی برای تغییر فونت یه ویو با جاوا از متد setTypeface استفاده کن (فونت های مورد نظرت باید تو فولدر assets باشن) مثال: TextView text = new TextView(this); text.setTypeface(Typeface.createFromAsset(getAssets(), "default.ttf")); نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
samirsamiri 6 ارسال شده در ۱۸ اسفند ۱۳۹۴ مالک گزارش اشتراک گذاری ارسال شده در ۱۸ اسفند ۱۳۹۴ ممنون آره فهمیدم پس نمیشه از کتابخونه کالی گرافی استفاده کرد و دو فونت رو استفاده کرد؟ اگه میشد خیلی راحت بود !! حالا شما راه حل ساده تر (از لحاظ کد نویسی) ندارین؟ راه حل شما خیلی کد میخاد باید واسه همه ی متن هام این کد رو اضافه کنم!! بقیه برنامه ها واسه تغییر فونت از چه راه حلی استفاده میکنن؟؟ بازم ممنون. نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
Mostafa Nasiri 16 ارسال شده در ۱۸ اسفند ۱۳۹۴ گزارش اشتراک گذاری ارسال شده در ۱۸ اسفند ۱۳۹۴ من نگفتم نمیشه استفاده کرد از کالیگرافی. شما فونتی که بیشتر از همه توی برنامتون استفاده میشه رو به کالیگرافی بدین بعد موارد استثنا رو مثل کدی که گذاشتم فونتش رو تغییر بدید. من خودم اینجوری از کالیگرافی استفاده می کنم. توی کدهای xml هم می تونید برای عناصر مورد نظرتون با مشخصه fontpath فونت مشخص کنید. اطلاعات بیشتر: Calligraphy راه حلی برای تغییر فونت در اندروید - Hive | مجله طراحی و برنامهنویسی نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
samirsamiri 6 ارسال شده در ۱۸ اسفند ۱۳۹۴ مالک گزارش اشتراک گذاری ارسال شده در ۱۸ اسفند ۱۳۹۴ بازم ممنون منظور من تغییر فونت کل برنامه توسط کاربر هست مثل سایر برنامه ها تو قسمت تنظیمات برنامه از چه کدی استفاده کنم تا فونت تغییر کنه؟ البته به نظرم میشه داخل یک shared pa... ذخیره کردش و تو بقیه اکتیویتی ها ازش استفاده کرد ولی این کار کد های زیادی میخاد برای هر متن و تکس ویو و ادیت تکس و ... باید یک بار ست کنم که خیلی کد میشه... نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
Mostafa Nasiri 16 ارسال شده در ۱۸ اسفند ۱۳۹۴ گزارش اشتراک گذاری ارسال شده در ۱۸ اسفند ۱۳۹۴ پس شما میخوای که کاربر بتونه فونتی که شما برای کالیگرافی تنظیم کردی رو در زمان اجرا عوض کنه؟ بعید می دونم این کار شدنی باشه. حداقل من راه حلی براش پیدا نکردم. بله اگر بخوای فونت رو از shared pref بگیری باید دونه دونه با setTypeface فونت ها رو تغییر بدی. یه کد جالب پیدا کردم که یه متده که دونه دونه عناصر اکتیویتی مورد نظر رو بررسی می کنه و فونتشون رو تغییر میده (اگه قابلیت تغییر فونت داشته باشن): public void setFont(ViewGroup group, Typeface font) { int count = group.getChildCount(); View v; for (int i = 0; i < count; i++) { v = group.getChildAt(i); if (v instanceof TextView || v instanceof EditText || v instanceof Button) { ((TextView) v).setTypeface(font); } else if (v instanceof ViewGroup) setFont((ViewGroup) v, font); } } توی کد اگه دقت کنی میبینی که دستور شرطی بررسی میکنه اگر View مورد نظر یه TextView یا EditText یا Button بود فونت رو تغییر میده. نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
samirsamiri 6 ارسال شده در ۱۸ اسفند ۱۳۹۴ مالک گزارش اشتراک گذاری ارسال شده در ۱۸ اسفند ۱۳۹۴ آره منظورم همینه که کاربر تغییر بده . ممنون این کد رو چطوری استفاده کنم و اون ViewGroup group به عنوان آرگیوم دادن چیه ؟؟ از کجا براش بفرستم ؟؟ ممنون نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
Mostafa Nasiri 16 ارسال شده در ۱۸ اسفند ۱۳۹۴ گزارش اشتراک گذاری ارسال شده در ۱۸ اسفند ۱۳۹۴ اون ویوگروپ در واقع ویو ریشه است که عناصر لی اوت شما توش قرار داره. مثلا اگه یه لی اوت داشته باشین که توش یه LinearLayout باشه و عناصرتون توی اون LinearLayout باشن، برای استفاده از این متد باید به LinearLayout تون یه آیدی بدین بعد اون رو توی کد جاوا تعریف کنید. مثلا: LinearLayout myLl = (LinearLayout) findViewById(R.id.my_layout); بعد این myLl رو به عنوان آرگومان اول اون متدی که گذاشتم بهش میدین. اون متد رو هم می تونید توی دونه دونه اکتیویتی هاتون کپی کنید یا یه کلاس بسازید و این متد رو توش به صورت استاتیک تعریف کنید و در اکتیویتی هاتون فراخونیش کنید. (این کار بهتره چون کد اضافه تولید نمیشه) نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
samirsamiri 6 ارسال شده در ۱۸ اسفند ۱۳۹۴ مالک گزارش اشتراک گذاری ارسال شده در ۱۸ اسفند ۱۳۹۴ ممنون و سپاس کارکرد . . .متشکر نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
Mostafa Nasiri 16 ارسال شده در ۱۸ اسفند ۱۳۹۴ گزارش اشتراک گذاری ارسال شده در ۱۸ اسفند ۱۳۹۴ فقط یه نکته اگه لی اوتتون خیلی پیچیده و شلوغ باشه این متد ممکنه سرعت برنامه رو بیاره پایین. البته احتمالش خیلی کمه که این اتفاق بیفته و نگرانش نباشید. نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
alirezax2 0 ارسال شده در ۱۱ اردیبهشت ۱۳۹۵ گزارش اشتراک گذاری ارسال شده در ۱۱ اردیبهشت ۱۳۹۵ سلام .... من از این کد استفاده کردم اما خطا میده layout اصلی من یک RelativeLayout هست. اون رو با آیدی main تعریف کردم و جای group گذاشتم font رو هم قبلا تعریف کردم ... اما بازم خطا میده کجا اشتباه کردم؟ [shcode=java] public void setFont(ViewGroup main, Typeface font) { int count = main.getChildCount(); View v; for (int i = 0; i < count; i++) { v = main.getChildAt(i); if (v instanceof TextView ) { ((TextView) v).setTypeface(font); } else if (v instanceof ViewGroup) setFont((ViewGroup) v, font); } } [/shcode] نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
samirsamiri 6 ارسال شده در ۱۱ اردیبهشت ۱۳۹۵ مالک گزارش اشتراک گذاری ارسال شده در ۱۱ اردیبهشت ۱۳۹۵ چه خطایی ؟؟ نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
alirezax2 0 ارسال شده در ۱۱ اردیبهشت ۱۳۹۵ گزارش اشتراک گذاری ارسال شده در ۱۱ اردیبهشت ۱۳۹۵ چه خطایی ؟؟ عکسو پیوست کردم نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
samirsamiri 6 ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ مالک گزارش اشتراک گذاری ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ کلا راه رو اشتباه میری عزیز این یک متد هست و نمیشه داخل if بزاری باید خارج از متد on create اکتیویتی این متد رو بنویسی و سپس داخل if اون رو فراخونی کنی .. نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
alirezax2 0 ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ گزارش اشتراک گذاری ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ کلا راه رو اشتباه میری عزیز این یک متد هست و نمیشه داخل if بزاری باید خارج از متد on create اکتیویتی این متد رو بنویسی و سپس داخل if اون رو فراخونی کنی .. ممنون ... خارج متد on create گذاشتم خطا رفع شد ... فقط چطور در if فراخونیش کنم؟ نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
samirsamiri 6 ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ مالک گزارش اشتراک گذاری ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ خواهش میکنم . این طوری ::: setFont(ViewGroup main, Typeface font) حالا هر جا این متد روفراخونی کنی اون عملیات اجرا میشه متناسب با اون ویو و فونت ارسالی . نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
alirezax2 0 ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ گزارش اشتراک گذاری ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ خواهش میکنم . این طوری ::: setFont(ViewGroup main, Typeface font) حالا هر جا این متد روفراخونی کنی اون عملیات اجرا میشه متناسب با اون ویو و فونت ارسالی . ممنون از پاسخدهی سریع و عالیتون .... یک مشکل عجیب دارم با تعریف Layout اکتیویتیم!! ... وقتی تعریفش می کنم و برنامه رو ران می کنم بسته میشه اکتیویتی!! .... [shcode=java] RelativeLayout main = (RelativeLayout) findViewById(R.id.mainLayout); [/shcode] خارج متد on create هم میذارمش ولی وقتی داخل متد میذارم اجرا میشه .... منطقیه؟ .... چون متدی که شما گفتین باید قبل on create باشه یعنی قبلش باید layout تعریف شده باشه اما الان برعکسه!! نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
samirsamiri 6 ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ مالک گزارش اشتراک گذاری ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ خواهش میکنم. فک نکنم مشکلی باشه . مطمئنی که آی دی و نوع اون ویو درسته ؟؟ و مطمئنی از این خط ایراد میگیره ؟؟ اگه آره :: باید لیوت رو با لیوت تعریف کنی نه آی دی این شکلی ::: RelativeLayout main = (RelativeLayout) findViewById(R.layout.mainLayout); اینم بگم که واسه من با ای دی کار میکنه و مشکلی نداره.. اها فهمیدم شما خارج از آن کریت وداخل کلاستون اول تعریف کنید : RelativeLayout main; سپس شناسایی کنین حل بشه :: main = (RelativeLayout) findViewById(R.layout.mainLayout); نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
alirezax2 0 ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ گزارش اشتراک گذاری ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ خیلی ممنون بابت جواب هاتون .... متاسفانه نشد همون مشکلو داره ... این کد فراخوانی تابع هم توی شرط if میذارم خطا دار میشه!! فایل پیوست: نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
mohammadali_mirhamed 27 ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ گزارش اشتراک گذاری ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ فک می کنم شما اصلان سینتکس رو رعایت نکردی یه جا مشکل املایی داره احتملاً بگرد دنبالش ارور های لوگ کتت رو بزار بهت بگم نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
alirezax2 0 ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ گزارش اشتراک گذاری ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ فک می کنم شما اصلان سینتکس رو رعایت نکردی یه جا مشکل املایی داره احتملاً بگرد دنبالش ارور های لوگ کتت رو بزار بهت بگم فایل پیوست در مورد خطا موقع فراخوانی تابع قرار دادم ... اما مشکل دیگه که دوسته حرفه ایمون راهنمایی کردن این هست که layout رو مجبورم بعد متد و داخل on create معرفی کنم وگرنه برنامه موقع اجرا بسته میشه نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
mohammadali_mirhamed 27 ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ گزارش اشتراک گذاری ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ خب برادر من بهت میگم مشکل املایی داری که ارور های لوکتت رو نگاه سمی کالن نزاشتی انتهای دستوراتت (; ) پرانتز هم دقت کن نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
alirezax2 0 ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ گزارش اشتراک گذاری ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ خب برادر من بهت میگم مشکل املایی داری که ارور های لوکتت رو نگاه سمی کالن نزاشتی انتهای دستوراتت (; ) پرانتز هم دقت کن والا این کد رو دوستمون جناب samirsamiri معرفی کردند برای فراخوانی تابع .... سیمیکالون هم گذاشتم ... اما خطا دار بازم ... الان درسته این کد که غلط املایی هم نداشته باشه چجوریه؟ [shcode=java] setFont(ViewGroup main, Typeface font); [/shcode] نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
mohammadali_mirhamed 27 ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ گزارش اشتراک گذاری ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ روی سمی کالن ها تو ارور کلیک کن ببین تویه کدوم خط می برتت نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
alirezax2 0 ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ گزارش اشتراک گذاری ارسال شده در ۱۲ اردیبهشت ۱۳۹۵ روی سمی کالن ها تو ارور کلیک کن ببین تویه کدوم خط می برتت روی همین تیکه کد که گذاشتم میاره ولی خوب منطقی نسیت که داخل پرانتزا کلی سیمیکالون باشه که ... فک میکنم مشکل خطای املایی نباشه نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
پست های پیشنهاد شده
به گفتگو بپیوندید
هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .