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

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

مدیریت گفتگو
behnam2000 11 سال پیش
آخرین تغییر: 11 سال پیش

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

 

float screen_density = (getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK);

if (screen_density >= 4.0) { // size>=xxxhdpi font_size1 = 22; font_size2 = 23; font_size3 = 24; font_size4 = 25; } else if (screen_density >= 3.0) { // size>=xxhdpi & size<xxxhdpi
font_size1 = 19; font_size2 = 20; font_size3 = 21; font_size4 = 22;
} else if (screen_density >= 2.0) { // size>=xhdpi & size<xxhdpi font_size1 = 16; font_size2 = 17; font_size3 = 18; font_size4 = 19; } else if (screen_density >= 1.5) { // size>=hdpi & size<xhdpi font_size1 = 13; font_size2 = 14; font_size3 = 15; font_size4 = 16; } else if (screen_density >= 1.0) { // size>=mdpi & size<hdpi font_size1 = 10; font_size2 = 11; font_size3 = 12; font_size4 = 13; } else { // size>=ldpi & size<mdpi font_size1 = 7; font_size2 = 8; font_size3 = 9; font_size4 = 10; }
txt1.setTextSize(TypedValue.COMPLEX_UNIT_SP, font_size1); // ست کردن سایز متن بر حسب اس پی txt2.setTextSize(TypedValue.COMPLEX_UNIT_SP, font_size2); txt3.setTextSize(TypedValue.COMPLEX_UNIT_SP, font_size3); txt4.setTextSize(TypedValue.COMPLEX_UNIT_SP, font_size4);

نظرات

raeesi 11 سال پیش
به نظر من شما بهتره به جای استفاده از dp از sp استفاده بفرمایید که باعث میشه بر حسب سایز دستگاه فونت رو تنظیم کنه
behnam2000 11 سال پیش
برادر من می بینید که در کدهای بالا سایز بر حسب sp ست میشه!! لااقل یه نگاهی به کدهای بالا می انداختید و بعد نظرتون رو می گفتید!!!
raeesi 11 سال پیش
بله منم نگاه کردم منظور من اینه که شما چرا بجای این همه کد نمیای فونت رو بر حسب sp بزاری ؟ شما اگه دقت کرده باشی قبلا در مورد این موضوع صحبت شده موفق باشید
behnam2000 11 سال پیش
بله میدونم منظور شما چیه.اما این روش خیلی نادقیق هستش.مثلا اگه من بیام سایز همه ی تکست ویو ها رو 23sp ست کنم در گوشی های 4 یا 5 اینچی خیلی بزرگ نشان داده میشه و بر عکس اگر بیام سایز تکست ویوها رو مثلا 16sp ست کنم در تبلت 7 و 10 اینچی خیلی ریز نشان داده میشه.این روش که به همه ی تکست ویوها سایز بر حسب sp بدیم تا به امید اینکه به طور خودکار اندازه ی متن نسبت به دستگاه کاربر تغییر کنه به نظر من کاملا غلطه.ما بایستی بر حسب طراحی که انجام دادیم بر حسب سایز گوشی یه مقدار بر حسب sp برای دیگر سایزها تعیین کنیم.
doost_fu 11 سال پیش
به نظر من بهتره این اعداد و به صورت تقریبی خودتون به دست بیارید نیازی هم نیست انقدر حالت بزارید سه حالت هم کافیه !! همچنین سایز فونت با تغییر خود فونت هم تغییراتی داره مثلا اگه سایز یه متن 20 بزارید و بعد فونت های مختلف روش به کار ببرید متوجه این موضوع میشید ! پس با توجه به فونتی که انتخاب کردید باید یه تست بگیرید موفق باشید .
Andronymous 11 سال پیش
کاری که من کردم این بود که مثل شما screen_density رو توی ActivitySplash به دست اوردم و توی ActivityEnhanced یه تابع نوشتم که برای قسمت های مختلف یک عدد برای فونت ست میکرد!حالا باید این عدد ها رو به دست بیارین!یه log بساز که screen_density رو برات چاپ کنه بعد با جنی موشن تمام سایز ها رو امتحان کن( توی تنظیمات قبل ران کردن جنی موشن میتونی سایز رو تغیر بدی )و ببین با چه دنسیتی ای چه سایزی برای تکست هات مناسبه و این عدد ها رو به دست بیار...

پاسخ‌ها 1

doost_fu 11 سال پیش

این کد خودمه که تقریبی به دست اوردم میشه یه خورده هم اعداد بیشتر کرد
روی گوشی سه اینچ و تبلت هفت و ده اینچ خوب بود ولی دیوایس بین 4 تا 7 در دسترس نداشتم و تقریبی گذاشتم !

        DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
double density = displayMetrics.density * 200;
double x = Math.pow(displayMetrics.widthPixels / density, 2);
double y = Math.pow(displayMetrics.heightPixels / density, 2);
double screenInches = Math.sqrt(x + y);

if (screenInches < 4) {
sizeText = 28;
sizeBtn = 24;
} else if (screenInches < 7) {
sizeText = 40;
sizeBtn = 36;
} else {
sizeText = 52;
sizeBtn = 48;
}



موفق باشید .

نظرات

behnam2000 11 سال پیش
ممنون از جوابتون.کد شما هم خوبه ولی یه کم به نظرم نادقیق هستش.چرا که شما فقط سه دسته بندی برای گوشی ها قائل می شوید. کوچکتر از 4 -بزرگتر مساوی 4 و کوچکتر از 7-بزرگتر مساوی 7. که این باعث میشه با مشکل بزرگی روبه رو بشید.اگه بخوام مثال بزنم مثلا اگه شما در یک تبلت از نظر ما 7 اینچی کدهاتون رو اجرا کنید می بینید که screenInches رو مثلا به جای 7 به شما 6.83 برمی گردونه و اینجاست که کد شما هم برای تبلت 7 اینچی(به نظر ما) اعداد 40 و 36 رو ست میکنه و هم برای یک گوشی تقریبا 5 اینچی همین اعداد ست می شوند که این باعث میشه اون اندازه مورد نظر ست نشه.اما در کدی که در بالا مشاهده می کنید دسته بندی بیشتر هست و این باعث میشه که لااقل بتونیم فونت رو با ضریب خطای کمتری نسبت به سایز فونت مطلوب ست کنیم.حیف که به جز یک تبلت 7 اینچی ابزاره دیگه ای دم دست ندارم وگرنه مینشستم و با تقریب و خطا یک فرمولی پیدا میکردم که رابطه ی این سایز متن ها رو بر اساس سایز گوشی ها به ما بده.

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