بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

تغییر فونت برنامه به صورت یک جا (حل شد + آموزش)

مدیریت گفتگو
احمد 10 سال پیش
آخرین تغییر: 8 سال پیش

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

 public class TypefaceUtil {

	public static void overrideFont(Context context,
			String defaultFontNameToOverride, String customFontFileNameInAssets) {
		try {
			final Typeface customFontTypeface = Typeface.createFromAsset(
					context.getAssets(), customFontFileNameInAssets);

			final Field defaultFontTypefaceField = Typeface.class
					.getDeclaredField(defaultFontNameToOverride);
			defaultFontTypefaceField.setAccessible(true);
			defaultFontTypefaceField.set(null, customFontTypeface);
		} catch (Exception e) {
			Log.e("TypefaceUtil", "Can not set custom font "
					+ customFontFileNameInAssets + " instead of "
					+ defaultFontNameToOverride);
		}
	}
}

داخل کلاس G

 		 TypefaceUtil.overrideFont(getApplicationContext(), "SERIF",
		 "fonts/BYEKAN.TTF");

حتی این خط ها را هم اضافه کردم

 		TypefaceUtil.overrideFont(getApplicationContext(), "DEFAULT",
				"fonts/BYEKAN.TTF");
		TypefaceUtil.overrideFont(getApplicationContext(), "MONOSPACE",
				"fonts/BYEKAN.TTF");
		TypefaceUtil.overrideFont(getApplicationContext(), "SERIF",
				"fonts/BYEKAN.TTF");
		TypefaceUtil.overrideFont(getApplicationContext(), "SANS_SERIF",
				"fonts/BYEKAN.TTF");
		TypefaceUtil.overrideFont(getApplicationContext(), "DroidSans",
				"fonts/BYEKAN.TTF");
		TypefaceUtil.overrideFont(getApplicationContext(), "Roboto-Regular",
				"fonts/BYEKAN.TTF");
		TypefaceUtil.overrideFont(getApplicationContext(), "Roboto-Bold",
				"fonts/BYEKAN.TTF");
		TypefaceUtil.overrideFont(getApplicationContext(), "reboot",
				"fonts/BYEKAN.TTF");

داخل style:

 <style name="AppBaseTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:textSize">14sp</item>
        <item name="android:textStyle">bold</item>
       <item name="android:typeface">serif</item>
        </style>

    <style name="AppTheme" parent="AppBaseTheme">
    </style>

کسی راهی داره

جواب در پاسخ آخر

نظرات

وحید گروسی 9 سال پیش
این آموزش حذف شده ؟؟ پیداش نکردم آموزش ست کردن فونت فارسی رو

پاسخ‌ها 3

ajn91 10 سال پیش

میتونید از این کتابخونه استفاده کنید

Calligraphy

نظرات

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

با تشکر از مهندس کاشی زاده مشکلم حل شد 

ابتدا فونت را در پوشه assets کپی کنید در بالای کلاس G کد زیر را قرار بدین:

 public static Typeface typeface;
public static Context context;

در متد oncreate کلاس G:

 context = getApplicationContext();
typeface = Typeface.createFromAsset(getAssets(), "Bnazanin.ttf");

در ابتدای هر activity کد زیر را بنویسید:

 HelperUI.persianizer((ViewGroup) getWindow().getDecorView());

کد کلاس HelperUI:

 public class HelperUI {

	public static void persianizer(ViewGroup viewGroup) {
		try {
			int childcount = viewGroup.getChildCount();
			for (int i = 0; i < childcount; i++) {
				View child =viewGroup.getChildAt(i);
				if (child instanceof ViewGroup) {
					persianizer((ViewGroup) child);
					continue;
				}

				if (child instanceof TextView) {
					((TextView) child).setTypeface(G.typeface);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

نظرات

QUQU 10 سال پیش
اگه میشه class ـ HelperUI رو یه توضیح بدین که توش چه اتفاقی میفته . یعنی دقیقا چجوری اعمال میشه و بر چه اساس .
احمد 10 سال پیش
viewGroup تمام اشیاء یک فرم را داخل خودش داره پس ما با تابع viewGroup.getChildCount تعدادشو به دست مساریم و با یک حلقه می تونیم خاصیت را بهش بدیم
احمد 10 سال پیش
if (child instanceof ViewGroup) بررسی می کنه که child اگه خودش پدر شی های دیگه باشه دوباره کلاس را برای اونا هم اجرا می کنه
احمد 10 سال پیش
if (child instanceof TextView) هم بررسی می کنه اگه شی نمونه ای از textview باشه تغییرات ما را بهش نصبت میده
علی 10 سال پیش
چطوری از اسپینر استفاده کنیم اینجا؟ textView که کامل اجرا میشه.
Atieh 10 سال پیش
ببخشید یعنی با این کار کل برنامه حتی اعداد و عبارات رووی دکمه ها دارای فونت دلخواه میشن؟
احمد 10 سال پیش
بله کل فونت ها تغییر می کنن حتی در ادابتر ها هم می تونید استفاده کنید
احمد 10 سال پیش
علی یه دونه child instanceof از اسپینر بهش اضافه کن
parsi bit 10 سال پیش
احمد جان آیا اعداد رو هم فارسی میکنه؟
احمد 10 سال پیش
بله فقط تابع را باید توی ادابتر ها هم صدا کنی HelperUI.persianizer((ViewGroup) getWindow().getDecorView());
این تابع یه مشکل اساسی داره . زمانی که اندروید مینوشتم متوجه شدم وقتی از این تابع استفاده میکنم فونت Actionbar هم تغییر میکنه و ظاهر Actionbar بهم میریزه.
احمد 10 سال پیش
خب اکشب بار خودت را بساز منم همین کار کردم یه لینیر گذاشتم برای اکشن بار
parsi bit 10 سال پیش
شما از چه فونتی استفاده میکنی؟ آخه من از این تابع هم که استفاده میکنم بازم اعداد انگلیسی باقی میمونه!
کاشی زاده 10 سال پیش
فارسی بودن و یا انگلیسی بودن به فونت بستگی داره و نه به کد ها
parsi bit 10 سال پیش
بله... درسته آقای کاشی زاده عزیز. منم دنبال یه فونت استاندارد مناسب میگردم. اگه ممکنه لطف کنید و چندتا فونت استاندارد معرفی کنید. چون تو اینترنت هرچی فونت استاندارد معرفی شده این مشکل رو داره. (یا حداقل من پیدا نکردم)
کاشی زاده 10 سال پیش
اکثر فونت های فارسی این مشکل رو دارند باید خودتون فونت رو ویرایش کنید و اعداد فارسی رو داخلش قرار بدید . البته فونت ایران سنس فکر کنم مشکل اعداد فارسی رو نداره .
Denabit 10 سال پیش
سلام.دوستان من طبق اموزشهای استاد کاشی زاده تونستم این کار رو انجام بدم،به شما هم توصیه میکنم حتما اموزشهای ایشون رو دانلود و مطالعه کنید.فقط یه سوال :) اگه کدی که قراره توی اکتیویتی بزاریم که همه متنهای داخل اون اکتیویتی فونتشون تغییر کنه رو بزاریم داخل اکتیویتیی که یه لیست ویو بهش وصله فقط فونت اولین اداپتر رو تغییر میده برای این کار من اومدم داخل متد fill کلاس Adapter فونت رو هر بار که متد اجرا میشه به تکست ها set میکنم ولی این کار اصلا بهینه نیست(البته به نظر من) خواستم نظر شما رو هم بدونم و اینکه ایا راه دیگه ای هم وجود داره؟
حمید 10 سال پیش
به نظر من از کتابخونه ها و رفلکشن جاوا برای تغییر فونت استفاده نکنید چون در بعضی از مواقع باعث کند شدن و پایین اومدن پرفرمنس برنامه میشن مخصوصا در مواقعی که ایتمهایی در لیست ویو داشته باشید که تعداد زیادی تکست برای نمایش داشته باشند. کاری که من میکنم اینه که میام یک کستوم تکست ویو ، باتن، ادیت تکست و... درست میکنم و در داخل اونا فونتشون رو تبدیل به فونت دلخواهم میکنم. مزیتی که این روش داره اینه که شما میتونید با تعریف کردن یک سری اتریبیوت ویو مورد نظرتون رو اختصاصی تر کنید
Denabit 10 سال پیش
@ حمید ممنون از راهنماییتون ولی لطفا اگه امکان داره بیشتر توضیح بدین "یک کستوم تکست ویو ، باتن، ادیت تکست و... درست میکنم و در داخل اونا فونتشون رو تبدیل به فونت دلخواهم میکنم" برام دقیق مشخص نیست چیکار میکنید ...
احمد 10 سال پیش
parsi bit:من از فونت های میترا یکان و نازنین استفاده کردم سری B عدد را فارسی نشون میده
احمد 10 سال پیش
sa777: برای لیست همین راه پیشنهاد دادم و مشکلی نداره همین کارت درسته
احمد 10 سال پیش
حمید جان به نظرم سرعتش بد نیس منم هم خیلی عنظر دارم تقریبا هر فرم 10 تا شی یا بیشتر داره روش بهتری سراغ داری؟
کاشی زاده 10 سال پیش
خیر ، مشکلی از نظر پرفرمنس نداره شما هر آیتمی که داخل صفحه هست رو باید یکبار بهش فونتش رو ست کنید اما بهتره اینکار رو زمانی انجام بدید که ویو ساخته میشه در getView که بیخودی هی تکرار نشه .
parsi bit 10 سال پیش
با ویرایش فونت مشکل خیلی راحت برطرف شد و الان اعداد رو هم فارسی نشون میده. :) یه تشکر حسابی از آقای کاشی زاده عزیز :)
علی 10 سال پیش
احمد جان برای اسپینر child اضافه می کنم ولی ارور میده . شما چطوری اضافه کردی؟
احمد 10 سال پیش
ببین اسپینر از چی گرفته شده همون را بزار
Atieh 10 سال پیش
سلام دوست عزیز . کدتون درسته . فقط توی اون قسمتی ک مربوط به کلاس G هستش ، دوستان فراموش نکنند که باید به این شکل بشه . شما فراموش کردین از متغیر typeface استفاده کننید : typeface = Typeface.createFromAsset(getAssets(), "One Day in Malangbong.otf");
احمد 10 سال پیش
چرا استفاده شده کد را ببینید Typeface.createFromAsset(getAssets(), "Bnazanin.ttf");
احمد 10 سال پیش
اها متوجه شدم اصلاح کردم ممنون از یاد آوریتون
Iman1000 8 سال پیش

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

HelperUI.persianizer((ViewGroup) .getWindow().getDecorView());     




نظرات

MJZ376 8 سال پیش
نیاز نیست توی آداپتر چیزی بزارید کافیه توی اکتیویتی که لیست ویو توی اون قرار داره اینو بزارید
احمد 8 سال پیش
در متدی که اشیا داخل ادابتر را معرفی می کنید قرار بدین

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .