ودعا findViewById الاختصارات في كوتلن
06 August
نعم هذه اول تدوينة عن الاختصارات في كوتلن وهي ميزة توفر لك القدرة على اختصار الكود و اهم شيء في هذه الميزة وهي التخلص من findViewById بالتاكيد اظن انك قد تعرفت سابقا عليها للوصول الى view في ملف xml .
ميزة الاختصارات او Kotlin Android Extensions
وهي اضافة من كوتلن تخول لك العديد من الخصائص مثل الوصول الى مشهد او fragement من خلال طرق بسيطة بعيدا عن التعقيدات التي لا طائل منها 😢😢وهذا ما سنراه .
1-تفعيل الميزة في الكود :
لتفيعل هذه الميزة ستحتاج الى إضافة الكود التالي في ملف البويلد في الاعلى
بالتاكيد ملف xml يكون مرتبط مع ملف الكوتلن وهذا من الوضوح بمكان من خلال setContentView() :
تخيل معي ان هذا هو ملف xml الخاص بك.
لكن الاشكال الاكبر انه ماذا ان كنت ترغب في اضهار ملف xml غريب داخل ملف xml محلي المتصل بملف الكوتلن.
كنا قبل هذا نستعين ب inflater لكن حاليا اصبح ذلك موضة قديمة 👊😎💪
تخيل معي ان هذا هو ملف اخر (غريب) بداخله مشهد الصور نرغب باضهاره في ملفنا السابق.
ميزة الاختصارات او Kotlin Android Extensions
وهي اضافة من كوتلن تخول لك العديد من الخصائص مثل الوصول الى مشهد او fragement من خلال طرق بسيطة بعيدا عن التعقيدات التي لا طائل منها 😢😢وهذا ما سنراه .
1-تفعيل الميزة في الكود :
لتفيعل هذه الميزة ستحتاج الى إضافة الكود التالي في ملف البويلد في الاعلى
build gradle (module:app)
apply plugin: 'com.android.application' أسفل
apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions'2-الوصول الى ملف xml و بالظبط المشاهد :
بالتاكيد ملف xml يكون مرتبط مع ملف الكوتلن وهذا من الوضوح بمكان من خلال setContentView() :
package com.androidbella.kotlin import.... class Main : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.ac_lesson) //لا حظ انني استطيع اضهارالملف المرغوب من خلال هذه الدالة //setContentView(R.layout.ملف xml الدي ترغب في اضهاره) }}الشاهد من هذا اننا عندما نرغب في الوصول الى مشاهد الملف الذي اخترته كل ما عليك اضافة هذه السطر الى ملف الكوتلن.
تخيل معي ان هذا هو ملف xml الخاص بك.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/root" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/welcome" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!"/> </RelativeLayout>ونحن نرغب في تغيير النص من خلال ملف الكوتلن ببساطة اضف الكود التالي فوق class
import kotlinx.android.synthetic.main.your_activity.* //غير your activity بما يناسبكو للوصول اليه اكتب id الخاص به .
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //بالنسبة لي id هو welcome welcome.text = "Hello Kotlin!" }لاحظ انه text بديلة ل setText() و يمكنك استعمال اي واحدة تشاء منها:
لكن الاشكال الاكبر انه ماذا ان كنت ترغب في اضهار ملف xml غريب داخل ملف xml محلي المتصل بملف الكوتلن.
كنا قبل هذا نستعين ب inflater لكن حاليا اصبح ذلك موضة قديمة 👊😎💪
تخيل معي ان هذا هو ملف اخر (غريب) بداخله مشهد الصور نرغب باضهاره في ملفنا السابق.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/itemImage" android:layout_width="match_parent" android:layout_height="200dp"/> </RelativeLayout>ما عليك الا الاستعانة بنفس الكود الذي استعملناه للوصول الى مشاهد ملف xml المحلي
import kotlinx.android.synthetic.main.your_activity.* //غير your activity باسم الملف الغريبحسنا الان اضف الكود التالي للوصول الى الملف الغريب
//جلب اللف الغريب الى ملفك الحالي val items = LayoutInflater.from(this).inflate(R.layout.اسم الملف الغريب, null) //اضهار الصورة بالمشهد items.itemImage.setImageResource(مسار الصورة) //اضافته الى relative layout root.addView(items)سنقوم في الدرس المقبل عن fragement
اترك لنا تعليقا