PDA

View Full Version : ایجاد layout برای محدوده خاصی از رزولوشن



r_khan
دوشنبه 28 بهمن 1392, 15:01 عصر
سلام
برای ایجاد layout چهارتا فولدر ایجاد کردم به ترتیب از small تا x large
فولدر large رو 5.1 اینچ تنظیم شده و فولدر x large رو 10.1 تنظیم شده
میخوام 7 اینچ هم پشتیبانی بکنم چه باید بکنم ایا باید فولدر خاصی ایجاد کرد؟
ممنون

smemamian
دوشنبه 28 بهمن 1392, 22:50 عصر
تست کن :
res/layout-sw600dp/yourlayout.xml

اگه نشد :
res/layout-1280x800/yourlayout.xml

r_khan
سه شنبه 29 بهمن 1392, 08:00 صبح
تست کن :
res/layout-sw600dp/yourlayout.xml

اگه نشد :
res/layout-1280x800/yourlayout.xml

ممنون
این فقط برای 7 اینچ هستش؟
اگه مثلا یه نمونه 8 اینچ داشته باشیم از این فولدر میخونه یا از فولدر دیگری؟

smemamian
سه شنبه 29 بهمن 1392, 13:41 عصر
دقیق این رو نمی تونی تشخیص بدی.
توی کد اولی برای نسخه های 3.2به بالا استفاده میشه.
توی کد دومی دقیقاً برای 7 اینچ هستش ولی این به این معنی نیست که 100درصد در تمامی دیوایس های 7 اینچی از این لی اوت استفاده بشه ! سیستم بهترین گزینه های موجود رو انتخاب می کنه. برای مثال شاید یک دیوایس 8 اینچی از همین 7 اینچی استفاده کرد.
الان شناسه ای به شکل زیر (این هم برای 7 اینچی استفاده میشه) :
res/layout-xlarge/yourlayout.xml
هم باید در نظر بگیری که مطمئن بشی تمامی دیوایس ها از این لی اوت پشتیبانی می کنند.

r_khan
سه شنبه 29 بهمن 1392, 14:05 عصر
دقیق این رو نمی تونی تشخیص بدی.
توی کد اولی برای نسخه های 3.2به بالا استفاده میشه.
توی کد دومی دقیقاً برای 7 اینچ هستش ولی این به این معنی نیست که 100درصد در تمامی دیوایس های 7 اینچی از این لی اوت استفاده بشه ! سیستم بهترین گزینه های موجود رو انتخاب می کنه. برای مثال شاید یک دیوایس 8 اینچی از همین 7 اینچی استفاده کرد.
الان شناسه ای به شکل زیر (این هم برای 7 اینچی استفاده میشه) :
res/layout-xlarge/yourlayout.xml

هم باید در نظر بگیری که مطمئن بشی تمامی دیوایس ها از این لی اوت پشتیبانی می کنند.

ممنون پس این احتمال وجود داره که برنامه برای دیوایس های خاصی تنظیمات صفحه دقیق نباشه درسته؟

smemamian
سه شنبه 29 بهمن 1392, 14:24 عصر
بله و خیلی کم این اتفاق می افته. بعضی ها توی خود کد این کار رو انجام میدن !
یکی از exampleهای خوده اندروید رو نگاه میکردم یه ترفند جالب زده بود !!!
از متغیر بولین برای تشخیص xml استفاده کرده بود به این صورت که در res/values-xlarge یک فایل درست کرده بود و داخل اون یه فایل به اسم مثلاً seveninches.xmlایجاد کرده بود که داخلش این بود :

<resources> <bool name="isseveninches">true</bool> </resources>

بعد توی کد میومد بررسی می کرد آیا true هست یا نه :

boolean tablet_seveninches = getResources().getBoolean(R.bool.isseveninches);
if (tabletSize) {
// karhayee ke mikhai vase 7 inche beshe inja injam bede
} else {
// har chizi ke dost dari...
}

raha_jon
سه شنبه 29 بهمن 1392, 16:34 عصر
با سلام
ببخشید میشه برای هر یک از پوشه های drawable-xhdpi و drawable-mdpi و ... فایل های xml اختصاصی درست کرد که هر کدام از اندازه ها از xml اختصاصی خودش استفاده کنه؟؟

smemamian
سه شنبه 29 بهمن 1392, 17:04 عصر
با سلام
ببخشید میشه برای هر یک از پوشه های drawable-xhdpi و drawable-mdpi و ... فایل های xml اختصاصی درست کرد که هر کدام از اندازه ها از xml اختصاصی خودش استفاده کنه؟؟
این xml ها چی هست ؟ این فایل xml رو توی layoutها باید بذاری :

layout-mdpi
layout-hdpi
layout-xhdpi
layout-xxhdpi

raha_jon
سه شنبه 29 بهمن 1392, 17:19 عصر
ببخشید من این ها را ندیده بودم از کجا باید بیارم یا باید خودم بسازم؟و بعد اون آیا فراخوانی لازمه؟

smemamian
سه شنبه 29 بهمن 1392, 17:25 عصر
ببخشید من این ها را ندیده بودم از کجا باید بیارم یا باید خودم بسازم؟و بعد اون آیا فراخوانی لازمه؟
این فولدرها در هنگام ایجاد پروژه به صورت خودکار ایجاد می شود.

raha_jon
سه شنبه 29 بهمن 1392, 21:02 عصر
بله درسته ایجاد شده منظور من این بود که درون این فولدرا فایل xml بزاریم و برنامه به صورت اتوماتیک همانند عکسی که داخلش قرار میدیدم،وضعیت را بشناسه و از فایل xml مربوطه استفاده کنه آیا شدنی هست؟

smemamian
چهارشنبه 30 بهمن 1392, 18:36 عصر
بله به شرطی که همنام باشه.

raha_jon
چهارشنبه 30 بهمن 1392, 19:50 عصر
بله به شرطی که همنام باشه.
باشه پس لطفا بیشتر در این مورد توضیح بدین ممنون.

saeed_g21
چهارشنبه 30 بهمن 1392, 21:43 عصر
ببین به فرض تو یک MainActivity.java داری که درون اون نام لایوت main.xml رو تعریف کردی بعد امدی برای هر اندازه از صفحه نمایش دستگاه یک فولدر ساختی مثلا layout-larg و layout-xlarg بایستی نام فایل xml ی که برای هر فولدر ساختی و طراحی کردی main.xml بدی چون داخل MainActivity.java نام لایوت main.xml دادی اگه نام دیگه ای داده باشی فایل لایوت رو نمیتونه پیدا کنه از برنامه میندازه بیرون

raha_jon
پنج شنبه 01 اسفند 1392, 11:21 صبح
یعنی برای هر پوشه main.xml درست کنم بزارم؟و اسمشو تغییر ندم درسته؟

saeed_g21
پنج شنبه 01 اسفند 1392, 12:43 عصر
یعنی برای هر پوشه main.xml درست کنم بزارم؟و اسمشو تغییر ندم درسته؟

بله دوست عزیز دقیقا

Programmatore
پنج شنبه 01 اسفند 1392, 15:08 عصر
ببینید بحـث طراحی و ساپورت از سایزهای مختلف کلا یه بحث گسترده و شایدم پیچیده ای باشه شاید هم نه! چون تا حالا دقیقا در این مورد بحث نشده و از کسی هم بخوای اینجا بپرسی آخرش یه لینک میدن بری دنبال نخود سیا تو سایت آندروید که توضیحات سادشو اینجا دوستان خودشون دادن! ما میایم چهارتا drawable با چهارتا Layout ایجاد میکنیم ولی این هیچوقت نمیتونه تضمینی باشه بر اینکه همه گوشی ها از برنامه ما طوری که طراحی کردیم نشون داده بشن فیلهایی رو که تو این چندتا drawable قرار میدیم فقط میان بر اساس کیفیتی که خود اندروید انتخاب میکنه استفاده میشن تو اکلیپس یا هر محیط دیگه ای شاید درست نشون داده بشن ولی توی یک دیوایس واقعی اینطور نیست.. حداقل برا من که اینطور بوده... ما از اساتید انتظار داریم در حد توان در این باره بیشتر به ما توضیح بدن ولی در این مورد تاپیک های زیادی ایجاد شده با جواب های مشترک.

r_khan
چهارشنبه 07 اسفند 1392, 15:15 عصر
من پوشه های زیر را برای رزولوشن 1280*800 ایجاد کردم ولی هیچکدام اجرا نمیشه .میره از پوشه layout-normal-land میخونه

1- layout-800*1280
2-layout-w800dp
3-layout-w800dp-h1280dp
4-layout-sw800dp

نمی دونم دیگه چی رو باید امتحان کنم؟

mf2009
چهارشنبه 07 اسفند 1392, 21:35 عصر
من پوشه های زیر را برای رزولوشن 1280*800 ایجاد کردم ولی هیچکدام اجرا نمیشه .میره از پوشه layout-normal-land میخونه

1- layout-800*1280
2-layout-w800dp
3-layout-w800dp-h1280dp
4-layout-sw800dp

نمی دونم دیگه چی رو باید امتحان کنم؟

تو manifest کد های زیر رو وارد کن

<supports-screens
android:resizeable="true"
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:anyDensity="true"
android:xlargeScreens="true"

/>

r_khan
پنج شنبه 08 اسفند 1392, 08:10 صبح
تو manifest کد های زیر رو وارد کن

<supports-screens
android:resizeable="true"
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:anyDensity="true"
android:xlargeScreens="true"

/>

فایده ای نداشت

hosseinrasouli
پنج شنبه 27 شهریور 1393, 13:08 عصر
تست کن :
res/layout-sw600dp/yourlayout.xml

اگه نشد :
res/layout-1280x800/yourlayout.xml

برای تبلت 8 اینچی باید چه پوشه ای اضافه بشه ؟

smemamian
پنج شنبه 27 شهریور 1393, 15:06 عصر
دوستان نحوی پوشه بندی درست برای Layoutها حساب کتاب داره، محاسبات داره! چیزی نیست که
هرچی دلتون خواست دقیقاً همان طوری که در ذهن دارید درست دربیاد ! مثلاً شناسه sw-
تقدم به شناسه ی ndpi- داره !
برای مثال گوشی ای رو فرض کنید که عرض 1080 داره و dpi اون 480 هست. حالا می خوایم بفهمیم این از کدوم Layout
تغذیه می کنه :

پس 1080 رو در 160 ضرب می کنیم میشه : 172800

حالا این عدد رو یعنی 172800 در 480 تقسیم می کنیم میشه : 360
پس Layout من باید به این صورت تعریف بشه : layout-sw360dp

حالا این اندازه مشابه هست با layout-xxhdpi. ولی اگه گوشی با ورژن پایین باشه
از xxhdpi تغذیه می کنه واگر گوشی ورژن بالا (Android 3.2) باشه از layout-sw360dp.
نکته بعدی اینه که حتی اگه من layout-sw480dp هم در شاخه بندیم تعریف کنم، گوشی
با چنین عرض، اون رو نمی بینه !

دریافت مثال
(http://uplood.ir/k7HI)
بله گیج کننده است ! چون در بازار گوشی های اندروید گوشی ها تقلبی زیاد هست و
و اگر هم در نظر بگیریم شما 100 درصد همه موارد رو رعایت کردید، ممکنه روی گوشی
چیز عجیب و غریبی ببینید !


نکته بعدی در مورد تصاویر هست، نرخ scaling قبلا بود : 3:4:6:8
دوباره گوگل مستنداتش رو یه چندوقتی هست به روز کرده و به مقادیر جدید معرفی کرده :

3:4:6:8:12:16
که 3 در دیگه مورد استفاده قرار نمی گیره. در مورد این نرخ ها در یک پست گفته بودم :


قانون 3-4-6-8 رو باید رعایت کنید.
3 = ldpi = که کلاً منسوخ شده است و نیازی نیست.
4 = mdpi
6 = hdpi
8 = xhdpi
اگر عکس شما در فولدر mdpi با سایز 48*48 باشه، و بخواهید برای hdpi در نظر بگیری باید به این روش انجام بدی :

48*6 = 288
288 / 4 = 72.
سایز تصویر شما در hdpi باید 72*72 باشه.

این فقط بخشی از نحوی پیاده سازی یک Layout خوب بود !!!

hosseinrasouli
شنبه 29 شهریور 1393, 00:08 صبح
دوستان نحوی پوشه بندی درست برای Layoutها حساب کتاب داره، محاسبات داره! چیزی نیست که
هرچی دلتون خواست دقیقاً همان طوری که در ذهن دارید درست دربیاد ! مثلاً شناسه sw-
تقدم به شناسه ی ndpi- داره !
برای مثال گوشی ای رو فرض کنید که عرض 1080 داره و dpi اون 480 هست. حالا می خوایم بفهمیم این از کدوم Layout
تغذیه می کنه :

پس 1080 رو در 160 ضرب می کنیم میشه : 172800

حالا این عدد رو یعنی 172800 در 480 تقسیم می کنیم میشه : 360
پس Layout من باید به این صورت تعریف بشه : layout-sw360dp

حالا این اندازه مشابه هست با layout-xxhdpi. ولی اگه گوشی با ورژن پایین باشه
از xxhdpi تغذیه می کنه واگر گوشی ورژن بالا (Android 3.2) باشه از layout-sw360dp.
نکته بعدی اینه که حتی اگه من layout-sw480dp هم در شاخه بندیم تعریف کنم، گوشی
با چنین عرض، اون رو نمی بینه !

دریافت مثال
(http://uplood.ir/k7HI)
بله گیج کننده است ! چون در بازار گوشی های اندروید گوشی ها تقلبی زیاد هست و
و اگر هم در نظر بگیریم شما 100 درصد همه موارد رو رعایت کردید، ممکنه روی گوشی
چیز عجیب و غریبی ببینید !


نکته بعدی در مورد تصاویر هست، نرخ scaling قبلا بود : 3:4:6:8
دوباره گوگل مستنداتش رو یه چندوقتی هست به روز کرده و به مقادیر جدید معرفی کرده :

3:4:6:8:12:16
که 3 در دیگه مورد استفاده قرار نمی گیره. در مورد این نرخ ها در یک پست گفته بودم :



این فقط بخشی از نحوی پیاده سازی یک Layout خوب بود !!!

مهندس الان من برای این گوشی با این سایز باید چه فولدری اضافه کنم
123676

smemamian
شنبه 29 شهریور 1393, 00:32 صبح
برای اولی :

layout-sw360dp

دومی اگه dpi اون 320 باشه، مثل اولی در نظر بگیر.

hosseinrasouli
شنبه 29 شهریور 1393, 14:14 عصر
برای اولی :

layout-sw360dp

دومی اگه dpi اون 320 باشه، مثل اولی در نظر بگیر.

برای تبلت های 8 اینچی چه باید بکنم (و همچنین landscape آن)