OOZOU
تواصلوا معنا
العودة إلى المدونة

طريقة سهلة لبناء ميزة رمز PIN تفاعلية وآمنة في Android

إليكم طريقة سهلة لبناء ميزة رمز PIN تفاعلية (reactive) في Android مع حماية البيانات.

9 سبتمبر 2020
3 دقائق للقراءة
طريقة سهلة لبناء ميزة رمز PIN تفاعلية وآمنة في Android

قبل سنوات عديدة، لم يكن بناء ميزة رمز PIN مع حماية البيانات أمرًا سهلًا من دون Data Binding. كان عليكم ربما إنشاء ملف XML إلى جانب صنف (class) مخصص للعرض، أما مع Data Binding فيمكنكم بناء ميزة رمز PIN بسهولة أكبر.

سأوضح كيفية استخدام Data Binding من خلال بناء ميزة رمز PIN تحدّث واجهة المستخدم تفاعليًا مع كل تغيير في البيانات.

**ما هو Data Binding في Android؟**مكتبة Data Binding مكتبة دعم تتيح لكم ربط مكونات واجهة المستخدم في التخطيطات (layouts) بمصادر البيانات في تطبيقكم باستخدام صيغة تصريحية بدلًا من الربط البرمجي. -- Data Binding Libraryكنت أتساءل: "لماذا نستخدم Data Binding ولدينا Kotlin Synthetics التي تتيح الوصول إلى مكونات الواجهة مباشرة من الـ fragment/activity؟" الجواب أن Data Binding يتيح لكم الوصول إلى الـ ViewModel مباشرة وتفاعليًا من ملف XML، ويمكننا كتابة تعبير بسيط لا يحتاج إلى أي كود برمجي داخل الـ fragment/activity.طريقة التنفيذ.

لنبدأ بملف PinCodeViewModel.kt الذي يحتوي على منطق إضافة أرقام رمز PIN وحذفها.

package com.him.secured_pincode.ui.main

import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel

class PinCodeViewModel : ViewModel() {

    val pinCode = MutableLiveData<String>().also {
        it.value = ""
    }

    val numPadListener = object : NumPadListener {
        override fun onNumberClicked(number: Char) {
            val existingPassCode = pinCode.value ?: ""
            val newPassCode = existingPassCode + number
            pinCode.postValue(newPassCode)
        }

        override fun onEraseClicked() {
            val droppedLast = pinCode.value?.dropLast(1) ?: ""
            pinCode.postValue(droppedLast)
        }
    }

}
<strong>language-</strong>kotlin

إنشاء نقاط رمز PIN وتغيير لونها تفاعليًا أنشئوا ملف layout_pin_code_dots.xml. يحتوي الملف على نقاط رمز PIN، ويحوّل كل نقطة بيضاء إلى نقطة بنفسجية كلما أدخل المستخدم رقمًا من الرمز، وذلك بإضافة تعبير بسيط إلى النقاط كما يلي:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

        <variable
            name="pinCode"
            type="androidx.lifecycle.MutableLiveData&lt;java.lang.String>" />
    </data>

....
        <View
            android:id="@+id/dot1"
            android:layout_width="@dimen/pincode_dot_size"
            android:layout_height="@dimen/pincode_dot_size"
            android:background="@drawable/pass_code_dot_selector"

<-- We will change the first dot to a purple dot when the user entered the first pin code -->
            android:enabled="@{pinCode.length() >= 1}" />

        <View
            android:id="@+id/dot2"
            android:layout_width="@dimen/pincode_dot_size"
            android:layout_height="@dimen/pincode_dot_size"
            android:layout_marginStart="16dp"
            android:background="@drawable/pass_code_dot_selector"
            android:enabled="@{pinCode.length() >= 2}" />
<strong>...</strong>

أنشئوا ملف XML للوحة الأرقام وأضيفوا callback إلى كل زر، بحيث نضيف أرقام الرمز إلى الـ ViewModel مباشرة من دون أي كود إضافي داخل الـ fragment/activity.

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

        <variable
            name="numPadListener"
            type="com.him.secured_pincode.ui.main.NumPadListener" />

    </data>

...
        <Button
            style="@style/passCodeButton"
            android:onClick="@{(v) -> numPadListener.onNumberClicked('1')}"
            android:text="1" />

        <Button
            style="@style/passCodeButton"
            android:layout_marginStart="24dp"
            android:onClick="@{(v) -> numPadListener.onNumberClicked('2')}"
            android:text="2" />
...

وهذا كل شيء، بهذه السهولة نبني ميزة رمز PIN باستخدام Data Binding. شاركونا إن كانت لديكم أفكار أخرى، ويمكنكم العثور على الكود المصدري على Github وفي الجزء التالي، سأشرح طريقة سهلة لتأمين رمز PIN في Android.

Related Articles

كيف أصمّم برمجيات؟ دليل المبتدئين لأصحاب الأعمال

كيف أصمّم برمجيات؟ دليل المبتدئين لأصحاب الأعمال

تصميم البرمجيات عملية ممتعة لكنها معقدة، تتطلب الإبداع والتفكير المنطقي ومهارات حل المشكلات.

اقرأوا المزيد
مستقبل الحوسبة الطرفية: ما تحتاج الشركات إلى معرفته

مستقبل الحوسبة الطرفية: ما تحتاج الشركات إلى معرفته

يتطور المشهد الرقمي بسرعة، وعلى الشركات أن تتكيّف لتواكب الطلب المتزايد على السرعة والكفاءة والمعالجة في الوقت الفعلي.

اقرأوا المزيد
مستقبل قطاع التجزئة: الذكاء الاصطناعي والواقع المعزّز واتجاهات التحوّل الرقمي

مستقبل قطاع التجزئة: الذكاء الاصطناعي والواقع المعزّز واتجاهات التحوّل الرقمي

يتطور قطاع التجزئة بوتيرة غير مسبوقة بفضل الذكاء الاصطناعي (AI) والواقع المعزّز (AR) وتقنيات التحوّل الرقمي. فلم تعد المتاجر التقليدية مجرد أماكن لبيع المنتجات، بل أصبحت متاجر ذكية وتفاعلية.

اقرأوا المزيد

Have a Project in Mind?

Let's discuss how we can help bring your ideas to life with our expertise in web and mobile development.

ابدأوا المحادثةhello@oozou.com
OOZOU Logo

بانكوك · سنغافورة · هونغ كونغ

X
Facebook
Instagram
LinkedIn
OOZOU Co., Ltd.
548 One City Centre
Ploenchit Road
Bangkok 10330
Thailand
+66 2544 0000
hello@oozou.com

الخدمات

  • تطوير الويب
  • وكلاء الذكاء الاصطناعي والذكاء الاصطناعي التوليدي
  • تطوير تطبيقات الجوال
  • تحليلات البيانات وهندستها
  • تصميم تجربة المستخدم وواجهته (UX/UI) وتصميم المنتجات
  • التحوّل الرقمي

الشركة

  • من نحن
  • الوظائف
  • المدونة
  • دراسات الحالة
  • عروض حية
  • تعلّمت اليوم
  • تواصل معنا

المزيد

  • القطاعات
  • شبكة الشركاء
© 2026 OOZOU. جميع الحقوق محفوظة.
سياسة الخصوصيةمدونة قواعد السلوكسياسة مكافحة الرشوة والفساد