انشاء عناصر مخصصة في الاندرويد باستعمال كوتلن
04 March
حسنا العناصر المخصصة او customView اظنك استعملت العناصر المخصصة الاف المرات دون معرفة كيفية عملها منها textView و editText و غيرها الكثير لكن هل تعلم كيفة انشاء واحدة خاصة بك اذن هيا بنا لنبحر في هذا البحر الشاسع نحو احتراف اندرويد بكل ما للكلمة من معنى .
اذا وصلت الى 1000 لايك في اقل من اسبوع على صفحتي ساقوم بانشاء فيديو zero to hero في العناصر المخصصة
0-ما هي مهمة اليوم : ببساطة دائرة في وسطها نص بسيط .
1-لماذا استعمل العناصر المخصصة اصلا :
ابسط و اسهل : يمكنك مثلا وضع خط على textView مرة واحدة و لن تحتاج الى وضع الخط كل مرة تقوم باستدعائه.
تجنب وضع الكثير من العناصر في الكود فتسطيع وضع عنصر واحد كافي و وافي يعمل افضل من العناصر الاخرى .
في بعض الاحيان تحتاج الى اضافة خاصية الى عنصر لكن لا تستطيع من خاصية typeface التي لا توجد في ملف xml و سناتي على ذكر هذا .
2-الهيكلة :
هذا الكود يقوم باخد السياق context او الاكتفتي التي سيقوم بالرسم عليها .
و ايضا الخصائص التي تضعها في ملف xml على الفيو .
ثم خصائص التي توجد بملف الستايل .
3- انشاء ملف attr.xml
هذا الملف هو الذي ينقل الخصائص التي تضعها ب xml الى customView لانشاء الملف:
File -> Value Resource File ->attr ->finish
4-اضافة العنصر الى activity :
لا تنسى تتبع اخبار مطوري اندرويد على صفحتنا على الفايس بوك
اذا وصلت الى 1000 لايك في اقل من اسبوع على صفحتي ساقوم بانشاء فيديو zero to hero في العناصر المخصصة
0-ما هي مهمة اليوم : ببساطة دائرة في وسطها نص بسيط .
1-لماذا استعمل العناصر المخصصة اصلا :
ابسط و اسهل : يمكنك مثلا وضع خط على textView مرة واحدة و لن تحتاج الى وضع الخط كل مرة تقوم باستدعائه.
تجنب وضع الكثير من العناصر في الكود فتسطيع وضع عنصر واحد كافي و وافي يعمل افضل من العناصر الاخرى .
في بعض الاحيان تحتاج الى اضافة خاصية الى عنصر لكن لا تستطيع من خاصية typeface التي لا توجد في ملف xml و سناتي على ذكر هذا .
2-الهيكلة :
class KotlinView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : View(context, attrs, defStyleAttr)
هذا الكود يقوم باخد السياق context او الاكتفتي التي سيقوم بالرسم عليها .
و ايضا الخصائص التي تضعها في ملف xml على الفيو .
ثم خصائص التي توجد بملف الستايل .
3- انشاء ملف attr.xml
هذا الملف هو الذي ينقل الخصائص التي تضعها ب xml الى customView لانشاء الملف:
File -> Value Resource File ->attr ->finish
<resources> <declare-styleable name="KotlinView"> <attr format="color" name="circleColor"> <attr format="string" name="circleLabel"></attr> <attr format="color" name="labelColor"></attr> </attr></declare-styleable> </resources>
4-اضافة العنصر الى activity :
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <com.androidbella.learnprog.helper.KotlinView android:id="@+id/custView" android:layout_width="374dp" android:layout_height="wrap_content" custom:circleColor="#29536b" custom:circleLabel="Hello" custom:labelColor="#ffff66" /> </RelativeLayout>5-رسم الدالة باستعمال دالة onDraw
class KotlinView @JvmOverloads constructor( context: Context, private var attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : View(context, attrs, defStyleAttr){ //circle | text colors | label text private var circleCol: Int = 0 private var labelCol: Int = 0 private var circleText: String? = null //paint for drawing custom view private var circlePaint: Paint? = null init { val a = context.theme.obtainStyledAttributes(attrs, R.styleable.kotlinView, 0, 0) try { //اخد معطيات من العنصر الخاص بنا circleText = a.getString(R.styleable.kotlinView_circleLabel) circleCol = a.getInteger(R.styleable.kotlinView_circleColor, 0) labelCol = a.getInteger(R.styleable.kotlinView_labelColor, 0) } finally { a.recycle() } circlePaint= Paint() } //هذه الدالة هي من سترسم الدائرة override fun onDraw(canvas: Canvas?) { super.onDraw(canvas) //رسم الدائرة val viewWidthHalf = this.measuredWidth / 2f val viewHeightHalf = this.measuredHeight / 2f //اخذ قيمة الانحناء من الطول او العرض حسب الاصغر val radius: Float radius = if (viewWidthHalf > viewHeightHalf) viewHeightHalf - 10f else viewWidthHalf - 10f //اضافة بعض الخصائص للرسام circlePaint!!.style = Paint.Style.FILL circlePaint!!.isAntiAlias = true //تغيير اللون circlePaint!!.color = circleCol canvas!!.drawCircle(viewWidthHalf , viewHeightHalf, radius, circlePaint) //رسم النص circlePaint!!.textAlign = Paint.Align.CENTER circlePaint!!.color=Color.WHITE circlePaint!!.textSize = 50F canvas.drawText(circleText, viewWidthHalf, viewHeightHalf, circlePaint); } }ان الهدف الاسمى من هذا الدرس هو تعلم اساسيات انشاء العناصر المخصصة و لا انسى ان جوجل تعتبر العناصر المخصصة من المهارات الاساسية التي لا بد لمطور اندرويد التحلي بها .
لا تنسى تتبع اخبار مطوري اندرويد على صفحتنا على الفايس بوك
اترك لنا تعليقا