آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

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

احمد  7 سال پیش  5 سال پیش
+7 0

سلام دوستان من میخوام توی برنامه از فونت یکان استفاده کنم و کل برنامه ازش استفاده کنم از کدی که از همین جا پیدا کردم استفاده کردم روی شبیه ساز تغیییر می کنه اما روی گوشی تست کردم نشد گوشی ال جی اندروید 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>

کسی راهی داره

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

+3 0
آموزش استفاده از فونت : لینک (7 سال پیش)
0 0
این آموزش حذف شده ؟؟ پیداش نکردم آموزش ست کردن فونت فارسی رو (7 سال پیش)
 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
ajn91  7 سال پیش
+1 0

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

Calligraphy

+1 0
نتونستم توی ایکلیپس بیارم به فایل public گیر میده (7 سال پیش)
پاسخ به سوال 
احمد  7 سال پیش
+7 0

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

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

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

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




0 0
نیاز نیست توی آداپتر چیزی بزارید کافیه توی اکتیویتی که لیست ویو توی اون قرار داره اینو بزارید (5 سال پیش)
0 0
در متدی که اشیا داخل ادابتر را معرفی می کنید قرار بدین (5 سال پیش)

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