ورود

View Full Version : پوشه values برای چیست ? و نحوه کار با آن برای وزن دهی به layout ها



hamedg1366
سه شنبه 18 آذر 1393, 10:44 صبح
با سلام و خسته نباشید

لطفا پوشه values رو معرفی و نحوه وزن دهی توی اون رو بیان کنید

مثلا منظور اینجا چیه ؟


<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="collection_list_header_cover_height">80.0dip</dimen>
</resources>




این همه ایجاد پوشه برای چیه ؟!

126420



با تشکر

hamedg1366
سه شنبه 18 آذر 1393, 10:51 صبح
به این مثال هم توئجه بفرمائید :


<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="small_widget_background_height">40.0dip</dimen>
<dimen name="small_widget_background_width">320.0dip</dimen>
<dimen name="widget_margin">15.0dip</dimen>
</resources>



ما وقتی برای تصویرمون طول و عرض میدیم توی layout پس برای چی اینجا هم داریم طول و عرض میدیم ....!!!!؟؟؟

#root#
سه شنبه 18 آذر 1393, 10:58 صبح
سلام
به مانند پوشه های drawable که اندروید با توجه به سایز صفحه نمایش تصاویر مناسب رو از اون انتخاب میکنه، در اینجا هم به همین صورت هست،
در اینجا هم به همین صورت ممکنه شما بخوایید در تبلت ها طول و عرض یک عنصر خیلی بیشتر از طول و عرضش در یک گوشی 4 اینچی باشه که شما رو به این هدفتون میرسونن.

hamedg1366
سه شنبه 18 آذر 1393, 11:22 صبح
بخاطر اینکه در برنامه به مشکل Layout نخورم در گوشی های مختلف از پوشه بندی های زیر استفاده کردم

متاسفانه با اینکه توی گوشی های Sumsung همه چی مرتب دیده میشه اما توی HTV one و Hawaii (در سایز های کوچیک) بازم Layout ریخته بهم ، آیا میتونم با Valuse این رو برطرف کنم ؟


126421

hamedg1366
سه شنبه 18 آذر 1393, 11:39 صبح
البته این رو هم اضافه کنم که برای تصاویر از patch-9 استفاده کردم ، اونم در سایز بزرگ و فقط یکی درون drawable-hdpi قرار دادم .... امکان داره مشکل از این هم باشه ؟



:عصبانی++:کلافه شدم ،

Nevercom
سه شنبه 18 آذر 1393, 12:07 عصر
ایده ی کلی این هست که تاجایی که می تونیم، قسمت های محتلف برنامه، مثل کدها، لایه های گرافیکی و منابع برنامه رو جدا از هم نگه داریم.
باید تا جایی که می تونیم برنامه رو به شکلی طراحی کنیم که الگوی طراحی برنامه در همه ی برنامه مشهود باشه، و چند دسته گی در طراحی مشاهده نشه.
و البته سعی کنیم همه ی اینها رو به شکلی انجام بدیم که تغییرات آینده با کمترین زحمت صورت بگیره.

پوشه ی values محلی هست برای ذخیره ی داده های مصرفی در برنامه.
مثلاً فایل strings.xml حاوی تمام متن و رشته های مورد استفاده در برنامه هست، مزیتش به اینه که با تغییر متن هرجا ازش استفاده کرده باشید متن جدید نمایش داده میشه و کار ترجمه ی برنامه رو بسیار بسیار راحت میکنه.
فایل color.xml حاوی مقادیر رنگ مورد استفاده در برنامه هست.

درمورد سوال شما، راهکار مناسب این هست که بحای اینکه در تمام اکتیویتی ها مقدار margin رو مثلاً بزارید 16dp، یک کلید dimen ایجاد کنید و مقدار رو در اون درج کنید و بجای نوشتن مقداری مثل 16dp در لایه، آدرس اون ریسورس رو بنویسید، بعنوان مثال:
android:paddingBottom="@dimen/activity_vertical_margin"

به این طریق اگر تصمیم گرفتید این مقدار رو به 18dp تغییر بدید، تمام لایه های شما مقدار جدید رو میگیرن و هارمونی در طراحی شما حفظ میشه.

hamedg1366
سه شنبه 18 آذر 1393, 15:59 عصر
در واقع میشه گفت که نوعی استاندارد سازی داخل پوشه values انجام میدیم ، تا از انجام کارهای تکراری در آینده جلوگیری کنیم. و در صورتی که نباشه فقط انجام کارها زمانبر میشه و نبودش دلیلی برای برهم ریختگی Layout نیست.

درسته؟

Nevercom
سه شنبه 18 آذر 1393, 17:31 عصر
بله.

مثلاً فرض کنید در کدمون قصد داریم به وب سرویس پیغام هایی رو ارسال کنیم و در هر درخواست دوتا پارامتر ثابت همیشه هست.
حالا ما می تونیم برای هر درخواست به سرور یه کد بنویسیم و اون دوتا پارامتر رو هم تو همه ی درخواست ها بزاریم که مثلاً میشه 12 تا متد مختلف
یا اینکه بیایم و کدهای درخواست سرور رو تبدیل به یک متد کنیم و تو هر درخواست حداگانه پارامترهای اضافی رو به متد جدید بدیم. مزیتش به اینه که تعداد کدهای تکراری کم میشه و کدمون منظم تر و اینکه اگر زمانی تصمیم گرفتیم دوتا پارامتر ثابت رو بکنیم ۳ تا، فقط لازمه یک متد رو تغییر بدیم و اطمینان داشته باشیم که همه چی درست انجام میشه.

درصورتی که در حالت اول باید هر ۱۲ تا متد رو هربار ویرایش کنیم تا با استاندارد مون همخوانی داشته باشه.

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

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