انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
پشتیبانی از صفحه نمایش های مختلف

پشتیبانی از صفحه نمایش های مختلف

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

تعیین بازه صفحه نمایش : 
small
normal
llarge
xlarge

تعیین density صفحه :
ldpi
mdpi
hdpi
xhdpi
xxhdpi
xxxhdpi
و ....

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

http://www.kelidestan.com/forum/showthread.php?tid=5439

برای چیدمان layout صفحه در اندروید سه پارامتر  تعیین کننده هستش
screen resolution
density
screen size

اما روش گفته شده در بالا یک مشکل داره و اون اینکه تنها screen resolution رو در نظر میگیره که باز هم برای تمامیه View ها جوابگو نیست مخصوصا برای Textview که نیاز به TextSize هم داره

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

یک روشی هست که میاد با استفاده از 
BaseScreenDensity
BaseScreenWidth
View.LayoutParam.Width
DisplayMetric.WithPixle
DisplayMetric.Density

اول محاسبه screen with densitydp مربوط به base screen

دوم محاسبه view.width به dp

سوم محاسبه screen with densitydp مربوط به screen فعلی

چهارم محاسبه درصد افزایش/کاهش صفحه


پنجم محاسبه view.width بر مبنای درصد بدست امده

ششم محاسبه view.width برمبنای pixle

ولی دو مشکل در رابطه با فرمول بالا وجود داره
1) در رابطه با height  درست عمل نمیکنه.
2) در رابطه با textSize هم درست عمل نمیکنه.

اگه دوستان میتونن فرمول بهتری بدست بیارن لطفا راهنمایی کنن.
پاسخ
 سپاس شده توسط zanyyy

پشتیبانی از صفحه نمایش های مختلف

#2
من دقیق نفهمیدم از این جمله که درمورد height درست عمل نمیکنه چیه؟.چه مشکلی هست؟...

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

اولا : این الگو رو در مرکز صفحه قرار بدید.(center) .
دوما کاری که باید حتما انجام بدید.اینه که عکس زیر که به عنوان الگو هست رو نباید به هیچ عنوان و به هیچ عنوان مقدار wrap یا match بدید .چون همون طور
که میدونید عکس کش میاد و این مقدار "کش اومدن "بدست آوردنش عملا غیر ممکن یا وقت گیر هست .پس از این دومقدار بالا نمیشه استفاده کرد.

حالا روشی که میشه استفاده کرد اینه مقدار عرض و ارتفاع رو استاتیک بدید مثل 200dp. که این روش هم اصلا خوب نیست .چون فرض کنید اگه صفحه بسیار بزرگ باشه این سایز کوچیک هست.

راه حلی که میشه استفاده کنی . شما باید یه مقدار استاتیک بدید ولی این مقدار استاتیک باید بدست بیارید!..

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

مثلا فرض کن گوشی 240 در 420 هست ...مینیمم میشه 240 .. شما عکستون سایز 235*235 میسازید.( 5 واحد کم کردم به عنوان margin).

با اینکار ..
1_ دیگه از متناسب بودن سایز عکست مطمئنی
2_ میزان کش اومدن کنترل کردی

حالا چون عکس الگوت مربعی شکل شد.میتونی.راحت تکست ویوها رو داخلش موقعیت دهی کنی..

مگر اینکه واقعا اون لایه الگو پیچیده باشه..یه عکسی بفرستید که بفهمیم تکست ویوها دقیقا چه موقعیتی میخوان داشته باشند.باعث میشه بهتر دوستان جواب بدن
پاسخ
 سپاس شده توسط mahdi10539 ، zanyyy

پشتیبانی از صفحه نمایش های مختلف

#3
مرسی از راهنمای شما.
نگاه کنید یک مثال میزنم فکر کنم بهتر بتونیم موضوع رو متوجه بشیم

مثال رو برنامه آگهی ترحیم در نظر میگیریم:

در برنامه آگهی ترحیم ما یک قالب آگهی داریم ابتدا انتخاب میشه
بعد از اون مشخصات متوفی گرفته میشه و به صورت داینامیک در مکان های خاصی با فونت خاصی و اندازه خاصی قرار میگیره.

حالا یک سری مشخصات اولیه داریم

اندازه عکس 1720*1080 هستش
اندازه گوشی 1920*1080 هستش
density : 3
densityDpi: 480
xxdhpi
Screen size : 4.7

حال میخوایم طراحی لایوت ما به این صورت باشه: در بالا toolbar و در زیر یک FrameLayout و در framelayout ِیک عکس وجود داره که قالب ما رو  نمایش میده و کل صفحه رو پوشش میده یعنی به صورت math_parent هستش

در زمان طراحی به دلیل عدم توانایی در انتخاب فونت نمیشه مکان دقیق رو تعیین کرد.
به طبع در زمان اجرا مکان دقیق همراه با اندازه و فونت مشخص میشه و تنظیم میشه.

حالا اگه صفحه نمایش تغییر کنه مثلا به 1280*720 , 320 dpi , xhdpi , 2  , 4.7 بشه
مکان نوشته ها عوض میشه و متن ها بزرگتر یا کوچک تر میشه و به نسبت صفحه تغییر نمیکنن

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

دوستان اگه روش رو بلد هستن توضیح بدن ممنون میشم

. یک روشی هست بنام AutoScale در حالت عادی درست عمل میکنه و ولی در مورد Textview  و سایز lمشکل داره
من این مشکل رو برای width  برطرف کردم ولی در مورد height درست عمل نمیکنه و نمیتونم متوجه بشم مشکل دقیقا از کجاست.

این روش AutoScale هم تقریبا شبیه روش گفته شده توسط شما هستش. یعنی محاسبه طول و عرض صفحه و بدست اوردن یک نسبت خاصی که صفحه افزایش یا کاهش داره.
پاسخ
 سپاس شده توسط zanyyy

پشتیبانی از صفحه نمایش های مختلف

#4
انشالله اگر تونستم مشکل این روش AutoScale رو برطرف کنم که 100% جوابگو باشه در اختیار دوستان قرار میدم
پاسخ
 سپاس شده توسط شماره مجازی امارات


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان