سه شنبه, 18 تیر 1398 18:53

معنای عبارت "@+id" در برنامه نویسی اندروید و تفاوتش با "@id"

اگر میخواین بدونین عبارت @+id/ چیه و چه فرقی با عبارت @id/ توی برنامه نویسی اندروید با زبان جاوا در اندروید استودیو داره، این مطلب رو یه نگاه بندازین. هم بصورت خلاصه و هم بصورت مفصل با مثال توضیح دادم.

تفاوت @+id با @id بصورت خلاصه:

عبارت @+id برای تعریف یک آیتم۱ جدید در منابع۲ استفاده میشه. عبارت @id هم برای فراخوانیِ آیتمی که قبلا در منابع تعرف شده.

 برای مثال: android:id="@+id/txtName" یک آیتم جدید با نام txtName رو در منابع اضافه میکنه. و عبارت android:layout_below="@id/txtName" به txtName که قبلا در منابع تعریف شده اشاره میکنه.


۱ منظور از آیتم میتونه هر ویویی مثل جعبه متن، دکمه و غیره باشه.

۲ منظور از منابع همون Resource های پروژه هستند که در کلاس R.java تعریف میشن

 

تفاوت @+id با @id بصورت مفصل و با شرح کامل:

اگه به تازگی برنامه نویسی اندروید رو شروع کرده باشین و از مرحله نصب اندروید استودیو، آشنایی با محیطش و همچنین مرحله نصب شبیه ساز برای تست اپتون عبور کرده باشین، احتمالا به این مرحله رسیدین که یه دونه جعبه متن (textView) یا دکمه (Button) رو در activity_main.xml تعریف کنین. خب در چنین موقعیتی اگر بخواین یه جعبه متن داشته باشین که قراره توی فایل جاواتون بهش اشاره کنین، این جعبه متن، حتما باید اسم داشته باشه که قابل اشاره کردن باشه. به این اسم در اندروید استودیو میگن id.

مثلا من میخوام یک جعبه متن توی اکتیویتی اصلی برنامه با txtName بسازم:

<TextView
android:id="@+id/txtName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />

 

خب اگر به خط دوم در کد بالا نگاه کنین متوجه این عبارت میشین:

android:id="@+id/txtName"

و اینجا جایی هست که ما به جعبه متن خودمون یک اسم دادیم به نام txtName. اما اون عبارت @+id/ چی هست؟

در برنامه نویسی وقتی میخوایم به یک شی از یک کلاس اشاره کنیم از نقطه استفاده میکنیم. مثلا در یک کلاس جاوا وقتی میخوام به این جعبه متن اشاره کنم ابتدا با نوشتن R کلاس Resorces را فراخوانی میکنم و سپس با زدن نقطه و نوشتن id میگم که در کلاس R به دنبال idها هستم و بعد هم با زدن نقطه دوم و نوشتن txtName میگم در کلاس ریسورسها دنبال آیدی‌ای هستم که نامش txtName هست! اینطوری: R.id.txtName  

خلاصش میشه: برو توی کلاس R و آیدی‌ای رو پیدا کن که اسمش txtName هست. خب تا اینجای کار فهمیدیم که در کلاس جاوا چطور یک شی رو فرا خوانی میکنیم.

حالا اگه بخوایم این فراخوانی رو بجای اینکه در یک کلاس جاوا انجام بدیم در یک فایل XML (یعنی همون جایی که ظاهر اکتیویتی و لایه‌هامون رو طراحی میکنیم) انجام بدیم بجای نوشتن R.id.txtName باید بنویسیم: @id/txtName و این یعنی من دارم به شی‌ای شاره میکنم که اسمش txtNmae هست.

و در نهایت اگر اولین بار باشه که این txtName داره تعریف میشه و تا حالا تعریف نشده بوده کافیه بین علامت @ و علامت / یک علامت + قرار بدیم تا به برنامه بگیم این آیدی رو بساز و به R.java اضافه کن.

دیدگاه شما