دليلك لأفضل مكتبات الأندرويد - الجزء الثالث - Crouton

Abdulrahman Aghaمنذ 7 سنوات

بسم الله الرحمن الرحيم

 

في إستمرارنا في الحديث عن أهم وأحدث مكتبات منصة الأندرويد سنتحدث اليوم عن واحدة من أشهر المكاتب المستخدمة مؤخراً في بعض التطبيقات المشهورة ومن ضمنها تطبيق Jodel الشهير. هذه المكتبة هي مكتبة Crouton. لنتعرف معاً على هذه المكتبة وما أهميتها وكيف تعمل.

مكتبة Crouton هي مكتبة تتيح لك تنبيه المستخدم وإظهار بعض الإشعارات. تشبه في عملها مكتبة Toast الشهيرة ولكنها تختلف عنها بأنها تحل بعض المشكلات المتعلقة بـ Toast. واحدة من أهم مشاكل الـ Toast هي مشكلة out of context وهي بأن Toast تعمل وتظهر بغض النظر عن الـ context أو المضمون. قد تظهر في سياق مختلف تماماً عن المتوقع أي أنه عند الإنتقال لـ Activity أخرى سيستمر إشعار الـ Toast بالظهور كما أنها غير قابلة للتعديل وموحدة الشكل. كل هذه المشاكل من الممكن حلها بمكاتب مختلفة ولكن من أسهل هذه المكاتب هي Crouton. ولكن السؤال .. كيف تعمل ؟

 

مكتبة Crouton تتيح لك التحكم الكامل بشكل الإشعارات ولونها وخصائصها بما تتناسب مع تطبيقك. تعطيك كبداية 3 أشكال ثابتة إذا أردت الإبقاء على أشكال Crouton دون أي تغيير. هذه الأشكال هي :

1-      Alert Notification : باللون الأحمر والخط الأبيض ولمدة 3 ثواني تقريباً

2-      Info Notification : باللون الأزرق والخط الأبيض ولمدة 3 ثواني تقريباً

3-      Confirm Notification : باللون الأخضر والخط الأبيض ولمدة 3 ثواني تقريباً

لنبدأ التطبيق ونرى كيفية إظهار هذه الأشكال.

 

قبل بداية التطبيق وكما جرت العادة سنحتاج إلى إضافة Dependency لملف build.gradle ولكن هذه المرة سنحتاج لتعديل ملفي الـ gradle.

بالنسبة لملف build.gradle "project" سنضيف 


mavenCentral()

داخل Block الـ repositories الموجود في buildscript

 

بالنسبة لملف build.gradle "module" سنضيف


compile 'de.keyboardsurfer.android.widget:crouton:1.8.5@aar'

نقوم بعمل Sync من الأعلى حتى تضاف المكتبة ونستطيع بعدها البدء في العمل.

 

نقوم بإنشاء Layout بسيطة توضح عمل هذه المكتبة. تحتوي هذه الـ Layout على 3 أزرار خاصة بكل style وأيضاً على زر Toast وزر آخر لتوضيح الـ Custom Notification.


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingTop="50dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/info"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="INFO" />

        <Button
            android:id="@+id/alert"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Alert" />

        <Button
            android:id="@+id/succ"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Success" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/toast"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Toast" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/custom"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Custom" />

    </LinearLayout>


</LinearLayout>

 

صورة توضح الشكل النهائي للـ Layout

1.jpg.0b06c978d428c2fe3bfe69560ebffd70.jpg

 

نذهب الآن للجزء الأهم وهو ملف الـ Java.

ملاحظة : سنقوم بتطبيق مفاهيم الـ ButterKnife. لمزيد من المعلومات نرجو زيارة الموضوع التالي:

دليلك لأفضل مكاتب الأندرويد - الجزء الثاني - ButterKnife

 

أولاً : سنقوم في البداية بتعريف المتغيرات والـ Buttons


@BindView(R.id.alert)
    Button alert;

    @BindView(R.id.info)
    Button info;

    @BindView(R.id.succ)
    Button succ;

    @BindView(R.id.toast)
    Button toast;

    @BindView(R.id.custom)
    Button custom;

 

ثانياً : سنقوم بعمل Bind للمتغيرات داخل onCreate method


ButterKnife.bind(this);

 

ثالثاً : سنقوم بإختيار كل زر للقيام بوظيفة معينة. نلاحظ عندما نريد إظهار Crouton أو إشعار لا نحتاج لتعريف أي متغيرات فهي تعمل بنفس طريقة عمل Toast. لإظهار الإشعارات بالأشكال السابقة التي سبق وتحدثنا عنها سنحتاج لتمرير 3 params فقط وهي الـ Context والنص والشكل سواء كان alert – info – confirm  والطريقة تبدو مشابهة تماماً لطريقة الـ Toast.


@OnClick(R.id.info)
    void clicked1() {
        Crouton.showText(this, "INFO 3alamPro", Style.INFO);
    }

    @OnClick(R.id.alert)
    void clicked2() {
        Crouton.showText(this, "ALERT 3alamPro", Style.ALERT);
    }

    @OnClick(R.id.succ)
    void clicked3() {
        Crouton.showText(this, "SUCCESS 3alamPro", Style.CONFIRM);
    }

    @OnClick(R.id.toast)
    void clicked4() {
        Toast.makeText(getApplicationContext(), "3alamPro", Toast.LENGTH_LONG).show();
    }

 

رابعاً : نقوم بإختبار التطبيق ونرى الفرق بين Crouton وبين Toast. وكيف أن Toast تستمر بالظهور حتى عند الخروج من التطبيق ولكن Crouton تختفي وهو المطلوب.

59e37d8adc910_firstgif.gif.0a53fde806f7eafb75ce42407af55a58.gif

 

ماذا لو أردنا البقاء على هذه الأشكال ولكن نريد تغيير الوقت المحدد مسبقاً. بكل بساطة سنحتاج لعمل Object من كلاس Configuration الموجود مسبقاً داخل مكتبة Crouton.


Configuration croutonConfiguration;

 

ومن ثم نعرف الـ Object داخل onCreate method ونعطيه الوقت المطلوب ( الوقت المدخل يقاس بالـ milliseconds والثانية الواحدة تساوي 1000 ميلي ثانية ).


croutonConfiguration = new Configuration.Builder().setDuration(1000).build(); // 1 sec

 

الآن سنقوم بتغيير الوقت لواحدة من الإشعارات المعرفة مسبقاً ولكننا سنحتاج لتمرير باراميتر إضافي وهو getTaskId() سنتكلم عليه فيما بعد ولكن في الوقت الراهن قد لا يهمنا كثيراً. بهذا التعديل سيتغير الوقت ليصبح ثانية واحدة فقط بدلاً من 3 ثواني.


@OnClick(R.id.info)
    void clicked1() {
        Crouton.showText(this, "INFO 3alamPro", Style.INFO,getTaskId(),croutonConfiguration);
    }

 

نقوم بالتجربة والمقارنة بين INFO وبين ALERT ونستطيع رؤية الفرق في التوقيت.

59e384134736e_1sec.gif.61941edd6b5aef9218efbff838619bc1.gif

 

بعد الإنتهاء من أول قسم سنبدأ في تصميم الـ Notification الخاصة بنا. وطبعاً هذا الأمر متاح بكل سهولة مع Crouton. سنقوم في البداية بتغيير لون الخط ولون خلفية الإشعار فقط. نلاحظ بأننا كنا نمرر باراميتر من نوع Style داخل crouton. الباراميتر Style.INFO عبارة عن ستايل جاهز ولتغييره سنحتاج لعمل Style خاص بنا. لذلك سنحتاج إلى عمل Object من كلاس style وإضافة جميع الخصائص بشكل يدوي.


Style style;

 

ونقوم بتعريف الـ Object داخل onCreate method.


style = new Style.Builder()
                .setBackgroundColorValue(Color.parseColor("#000000")) // black 
                .setGravity(Gravity.CENTER_HORIZONTAL)
                .setConfiguration(croutonConfiguration)
                .setHeight(100)
                .setTextColorValue(Color.parseColor("#ffffff")).build(); // white

 

للشرح بشكل أعمق للخصائص : 

 setBackgroundColorValue(Color.parseColor()) نستخدمها لإختيار لون خلفية الإشعار.

setGravity نستخدمها لإختيار مكان النص سواء كان في المنتصف أو على اليمين أو على اليسار.

setConfiguration نستخدمها لإختيار المدة الزمنية لإظهار الإشعار. (يجب إنشاء Object منفصل كالذي تم إنشاؤه في الخطوات السابقة )

setHeight نحدد من خلالها إرتفاع الإشعار.

setTextColorValue نحدد من خلالها لون خط النص داخل الإشعار.

ومن ثم ننهي التعريف بـ .build

 

نقوم الآن بتعديل واحدة من الإشعارات المعرفة سابقاً وإختيار الـ style الخاص بنا بدلاً من المعرف مسبقاً.


@OnClick(R.id.alert)
    void clicked2() {
        Crouton.showText(this, "ALERT 3alamPro", style);
    }

 

ونرى النتيجة. تعمل بشكل مثالي.

2.jpg.24285b973cd2b5397834339b9f76d326.jpg

 

 

سنقوم الان بعمل إشعار مختلف تماماً يتضمن صور ونص وليس نص فقط. لتطبيق هذا الأمر سنحتاج إلى إنشاء Layout جديدة. سنقوم داخل هذه الـ Layout بتصميم شكل الإشعار. نقوم بإنشاء Layout جديدة ونسميها crouton_custom على سبيل المثال.

3.jpg.31a1bb6d57ad61147e06b47bc7654a8a.jpg

 

نقوم بتصميم Layout بسيطة تتضمن شعار الموقع فقط. نلاحظ بأن إرتفاع الـ Layout يمثل إرتفاع الإشعار نفسه لذلك إختيار الإرتفاع مهم جداً.


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#000000">

        <ImageView
            android:layout_width="100dp"
            android:layout_height="30dp"
            android:layout_centerInParent="true"
            android:src="@drawable/pro"/>

    </RelativeLayout>

</RelativeLayout>

 

الشكل النهائي للـ Layout.

4.jpg.38db93684c1fa5512cf7d8271bd5a678.jpg

 

للاستمرار بذلك يجب علينا تعريف Object جديد من نوع View وعمل Inflate للـ Layout الخاصة بالإشعار. ومن ثم عمل Crouton جديد.


@OnClick(R.id.custom)
    void clicked5() {
        View customView = getLayoutInflater().inflate(R.layout.crouton_custom, null);
        Crouton.show(this,customView);
    }

 

والنتيجة ..

custom.gif.ce73a70ce9d43250775d5f873e63fd53.gif

 

إلى هنا نكون قد وصلنا إلى نهاية الشرح الخاص بالمكتبة. وسنقوم في المواضيع القادمة بإستعراض المزيد من المكتبات الخاصة بمنصة الأندرويد بإذن الله.

كلمات دليلية:
3
إعجاب
4383
مشاهدات
0
مشاركة
0
متابع
متميز
محتوى رهيب

التعليقات (1)

alaa19090:

كل الشكر على مجهودك

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !