واحد سازنده اصلی واسط کاربری یک شیء View است که از کلاس View ایجاد شده است و یک ناحیه مستطیل شکل را بر روی صفحه اشغال می کند و مسئول ترسیم و اداره رویداد های مربوطه است. View کلاس پایه برای ویجت هاست، که برای ایجاد مولفه های واسط کاربری تعاملی مانند دکمه ها، فیلدهای متنی و غیره به کار می روند.
ViewGroup یک زیر کلاس (کلاس فرعی) از View است و یک محفظه نامرئی را ایجاد می کند که سایر View ها یا ViewGroups ها را نگه می دارد و ویژگی های صفحه بندی آنها را تعریف می کند.
در سطح سوم ما صفحه بندی های مختلفی داریم که زیر کلاس های کلاس ViewGroup هستند و یک صفحه بندی نمونه، ساختار بصری یک واسط کاربری اندرویدی را تعریف می کند و می تواند یا در زمان اجرا با استفاده از اشیا View/ViewGroup ایجاد شود و یا شما می توانید صفحه بندی خود را با استفاده از فایل XML، main_layout.xml که در پوشه ی res/layout پروژه تان قرار دارد، مشخص کنید.
این خودآموز بیشتر بر مبنای ایجاد واسط گرافیکی کاربری تان بر اساس صفحه بندی های تعریف شده در فایل XML است. یک صفحه بندی (layout) می تواند شامل هر نوع ویجتی مانند دکمه ها، برچسب ها (label)، کادرهای متنی (textbox ها) و غیره باشد. بخش زیر یک مثال ساده از فایل XML ای است که دارای LinearLayout (صفحه بندی خطی) است.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is a TextView" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is a Button" /> <!-- More GUI components go here --> </LinearLayout>
پس از تعریف layout، همانطور که در پایین نشان داده شده است، می توانید منبع layout را در پیاده سازی callback ، Activity.onCreate() از کد اپلیکیشن خود بارگذاری کنید.
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
تعدادی Layout به وسیله ی اندروید ایجاد شده اند که شما تقریبا از آنها در تمام اپلیکیشن های اندرویدی برای ایجاد view های مختلف استفاده می کنید.
شماره | Layout و توصیف |
۱ | Linear Layout(لینک)
LinearLayout یک گروه view است که view های فرزند را در یک جهت واحد (افقی یا عمودی) ردیف می کند. |
۲ | Relative Layout (لینک)
RelativeLayout یک گروه view است که view های فرزند را در مکان های مربوطه نمایش می دهد. |
۳ | (لینک)Table Layout
TableLayout، view، ای است که view های فرزند را در سطر ها و ستون ها گروه بندی می کند. |
۴ | Absolute Layout (لینک)
AbsoluteLayout شما را قادر می سازد که مکان دقیق فرزندان آن را تعیین کنید. |
۵ | Frame Layout (لینک)
FrameLayout مکانی بر روی صفحه است که شما می توانید از آن برای نمایش یک view واحد، استفاده کنید. |
۶ | List View (لینک)
یک گروه view است که لیستی از آیتم های قابل اسکرول کردن را نمایش می دهد. |
۷ | Grid View (لینک)
یک گروه view (ViewGroup) است که آیتم ها را در یک صفحه (grid) دو بعدی قابل اسکرول کردن نمایش می دهد. |
هر Layout دارای مجموعه ای از ویژگی هاست که خصوصیات بصری آن Layout را تعریف می کنند. تعدادی ویژگی مشترک در بین تمام Layout ها وجود دارد و ویژگی های دیگری نیز وجود دارد که مختص هر layout است. در ادامه تعدادی از ویژگی های مشترکی که برای تمام Layout ها به کار می روند لیست شده اند.
شماره | ویژگی و توصیف |
۱ | android:id
شناسه ای است که به صورت منحصر به فرد view را مشخص می کند. |
۲ | android:layout_width عرض Layout را مشخص می کند. |
۳ | android:layout_height
ارتفاع Layout را مشخص می کند. |
۴ | android:layout_marginTop
نشان دهندهی فضای اضافی در قسمت بالای Layout است. |
۵ | android:layout_marginBottom
نشان دهندهی فضای اضافی در قسمت پایین Layout است. |
۶ | android:layout_marginLeft
نشان دهندهی فضای اضافی در سمت چپ Layout است. |
۷ | android:layout_marginRight
نشان دهندهی فضای اضافی در سمت راست Layout است. |
۸ | android:layout_gravity
نحوه قرارگیری view های فرزند را تعیین می کند. |
۹ | android:layout_weight
تعیین میکند که چه مقدار فضای اضافی در Layout باید به view اختصاص داده شود. |
۱۰ | android:layout_x
مختصاتِ x مربوط به Layout را مشخص می کند. |
۱۱ | android:layout_y
مختصات y مربوط به Layout را مشخص می کند. |
۱۲ | android:paddingLeft
مختصاتِ نشان دهنده فضای پر شده سمت چپ Layout است |
۱۳ | android:paddingRight
مختصاتِ نشان دهنده فضای پر شده سمت راست Layout است |
۱۴ | android:paddingTop
نشان دهنده فضای پر شده بالای Layout است |
۱۵ | android:paddingBottom
نشان دهنده فضای پر شده پایین Layout است |
در اینجا عرض و ارتفاع ابعاد layout/view هستند که می توانند بر حسب dp (پیکسل های مستقل از تراکم)، sp (پیکسل های مستقل از مقیاس)، pt (نقاطی که به اندازه ۱/۷۲ ام، از یک اینچ هستند)، px (پیکسل ها)، mm(میلیمتر) و نهایتا بر حسب (اینچ) بیان شوند.
شما می توانید عرض و ارتفاع را با اندازه گیری دقیق مشخص کنید، ولی اغلب از یکی از این ثوابت برای تنظیم عرض یا ارتفاع استفاده می شود.
ویژگی Gravity نقش مهمی را در تعیین مکان شی view بازی می کند و می تواند یک یا تعداد بیشتری از ثابت های زیر را (که به وسیله ی “|” از هم جدا می شوند) بگیرد.
ثابت | مقدار | توصیف |
Top | ۰x30 | شی را بدون تغییر سایز به بالای محفظه[۱] آن می برد. |
bottom | ۰x50 | شی را بدون تغییر سایز به پایین محفظه آن می برد. |
left | ۰x03 | شی را بدون تغییر سایز به سمت چپ محفظه آن می برد. |
right | ۰x05 | شی را بدون تغییر سایز به سمت راست محفظه آن می برد. |
center_vertical | ۰x10 | شی را در مرکز عمودی محفظه آن قرار می دهد. |
fill_vertical | ۰x70 | در صورت نیاز سایز عمودی شی را افزایش می دهد طوری که شی کاملا محفظه اش را پر کند. |
center_horizontal |
۰x01
|
شی را بدون تغییر سایز در مرکز عمودی محفظه آن قرار می دهد. |
fill_horizontal | ۰x07 | در صورت نیاز سایز افقی شی را افزایش میدهد طوریکه شی کاملا محفظه اش را پر کند. |
Center | ۰x11 | شی را بدون تغییر سایز در هر دو جهت محورهای عمودی و افقی در مرکز محفظه قرار می دهد. |
Fill | ۰x77 | در صورت نیاز سایز افقی و عمودی شی را طوری افزایش می دهد که شی کاملا محفظه اش را بپوشاند. |
clip_vertical | ۰x80 | یک گزینه اضافی که می تواند برای داشتن لبه بالایی و / یا لبه پایینی شی فرزند که با توجه به مرزهای محفظه برش می خورد، به کار برود. برش لبه ها بر مبنای مرکز ثقل عمودی خواهد بود. یک مرکز ثقل بالا لبه پایینی را قطع می کند. و یک مرکز ثقل پایین، لبه بالایی را قطع می کند و هیچیک از این دو، هر دو لبه را با هم قطع نمی کنند |
clip_horizontal | ۰x08 | یک گزینه اضافی که می تواند برای داشتن لبه بالایی و / یا لبه پایینی شی فرزند که با توجه به مرزهای محفظه برش می خورد، به کار برود. برش لبه ها بر مبنای مرکز ثقل افقی خواهد بود. یک مرکز ثقل سمت چپ لبهی سمت راست را قطع می کند. و یک مرکز ثقل سمت راست، لبهی سمت چپ را قطع می کند و هیچیک از این دو، هر دو لبه را با هم قطع نمی کنند. |
Start | ۰x00800003 | شی را بدون تغییر سایز به ابتدای محفظه آن می برد. |
End | ۰x00800005 | شی را بدون تغییر سایز به انتهای محفظه آن می برد. |
همون طور که در جدول بالا گفته شد، مقدار android:ID باید منحصر به فرد باشد. نحوه نامگذاری ID یک View در اندروید به صورت زیر است.
android:id="@+id/my_button"
در ادامه توصیف مختصری از علامت های @ و + ارائه شده است.
Button myButton = (Button) findViewById(R.id.my_button);