رفتن به مطلب

Scale یا مقیاس متن ویو ها در دیوایس های مختلف


Radiomedia

ارسال‌های توصیه شده

با سلام (توجه - این آموزش برای این است که تفاوت یکسان شدن سایز متن ویو و یکسان شدن خود ویو یا در برخی موارد فیت شدن متن در ویو را متوجه بشید)

موضوع مهمی که هنوزم هم در این انجمن و هم در انجمن سایت مرجع مورد بحث هست، سایز متن ویوها در دستگاه های مختلفه.

امروز من هم کتابخانه مناسب رو بتون معرفی میکنم و هم راهکار رو بتون میدم تا اگر ایرادی در پروژتون وجود داشت بتونید برطرفش کنید.

اما اصلا منظور ما از Scale یا مقیاس یا بزرگ و کوچک شدن متن نسبت به صفحه چیه؟

ما وقتی میخوایم ویوها رو با توجه به سایز صفحه مثل تلفن یا تبلت تنظیم کنیم که کوچک یا بزرگتر از حد معمول نشن، در Designer Script و یا در Code editor در B4A میتونیم کدهامون رو وارد کنیم، که مقیاس ما یا سایزدهی معمول هست که با dip داده میشه، یا نسبت به پهنا و ارتفاع صفحه است، که با %x و %y اینکارو انجام میدیم.

اما برای متن ویوهامون اینکار انجام نمیشه و فقط خود ویو بزرگ و کوچک میشه و برای مثال اگر سایز فونت یک لیبل رو 15 داده باشیم، در هر سایزی همون 15 رو نشون میده و در دیوایس های کوچک خیلی بزرگ میشه و در دیوایس های بزرگ مثل تبلت خیلی کوچیک، پس راهکار اصلی چیه؟

راهش اینه که مثل ویوها با توجه به سایز صفحه سایز اونا بدیم:

- یک راه اینه که با توجه به سایز ویو، سایز متن رو هم تغییر بدیم، که من این راهو انتخاب نکردم تابحال

- یک راه هم نسبت به سایز صفحه گوشی هست:

اما آیا میشه با فقط با در نظر گرفتن مقدار های درصد و dip اینکارو کرد؟ پاسخ خیر هست، ...

ما بین دستگاه های مختلف دو تفاوت داریم یکی سایز پهنا و ارتفاع هست، و یکی Scale هست که یعنی نسبت نقطه به پیکسل یا اینچ (دقیقا یادم نیست) که اگر در دیزاینر b4a دیده باشید یا در شبیه سازها، سه عدد مختلف مثل زیر وجود دارد:

Width: 768 - Height: 1024 - Scale : 1(160)

مقیاس این اسکیل هم 160 هست، یعنی اگر 1 بود یعنی 160 اگر 2  بود 320 و ...

پس زمانی که ما دو دستگاه با پهنای 768 داریم، یکی از آنها اسکیل 1 و دیگری 2 بود، قطعا سایز ویوها و فونت های ما هم متفاوت خواهد بود.

پس چاره چیست، و چطور میتوان همه این سایز ها رو بدست آورد؟

چاره این است که ما یک مقدار پنها را بگیریم به همراه همین مقدار Scale که برای این کار در محیط Code در B4A برای بدست آوردن پهنا:

Activity.Width

که همون پهنا رو برمیگردونه مثلا 768

و برای Scale هم کلیدواژه Density رو میزنیم که همون مقدار برابر 1 یا 2 یا... که برابر 160، 320 و... هست رو برمیگردونه، برای راحت تر شدن محاسبات ما بهتره این مقدار برگشتی Density رو ضرب در 160 کنیم تا آسون تر شه.

من در کلاسی که خودم نوشتم که هم به صورت جدا و هم مجموعه در سایت در  - اینجا - قرار دادم به همراه توضیحات، میتونه با استاندارد کامل سایز متن رو نسبت به سایز گوشی تنظیم کنه.

فرمول اون به این صورته که من اول پهنا رو تقسیم بر مقیاس کردم و اونو ضرب در مقدار ثابتی (که از تقسیم سایزی که کاربر وارد کرده بدست اومده) کردم. و این باعث میشه در همه سایز صفحه ها مقدار یکسانی داشته باشیم، یعنی اگر شما به صورت زیر وارد کنید:

lbl.Textsize = msp1.sp(15)

در هر سایز صفحه ای، سایز متن شما 15 استاندارد خواهد شد، ولی اگر به اینصورت باشد :

lbl.Textsize = 15

 فقط در سایزی که در حال طراحی هستید 15 را لحاظ میکند و در تبلت ها خیلی کوچکتر و ناخوانا خواهد بود.

پس نتیجه می‌گیریم اگر میخواید متنی رو با هر سایزی درون ویو خودتون فیت کنید این راهش نیست، در اصل اگر برای فیت کردن کدی بنویسید، نیازی به این کلاس نیست، و شما میتونید با کتابخانه StringUtils پهنا و ارتفاع متنتون رو نسبت به ویو بگیرید و اندازش کنید، کار این کتابخانه sp فقط تعادل متن نسبت به سایز صفحه است.

من هنوز برای فیت کردن در انجمن جستجو نکردم، اگر موردی بود ذکر کنید ویرایش کنم، اگر هم نبود امر بفرمایید یه کلاس براش بنویسم.

امیدوارم بدردتون خورده باشه، لبتون خندون و لایک فراموش نشه.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...