منبع چیدمان

یک منبع طرح‌بندی، معماری UI را در یک Activity یا جزء یک UI تعریف می‌کند.

محل فایل:
res/layout/ filename .xml
نام فایل به عنوان شناسه منبع استفاده می شود.
نوع داده منبع کامپایل شده:
اشاره گر منبع به یک منبع View (یا زیر کلاس).
مرجع منبع:
در جاوا: R.layout. filename
در XML: @[ package :]layout/ filename
نحو:
<?xml version="1.0" encoding="utf-8"?>
<ViewGroup
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@[+][package:]id/resource_name"
    android:layout_height=["dimension" | "match_parent" | "wrap_content"]
    android:layout_width=["dimension" | "match_parent" | "wrap_content"]
    [ViewGroup-specific attributes] >
    <View
        android:id="@[+][package:]id/resource_name"
        android:layout_height=["dimension" | "match_parent" | "wrap_content"]
        android:layout_width=["dimension" | "match_parent" | "wrap_content"]
        [View-specific attributes] >
        <requestFocus/>
    </View>
    <ViewGroup >
        <View />
    </ViewGroup>
    <include layout="@layout/layout_resource"/>
</ViewGroup>

نکته: عنصر ریشه می‌تواند یک ViewGroup ، یک View یا یک عنصر <merge> باشد، اما تنها یک عنصر ریشه می‌تواند وجود داشته باشد و باید دارای ویژگی xmlns:android با فضای نام android باشد، همانطور که در مثال دستوری قبلی نشان داده شده است.

عناصر:
<ViewGroup>
ظرفی برای سایر عناصر View . انواع مختلفی از اشیاء ViewGroup وجود دارد، و هر کدام به شما امکان می دهد طرح بندی عناصر فرزند را به روش های مختلف مشخص کنید. انواع مختلف اشیاء ViewGroup عبارتند از LinearLayout ، RelativeLayout و FrameLayout .

فرض نکنید که هر اشتقاقی از ViewGroup نماهای تودرتو را می پذیرد. برخی از گروه‌های view پیاده‌سازی‌های کلاس AdapterView هستند که فرزندان خود را فقط از یک Adapter تعیین می‌کنند.

ویژگی ها:

android:id
شناسه منبع یک نام منبع منحصربه‌فرد برای عنصر، که می‌توانید از آن برای دریافت ارجاع به ViewGroup از برنامه خود استفاده کنید. برای اطلاعات بیشتر به بخش Value for android:id مراجعه کنید.
android:layout_height
بعد یا کلمه کلیدی . مورد نیاز . ارتفاع برای گروه، به عنوان یک مقدار بعد (یا منبع بعد ) یا یک کلمه کلیدی ( "match_parent" یا "wrap_content" ). برای اطلاعات بیشتر، به بخش Values ​​for android:layout_height و android:layout_width مراجعه کنید.
android:layout_width
بعد یا کلمه کلیدی . مورد نیاز . عرض گروه، به عنوان یک مقدار ابعاد (یا منبع بعد ) یا یک کلمه کلیدی ( "match_parent" یا "wrap_content" ). برای اطلاعات بیشتر، به بخش Values ​​for android:layout_height و android:layout_width مراجعه کنید.

کلاس پایه ViewGroup از ویژگی های بیشتری پشتیبانی می کند و بسیاری دیگر توسط هر پیاده سازی ViewGroup پشتیبانی می شود. برای ارجاع همه ویژگی‌های موجود، به مستندات مرجع مربوطه برای کلاس ViewGroup ، برای مثال، ویژگی‌های LinearLayout XML مراجعه کنید.

<View>
یک مؤلفه UI مجزا که معمولاً به عنوان ویجت نامیده می شود. انواع مختلف اشیاء View عبارتند از TextView ، Button و CheckBox .

ویژگی ها:

android:id
شناسه منبع یک نام منبع منحصربه‌فرد برای عنصر، که می‌توانید از آن برای دریافت ارجاع به View از برنامه خود استفاده کنید. برای اطلاعات بیشتر به بخش Value for android:id مراجعه کنید.
android:layout_height
بعد یا کلمه کلیدی مورد نیاز . ارتفاع عنصر، به عنوان یک مقدار ابعاد (یا منبع بعد ) یا یک کلمه کلیدی ( "match_parent" یا "wrap_content" ). برای اطلاعات بیشتر، به بخش Values ​​for android:layout_height و android:layout_width مراجعه کنید.
android:layout_width
بعد یا کلمه کلیدی . مورد نیاز . عرض عنصر، به عنوان یک مقدار ابعاد (یا منبع ابعاد ) یا یک کلمه کلیدی ( "match_parent" یا "wrap_content" ). برای اطلاعات بیشتر، به بخش Values ​​for android:layout_height و android:layout_width مراجعه کنید.

کلاس پایه View از ویژگی های بیشتری پشتیبانی می کند و بسیاری دیگر توسط هر پیاده سازی View پشتیبانی می شوند. برای اطلاعات بیشتر، Layouts را بخوانید. برای مرجعی از تمام ویژگی‌های موجود، به مستندات مرجع مربوطه، به عنوان مثال، ویژگی‌های TextView XML مراجعه کنید.

<requestFocus>
هر عنصری که یک شی View را نشان می‌دهد می‌تواند شامل این عنصر خالی باشد که تمرکز اولیه والد آن را روی صفحه نمایش می‌دهد. شما می توانید تنها یکی از این عناصر را در هر فایل داشته باشید.
<include>
شامل یک فایل طرح بندی در این طرح بندی است.

ویژگی ها:

layout
منبع چیدمان مورد نیاز . ارجاع به یک منبع طرح بندی.
android:id
شناسه منبع شناسه داده شده به نمای ریشه در طرح بندی ارائه شده را لغو می کند.
android:layout_height
بعد یا کلمه کلیدی . ارتفاع داده شده به نمای ریشه در طرح بندی ارائه شده را لغو می کند. فقط در صورتی موثر است که android:layout_width نیز اعلام شده باشد.
android:layout_width
بعد یا کلمه کلیدی عرض داده شده به نمای ریشه در طرح بندی ارائه شده را لغو می کند. فقط در صورتی موثر است که android:layout_height نیز اعلام شده باشد.

می‌توانید هر ویژگی طرح‌بندی دیگری را در <include> که توسط عنصر ریشه در طرح‌بندی موجود پشتیبانی می‌شود، اضافه کنید و آنها را باطل می‌کنند که در عنصر ریشه تعریف شده‌اند.

احتیاط: اگر می‌خواهید با استفاده از تگ <include> ویژگی‌های layout را لغو کنید، باید هر دو android:layout_height و android:layout_width را لغو کنید تا سایر ویژگی‌های طرح‌بندی اعمال شوند.

راه دیگر برای گنجاندن یک طرح، استفاده از ViewStub است: یک نمای سبک وزن که تا زمانی که به صراحت آن را زیاد نکنید، فضای طرح بندی را مصرف نمی کند. وقتی این کار را انجام می دهید، شامل یک فایل طرح بندی است که با ویژگی android:layout آن تعریف شده است. برای اطلاعات بیشتر در مورد استفاده از ViewStub ، بارگذاری نماهای درخواستی را بخوانید.

<merge>
یک عنصر ریشه جایگزین که در سلسله مراتب طرح بندی ترسیم نشده است. استفاده از آن به عنوان عنصر ریشه زمانی مفید است که می دانید این طرح بندی در طرحی قرار داده شده است که از قبل حاوی View والد مناسب برای حاوی فرزندان عنصر <merge> است.

این به ویژه زمانی مفید است که می‌خواهید این طرح‌بندی را با استفاده از <include> در فایل طرح‌بندی دیگری قرار دهید و این طرح‌بندی به محفظه ViewGroup دیگری نیاز ندارد. برای اطلاعات بیشتر درباره ادغام طرح‌بندی‌ها، استفاده مجدد از طرح‌بندی‌ها را با <include> بخوانید.

ارزش برای android:id

برای مقدار ID، شما معمولاً از این فرم نحوی استفاده می کنید: "@+id/ name " ، همانطور که در مثال زیر نشان داده شده است. نماد مثبت، + ، نشان می دهد که این یک شناسه منبع جدید است، و ابزار aapt یک عدد صحیح منبع جدید در کلاس R.java ایجاد می کند، اگر قبلا وجود نداشته باشد.

<TextView android:id="@+id/nameTextbox"/>

نام nameTextbox اکنون یک شناسه منبع متصل به این عنصر است. سپس می توانید به TextView که شناسه در جاوا به آن مرتبط است مراجعه کنید:

کاتلین

val textView: TextView? = findViewById(R.id.nameTextbox)

جاوا

TextView textView = findViewById(R.id.nameTextbox);

این کد شی TextView را برمی گرداند.

با این حال، اگر قبلاً یک منبع ID تعریف کرده‌اید، و قبلاً از آن استفاده نشده است، می‌توانید با حذف نماد مثبت در مقدار android:id آن شناسه را به عنصر View اعمال کنید.

مقادیر برای android:layout_height و android:layout_width

مقادیر ارتفاع و عرض با استفاده از هر یک از واحدهای ابعاد پشتیبانی شده توسط Android (px، dp، sp، pt، in، mm) یا با کلمات کلیدی زیر بیان می‌شوند:

ارزش توضیحات
match_parent ابعاد را مطابق با بعد عنصر والد تنظیم می کند. در API سطح 8 برای منسوخ کردن fill_parent اضافه شده است.
wrap_content ابعاد را فقط به اندازه مورد نیاز برای تناسب با محتوای این عنصر تنظیم می کند.

عناصر نمای سفارشی

می‌توانید عناصر View و ViewGroup سفارشی ایجاد کنید و آنها را مانند یک عنصر طرح‌بندی استاندارد در طرح‌بندی خود اعمال کنید. همچنین می توانید ویژگی های پشتیبانی شده در عنصر XML را مشخص کنید. برای اطلاعات بیشتر، به ایجاد اجزای نمای سفارشی مراجعه کنید.

مثال:
فایل XML ذخیره شده در res/layout/main_activity.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical" >
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Hello, I am a TextView" />
    <Button android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello, I am a Button" />
</LinearLayout>

این کد برنامه طرح‌بندی یک Activity را در متد onCreate() بارگذاری می‌کند:

کاتلین

public override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)
}

جاوا

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
}
همچنین ببینید: