به جای اینکه View ها رو با کدهای XML درست کنیم می تونیم با زبان جاوا این کنترلها رو درست کنیم ؟ مثلا تو سی شارپ این امکان هست که با دستور تکست باکس درست کرد و ... ، اگر چنین کاری شدنی است چه مزیتی نسبت به روش معمول داره ؟
خیر کلاً اندروید از روش XML استفاده میکنه. البته توی دوره پیشرفته اندروید روش ساخت کنترلهای سفارشی رو با ترسیمات دلخواه توضیح میدیم. میتونید توی سرفصلهای دوره پیشرفته اندروید در آموزشگاه نویدگران دانش ببینید:
http://www.nada-learn.ir/course/advanced-android
اگر منظورت از view عناصر رابط گرافیکی مثل دکمه و غیره هست، تاجاییکه میدونم میشه. یعنی من اینو در چند منبع آموزشی اندروید که قبلا خوندم دیده بودم تست هم کرده بودم. البته مطمئن نبودم درست یادم نبود، بخاطر همین الان یکی از اون کتابها رو باز کردم دیدم بله ظاهرا همینطوره و مثالش رو داره. اصلا اولش از این روش شروع کرده و بعد رسیده به روش XML.
اینم بخشی از متن خودش در این مورد:
نقل قول:While it is technically possible to create and attach widgets to our activity purely through Java code, the way we did in the preceding chapter, the more common approach is to use an XML-based layout file. Dynamic instantiation of widgets is reserved for more complicated scenarios, where the widgets are not known at compile-time (e.g., populating a column of radio buttons based on data retrieved off the Internet).
ترجمه: درحالیکه از نظر فنی ایجاد کردن و اضافه کردن عناصر رابط گرافیکی به اکتیویتی صرفا از طریق کد جاوا امکان پذیر است، همان روشی که ما در فصل قبل استفاده کردیم، روش متداول تر استفاده از یک فایل layout بر اساس XML است. ایجاد دینامیک عناصر رابط گرافیکی برای سناریوهای پیچیده تر کنار گذاشته شده است، جاییکه این عناصر در زمان کامپایل مشخص نیستند (بطور مثال ایجاد یک ستون از دکمه های رادیویی بر اساس داده هایی که از اینترنت دریافت شده است).
منبع: The Busy Coder's Guide to Android Development - by Mark L. Murphy
اینم یه قطعه کد از یه مثال خیلی ساده و پایه که توی کتاب هست:
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
btn=new Button(this);
btn.setOnClickListener(this);
updateTime();
setContentView(btn);
}
نمونه های پیچیده تر هم طبیعتا میشه درست کرد. حتی ایجاد layout های پیچیده هم تاجاییکه میدونم میشه مستقیما و فقط از طریق کدهای جاوا انجام داد. جاوا همون جاواست، حتی جاوای اندروید هم با جاوای اصلی این مشترکات رو داره در اصل فرق چندانی نداره، ولی اندروید اومده یکسری چیزهای اضافی و روشهای خودش رو هم بهش اضافه کرده.
البته مسلما بعضی چیزها اختصاصی خود اندرویده و باید در فایلهای XML انجام بشه. مثلا تاجاییکه میدونم شما اکتیویتی های برنامه رو باید اول توی فایل XML معرفی کنی که بعد کدهای جاواشون بتونه اجرا بشه.
کلاً شما با متدهایی مثل onDraw و مدیریت رفتارهای Touch و... میتونید کنترل سفارشی بسازین ولی چیدمان Layout همچنان از همون ساختار XML استفاده میکنه. برای مثال توی یکی از آموزشهای دوره پیشرفته خودمون، ساخت یک کنترل کاملاً سفارشی که از هیچ XML خاصی برای نمایش خودش استفاده نمیکنه رو توضیح دادیم و در عمل هم با کمک Thread و... پیاده سازیش کردیم ولی باز هم برای نمایشش توی صفحه باید دست به دامن XML بشیم.