آموزش برنامه نویسی اندروید - قسمت ۲۸: آشنایی با فایل XML در طراحی رابط کاربری اپلیکیشن
دوشنبه 30 دی 1392 9:32 AM
واژه XML مخفف واژگان Extensible Markup Language به معنی "زبان نشانه گذاری قابل گسترش" است. این زبان برخلاف HTML که به منظور نمایش داده ها مورد استفاده قرار می گیرد، برای ذخیره سازی و انتقال داده به کار گرفته می شود. شاید از دلایلی که از XML برای برنامه نویسی layout در توسعه اندروید استفاده شده است بتوان به گسترش پذیری آن، سهولت استفاده، خوانایی آن هم توسط انسان و هم توسط سیستم اشاره کرد. از سوی دیگر یک رابط گرافیکی کاربر یا همان GUI که توسط XML ایجاد شده باشد به سادگی قابل تحلیل و نمایش دادن است اما این در حالی است که اگر دیگر زبان ها در ساخت یک GUI استفاده می شد، تحلیل و Compile و اجرای آن به مراتب نسبت به یک فایل XML پیچیده تر می بود.
به منظور درک کامل XML بهتر است layout پروژه ای که در آموزش هشتم تحت عنوان My First Android Project ساختم را مورد بررسی قرار دهیم. برای این منظور فایل main.xml که زیرشاخه layout در فولدر res قرار دارد را باز می کنیم:
همانطور که در تصویر فوق مشاهده می شود، پس از باز کردن فایل main.xml در پایین صفحه با دو گزینه متفاوت رو به رو خواهیم گشت: گزینه اول که با یک بیضی قرمز رنگ نشان داده شده است Graphical Layout به معنی "ساختار گرافیکی" است که نمود گرافیکی یک فایل xml را نشان می دهد. در حقیقت اگر این گزینه انتخاب شده باشد ساختاری مشابه با همان چیزی را خواهیم دید که در یک دستگاه واقعی نمایش داده خواهد شد. گزینه دوم main.xml است که با یک بیضی سبز رنگ نشان داده شده است. در واقع با کلیک کردن روی این گزینه به کدهای XML تشکیل دهنده layout دسترسی پیدا خواهیم کرد:
به محض کلیک کردن روی گزینه main.xml با کدی مشابه کد فوق رو به رو خواهیم شد. خط اول نشانگر شماره نسخه XML است که معادل با 1.0 می باشد و از سوی دیگر نوع رمزگذاری آن معادل با UTF-8 می باشد. UTF مخفف واژگان Unicode Transformation Format به معنی "فرمت تبدیل یونیکد" می باشد(لازم به ذکر است که یونیکد به منزله استانداردی است که از طریق آن کاراکترها و اعداد و علائم در اکثر زبان ها نشان داده می شود). عدد 8 حاکی از آن است که این استاندارد از 8 بیت حافظه برای ذخیره سازی یک کاراکتر استفاده می کند.
کدی که در قسمت فوق ملاحظه می شود به منزلۀ کد اصلی است که مسئول ساخت layout می باشد. کلید واژه LinearLayout به ساختار layout ما اشاره دارد که ساختاری خطی است. به عبارت دیگر عناصری که روی این layout قرار می گیرند به صورت خطی یکی پس از دیگری یا از بالا به پایین و یا از چپ به راست در کنار یکدیگر قرار می گیرند. دستور xmlns:android=http://schemas.android.com/apk/res/android یک namespace به معنی "فضای نام" است که این وظیفه را بر عهده دارد تا از تداخل Tag هایی که دارای شناسه هایی یکسان می باشند جلوگیری به عمل آورد.
برای روشن شدن این مطلب نیاز است تا مثالی دیگری ذکر کنیم. کد زیر حاوی اطلاعات یک جدول در HTML است:
در این آموزش قصد نداریم تا Tag های زبان HTML را مورد بررسی قرار دهیم اما همین قدر لازم است بدانیم که تگ های
و
مسئول ساخت یک جدول در HTML می باشند. حال به کد زیر هم نگاهی می اندازیم:
کد فوق هم حاوی جدولی است که اطلاعاتی پیرامون یک Room به معنی "اتاق" را در خود جای داده است. اکنون فرض کنیم که می خواهیم این دو جدول را در برنامه ای با یکدیگر ادغام کنیم. مشکلی که هم اکنون پیش خواهد آمد این است که سیستم نخواهد توانست تشخیص دهد که منظور ما table بالایی است یا table پایینی، از این رو سردرگم خواهد شد. برای رفع این مشکل می توانیم به سادگی از یک پیشوند استفاده کنیم که در اینصورت کدهای فوق به شکل زیر در خواهند آمد:
اکنون بدون هیچ مشکلی توانستیم دو جدول را با پیشوندهای مجزا با یکدیگر ادغام نموده و هر دو را در کنار یکدیگر بدون هیچ مشکلی قرار دهیم. اما نکته ای که در اینجا حائز اهمیت است این است که هر موقع که در کدهای XML خود از یک پیشوند استفاده می کنیم نیاز است تا یک namespace یا همان "فضای نام" را برای پیشوند خود تعریف کنیم. به طور کلی namespace با قرار دادن دستور xmlns در اولین Tag ایجاد می گردد. ساختار کلی namespace به صورت xmlns:prefix="URI" است به این صورت که پس از دستور xmlns یک علامت : قرار داده سپس پیشوندی که قصد داریم از طریق آن Tag را از یکدیگر مجزا سازیم را نوشته که در مثال های فوق ما از پیشوندهای a و b استفاده کردیم سپس یک علامت مساوی قرار داده و مقابل آن آدرس یک URL را داخل علامت های “ “ قرار می دهیم. در حقیقت اگر بخواهیم کدهای ادغام شده فوق را با نوشتن namespace تکمیل کنیم می بایست کدهای ما به شکل زیر باشند:
حال با قرار دادن دو namespace یکی برای پیشوند a و دیگری برای پیشوند b یک نوع یکنواختی را در کد خود ایجاد کرده زیرا زمانیکه یک namespace برای یک عنصر اصلی که در اینجا
است ایجاد می کنیم، کلیه عناصر زیرشاخه آن نیز از همان namespace تبعیت خواهند کرد.استاندارد نامگذاری Namespace به این شکل است که نامی به شکل آدرس یک URL برای آن در نظر گرفته می شود و علت آن هم ایجاد نامی منحصر به فرد است و در صورتیکه مثلا آدرس http://www.w3schools.com/furniture را در یک مرورگر وب تایپ کنیم به طور حتم با پیغام 404 – The page cannot be found به معنی "این صفحه قابل یافتن نیست" مواجه خواهیم شد زیرا این آدرس حاوی هیچ گونه اطلاعاتی نمی باشد. لازم به ذکر است که این نام همواره می بایست به همین شکلی که ملاحظه می کنیم باشد و در صورتیکه آن را تغییر دهیم اپلیکیشن ما با مشکل مواجه خواهد شد. اکنون که با مفهوم namespace آشنا شدیم مجدد به کد خود نگاهی خواهیم انداخت:
در کد فوق برای Tag مرتبط با یک namespace ایجاد شده است به این صورت که پس از دستور xmlns یک علامت : قرار گرفته و در آن پیشوند android تعریف شده سپس یک علامت مساوی قرار گرفته و مقابل آن داخل علامت های “ “ آدرس URL یی که در کد فوق ملاحظه می شود گنجانده شده است. در حقیقت این آدرس به "ناکجا آباد" خواهد رفت و به عبارت دیگر وجود خارجی ندارد علیرغم اینکه این آدرس وجود ندارد اما این در حالی است که این آدرس برای توسعه فایل های XML اندروید به عنوان یک استاندارد در آمده و نمی بایست آن را تغییر داد. در این مثال از پیشوند android در Tag اصلی استفاده شده است و همانطور که می بینیم در Tag های زیرشاخه Tag اصلی اول نام این پیشوند آمده سپس یک علامت : قرار گرفته و سپس نام Tag نوشته شده است.
مدیر تالار های: