آموزش برنامه نویسی اندروید- قسمت ۳۰: بررسی فایل strings.xml در پوشه values
دوشنبه 30 دی 1392 9:35 AM
اگر خاطرمان باشد در آموزش قسمت بیست و نهم کلیه بخش های مرتبط با یک TextView را مورد بررسی قرار دادیم به جزء بخشی که مرتبط با متن داخل آن TextView بود. برای همین منظور کد مرتبط با UI پروژه ای که در قسمت هشتم ایجاد کردیم را باز می نماییم:
در تگ مربوط به TextView در خط آخر تگ android:text="@string/hello" را مشاهده می کنیم. به طور کلی می توان گفت که این خط از کد مسئول نمایش دادن نوشته داخل TextView می باشد. اگر خاطرمان باشد نوشته داخل این TextView معادل با Hello World, MainActivity! می باشد اما این در حالی است که در این تگ چیزی به جزء hello نمی بینیم. به منظور روشن شدن این مسئله به پنجره Package Explorer باز می گردیم:
همانطور که در تصویر فوق ملاحظه می شود زیرشاخه این پروژه تحت عنوان My First Android Project فولدری تحت عنوان res وجود دارد. پس از باز کردن فولدر res فولدری تحت عنوان values وجود دارد که در تصویر فوق با یک فلش قرمز رنگ مشخص شده است. پس از باز کردن این فولدر همانطور که در تصویر فوق با یک بیضی قرمز رنگ مشخص شده است فایلی تحت عنوان strings.xml وجود دارد. به طور کلی می توان گفت که این فایل مسئول ذخیره سازی متون در یک اپلیکیشن می باشد. برای درک بهتر ماهیت این فایل با دو بار کلیک کردن روی آن در محیط اصلی اکلیپس باز خواهد شد:
همانطور که در تصویر فوق ملاحظه می شود فلش قرمز زنگ نشان دهنده گزینه ای تحت عنوان hello است و این hello همان hello یی است که در TextView به آن اشاره کردیم. در صورتیکه یک بار روی گزینه hello کلیک کنیم خواهیم دید که به رنگ آبی در خواهد آمد سپس اگر به کادر قرمز رنگ توجه کنیم می بینیم که در بخش Name به معنی "نام" واژه hello نوشته شده و در بخش Value به معنی "مقدار" Hello World, MainAvtivity! نوشته شده است.
در این پنجره دکمه ای تحت عنوان Add به معنی "اضافه کردن" وجود دارد که می توانیم از آن برای ایجاد متون جدید استفاده کنیم. برای روشن شدن این مسئله به ذکر مثالی اکتفا می کنیم. فرض کنیم که می خواهیم به جای Hello World, MainActivity! می خواهیم نام خود را روی صفحه نمایش دهیم. برای این منظور روی دکمه Add کلیک کرده و پنجره ای به شکل زیر خواهیم دید:
همانطور که در تصویر فوق با یک بیضی قرمز رنگ مشخص شده است، روی گزینه String دو بار کلیک می کنیم و یا پس از انتخاب آن روی دکمه OK کلیک می کنیم(در حقیقت از آنجا که می خواهیم یک متن جدید ایجاد کنیم می بایست از گزینه String استفاده کنیم. به طور مثال برای تعریف یک رنگ جدید می توان از گزینه Color استفاده کرد. موارد دیگر در آموزش های آتی بسته به نیاز پروژه ها مورد بررسی قرار خواهند گرفت):
همانطور که در تصویر فوق ملاحظه می شود پس از کلیک کردن روی دکمه OK به پنجره قبل بازگشته با این تفاوت که گزینه دیگری همانطور که با یک بیضی قرمز رنگ مشخص شده است تحت عنوان String به لیست اضافه شده است. در بخشی که با یک کادر قرمز رنگ مشخص شده است در بخش Name نامی را برای این String در نظر می گیریم. به طور مثال بنده نام developer به معنی "توسعه دهنده" را تایپ می کنم(توجه داشته باشید که حرف اول این نام با حرف کوچک تایپ شده است). سپس در بخش Value عبارت I am Behzad Moradi به معنی "من بهزاد مرادی هستم" را تایپ می کنم(فراگیران می توانند نام خود و یا هر چیزی دیگری را تایپ کنند). نکته ای که در اینجا حائز اهمیت است این است که برخلاف بخش Name که در آن می بایست اصول خاصی را برای نامگذاری استفاده کرد و مثلا به هیچ وجه از فاصله استفاده نکرد، در بخش Value هر چیزی را می توانیم وارد کنیم تا جاییکه حتی می توان نام خود را به فارسی بنویسیم:
همانطور که در تصویر فوق ملاحظه می شود مقادیر مرتبط با Name و Value وارد شده اند و به محض اینکه فایل خود را از طریق فشردن هم زمان دکمه های Ctrl و S و یا از طریق منوی اصلی گزینه File سپس گزینه Save ذخیره سازیم، خواهیم دید که گزینه جدید که با فلش قرمز رنگ در تصویر قبل تحت عنوان String به لیست اضافه شده بود بلافاصله به نامی که در بخش Name وارد کرده ایم یا در این مثال همان واژه developer تغییر نام می دهد. در همین مرحله ادامه آموزش در مورد پنجره بالا را متوقف می کنیم چرا که می خواهیم در اولین برنامه اندروید خود نام خود را به نمایش در آوریم. برای این منظور به فایل main.xml رفته و آنرا به صورت زیر ویرایش می کنیم:
همانطور که در کد فوق ملاحظه می شود در تگ مربوط به text به جای واژه hello واژه جدیدی که تحت عنوان developer ساختیم را می نویسیم و پس از Save کردن همانطور که قبلا آموزش داده شد اپلیکیشن خود را از طریق Emulator اجرا می کنیم:
همانطور که در تصویر فوق که از Emulator گرفته شده است مشاهده می شود عبارت قبلی با عبارتی که برای String جدید خود تحت عنوان developer در نظر گرفتیم یا همان جمله I am Behzad Moradi نمایش داده می شود. اکنون مجدد به فایل strings.xml باز می گردیم:
همانطور که در تصویر فوق ملاحظه می شود در پایین این پنجره یک Tab تحت عنوان Resources به معنی "منابع" و یک Tab دیگر تحت عنوان strings.xml وجود دارد. پیش از آنکه روی Tab مربوط به strings.xml کلیک کنیم توجه مان را به String دیگر تحت عنوان app_name که در لیست دیده می شود جلب می کنیم که در ادامه آموزش به معرفی آن خواهیم پرداخت:
به طور کلی می توان گفت که Tab مربوط به strings.xml همان Tab مربوط به Resources است با این تفاوت که به صورت کد نمایش داده می شود. دقیقاً همان سه String یی که در پنجره قبل وجود داشتند با همان نام در این پنجره به شکل کد نمایش داده شده اند. همانطور که در کد فوق مشاهده می شود مابین دو تگ و جملاتی به رنگ روشن نوشته شده اند که این جملات دقیقاً همان جملاتی هستند که از طریق نام یک String انتقال داده شده و به نمایش در می آید. پیش از این، در مورد String یی تحت عنوان app_name صحبت کردیم که متن مرتبط با آن My First Android Project می باشد. این String زمانیکه در حین ساخت یک پروژه جدید اقدام به انتخاب نامی برای اپلیکیشن خود می نماییم ایجاد شده و نام مد نظر ما را در خود جای می دهد. اما اکنون ببینیم که این String در کجای اپلیکیشن مورد استفاده قرار می گیرد:
پس از باز کردن فایل AndroidManifest.xml کدی به صورت فوق ملاحظه خواهیم کرد. در تنها تگ مربوط به activity این فایل تگی تحت عنوان android:label وجود دارد که مقدار اختصاص داده شده به آن همین app_name است.
اگر به نحوه لینک دادن String های ایجاد شده مثلاً همین String مرتبط با app_name در کد فوق توجه کرده باشیم، خواهیم دید که اول می بایست یک علامت @ قرار داده سپس کلید واژه string را نوشته و در نهایت پس از قرار دادن یک علامت / نام String مد نظر را می نویسیم که به طور کامل به صورت زیر خواهد بود:
به طور کلی می توان گفت که دلیل اصلی استفاده از فایل strings.xml برای ذخیره سازی متون در یک اپلیکیشن، امکان برخورداری از قابلیت تغییر زبان است. به عبارت دیگر ما می توانیم چندین فولدر values برای زبان های مختلف در نظر بگیریم و محتویات فایل strings.xml داخل آنها را بسته به نوع زبان مدنظر ویرایش کنیم تا هر زمان که کاربر زبان دستگاه خود را تغییر داد، اپلیکیشن به صورت خودکار از منابع مرتبط با آن زبان انتخاب کند. حال چنانچه نخواهیم از این قابلیت اندروید استفاده کنیم، می توان به سادگی فایل strings.xml را نادیده گرفته و متن خود را به صورت زیر وارد کرد:
همانطور که در تصویر فوق ملاحظه می شود، کد @string/ را که به اندروید دستور می دهد تا به فایل strings.xml رجوع کند را حذف کرده ایم و مستقیماً عبارت This is a new text! به معنی "این یک متن جدید است!" را وارد می کنیم. حال به محض اینکه فایل خود را Save کنیم همانطور که در تصویر فوق ملاحظه می شود یک علامت اخطار زرد رنگ نمایان خواهد شد. چنانچه نشانگر موس خود را روی آن قرار دهیم، عبارت Hardcoded “This is a new text!”, should use @string resource به معنی " عبارت “This is a new text!” به صورت Hardcoding وارد شده است، شما بایستی از فایل strings استفاده کنید" نشان داده خواهد شد(در ادامه با اصطلاح Hardcoding بیشتر آشنا خواهید شد). در حقیقت می توان گفت که این نشانگر زرد رنگ یک Warning یا "هشدار" است و به هیچ وجه یک Error یا "خطا" نمی باشد. این هشدار به ما اطلاع می دهد که می بایست متن خود را داخل فایل strings بنویسیم تا چنانچه خواستیم اپلیکیشن خود را برای زبان های مختلف طراحی کنیم با مشکل مواجه نشویم. به سادگی می توان هشدارهایی از این دست را نادیده بگیریم.
به طور خلاصه در برنامه نویسی زمانیکه اطلاعات در خود Source Code یا همان کد برنامه وارد شوند و این اطلاعات از منابع خارجی مثل strings.xml وارد کد نشوند ما Hardcoding انجام داده ایم. به عبارت دیگر با Hardcoding امکان ویرایش اطلاعات به طور مستقیم از بین خواهد رفت و این مسئله Flexibility یا "انعطاف پذیری" برنامه را کاهش خواهد داد.
مدیر تالار های: