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

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

behnam2000  11 سال پیش  11 سال پیش
+5 0

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

 

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);
0 0
به نظر من شما بهتره به جای استفاده از dp از sp استفاده بفرمایید که باعث میشه بر حسب سایز دستگاه فونت رو تنظیم کنه (11 سال پیش)
0 0
برادر من می بینید که در کدهای بالا سایز بر حسب sp ست میشه!! لااقل یه نگاهی به کدهای بالا می انداختید و بعد نظرتون رو می گفتید!!! (11 سال پیش)
0 0
بله منم نگاه کردم منظور من اینه که شما چرا بجای این همه کد نمیای فونت رو بر حسب sp بزاری ؟ شما اگه دقت کرده باشی قبلا در مورد این موضوع صحبت شده موفق باشید (11 سال پیش)
0 0
لینک (11 سال پیش)
0 0
لینک (11 سال پیش)
0 0
بله میدونم منظور شما چیه.اما این روش خیلی نادقیق هستش.مثلا اگه من بیام سایز همه ی تکست ویو ها رو 23sp ست کنم در گوشی های 4 یا 5 اینچی خیلی بزرگ نشان داده میشه و بر عکس اگر بیام سایز تکست ویوها رو مثلا 16sp ست کنم در تبلت 7 و 10 اینچی خیلی ریز نشان داده میشه.این روش که به همه ی تکست ویوها سایز بر حسب sp بدیم تا به امید اینکه به طور خودکار اندازه ی متن نسبت به دستگاه کاربر تغییر کنه به نظر من کاملا غلطه.ما بایستی بر حسب طراحی که انجام دادیم بر حسب سایز گوشی یه مقدار بر حسب sp برای دیگر سایزها تعیین کنیم. (11 سال پیش)
+1 0
به نظر من بهتره این اعداد و به صورت تقریبی خودتون به دست بیارید نیازی هم نیست انقدر حالت بزارید سه حالت هم کافیه !! همچنین سایز فونت با تغییر خود فونت هم تغییراتی داره مثلا اگه سایز یه متن 20 بزارید و بعد فونت های مختلف روش به کار ببرید متوجه این موضوع میشید ! پس با توجه به فونتی که انتخاب کردید باید یه تست بگیرید موفق باشید . (11 سال پیش)
+1 0
کاری که من کردم این بود که مثل شما screen_density رو توی ActivitySplash به دست اوردم و توی ActivityEnhanced یه تابع نوشتم که برای قسمت های مختلف یک عدد برای فونت ست میکرد!حالا باید این عدد ها رو به دست بیارین!یه log بساز که screen_density رو برات چاپ کنه بعد با جنی موشن تمام سایز ها رو امتحان کن( توی تنظیمات قبل ران کردن جنی موشن میتونی سایز رو تغیر بدی )و ببین با چه دنسیتی ای چه سایزی برای تکست هات مناسبه و این عدد ها رو به دست بیار... (11 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
doost_fu  11 سال پیش
+1 0

این کد خودمه که تقریبی به دست اوردم میشه یه خورده هم اعداد بیشتر کرد
روی گوشی سه اینچ و تبلت هفت و ده اینچ خوب بود ولی دیوایس بین 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;
}



موفق باشید .

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

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