زر خيارات المشاركة في الاكشن بار برمجة تطبيق اندرويد

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

مرحباً, في البداية أحب أن أشكركم جميعاً .. كما أشكر جميع الذين ساعدوني في نشر المدونة, والحمدلله لقد لاحظت نتيجة كبيرة من خلال الزيارات القائمة على المدونة .. فشكراً لكم جميعاً.

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

فهو لعرض زر المشاركة في الأكشن البار .. التايتل العلوي في التطبيق.

صورة معاينة للعمل :

programming_share_actionbar_options_android_app_1

تظهر في زر المشاركة جميع التطبيقات .. التي تدعم المحتوى الذي تريد أن تشاركه.

لنأتي إلى العمل :

* في البداية إذهب إلى مجلد menu فيه تجد ملف خاص للقائمة .. ولكن تستطيع إنشاء ملف جديد إذا كنت تعمل على تطبيق كبير .. كي تجعل قائمة خاصة بالاكشن بار وقائمة للاكتفتي الرئيسية إلخ ..

الآن نحن سوف ننشأ ملف قائمة جديد داخل مجلد menu وسوف نسميه مثلاً main.xml

امسح ما بداخله واكتب الكود التالي :  ( قلت أكتب كي لا تتعود يدك على النسخ واللصق ).

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/menu_item_share"
        android:showAsAction="ifRoom"
        android:title="Share"
        android:actionProviderClass= "android.widget.ShareActionProvider" />
</menu>

هذه القائمة لزر المشاركة .. الآن لنذهب لكي نفعلها في الأكشن بار ..

نذهب إلى الملف المطلوب .. التطبيق عليه وفي درسنا في الرئيسية بالتأكيد في MainActivity.java.

* عرف متغير من نوع ShareActionProvider خارج الدوال وداخل الكلاس . وسوف نستعمل اسم متغير mShareActionProvider.

أي التعريف سوف يصبح بالشكل التالي :

    ShareActionProvider mShareActionProvider;

الآن بعد دالة الـ onCreate وخارجها .. لكن داخل الكلاس نضع التالي :

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        MenuItem shareItem = menu.findItem(R.id.menu_item_share);

        if (shareItem != null) {
            mShareActionProvider = (ShareActionProvider)shareItem.getActionProvider();
        }
        setShareIntent();

        return true;
    }

    private void setShareIntent() {

        if (mShareActionProvider != null) {

            Intent shareIntent = new Intent(Intent.ACTION_SEND);
            shareIntent.setType("text/plain");
            shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Visit us on AndRody");
            shareIntent.putExtra(Intent.EXTRA_TEXT, "www.andrody.com/");

            mShareActionProvider.setShareIntent(shareIntent);
        }
    }

 

الان سوف أتكلم عن ماذا فعلنا في الكود .. تابع معي :

في البداية فعلنا القائمة onCreateOptionsMenu .. ووضعنا مسار ملف القائمة المطلوب R.menu.main, ثم حددنا العنصر الذي نريد ان نعمل عليه R.id.menu_item_share .. لاحظ menu_item_share هو الآي دي (id) الخاص بالعنصر داخل القائمة, كما وضعناه سابقاً. بعدها بدئنا بإستخدام ShareActionProvider وهو كلاس معرف ومخزن سابقاً. وقلنا للدالة onCreateOptionsMenu بعد الضغط على العنصر menu_item_share نفذي لنا الدالة التالية setShareIntent , داخل الدالة هذه فعلنا ماذا يحدث بعد الضغط على زر المشاركة .. وهو الأمر ACTION_SEND , ووضعنا نصوص في نفس الانتنت يخزنها ليستخرجها لنا .. كما تلاحظ EXTRA_SUBJECT ففهيها عنوان يظهر لنا ثم اسفلها EXTRA_TEXT لعرض النص أسفل العنوان .. تستطيع تعديل ما بين علامات التنصيص ” ” في الكود لتغيير النص الذي تريد مشاركته .. وإذا كنت تريد كتابة نص طويل مع روابط للتطبيق إلخ .. تستطيع إنشاء textview باستخدام string , و تضع بعد علامات التنصيص getText .. امم الطريقة سهلة لكن الشرح اصعب قليلاً .. مع تعودك في الاستخدام سوف تفهم كل نقطة معينة في الكود ..

إن شاء الله قريباً أحاول أبسط الشرح إلى أكثر من هذا .. من أجل المبتدئين في هذا المجال .. فهدفنا إن شاء الله الجميع يستفيد ..

عموماً بعد تجهيز تطبيقك وتغيير النصوص المطلوب مشاركتها .. تستطيع تشغيله لترى بنفسك النتيجة ..

أي مساعدة أو مشكلة .. تستطيع كتابة تعليق بذلك لنقوم بمساعدتك .. وشكراً لكم مرة اخرى أحبتي ..

و في أمان الله 🙂

لتحميل التدوينة في كتاب إلكتروني  Download pdf : https://andrody.com/?attachment_id=230

 

ملاحظة الشرح في الأعلى تم تجربته على اكليبس ولاصدارات سابقة, والبعض قد واجه مشاكل عندما أصبحت الاكتفتي مشتقة من اكشن بار اكتفتي.
لذلك الذي يواجه مشكلة يجرب أن يستخدم هذه الطريقة وقد تم تجربتها على API 22 , Android Studio

الاستايل المستخدم يلعب دور كذلك, يجب ان يكون من الاستايلات الحديثة وتم استخدام هنا :

Theme.AppCompat.Light.DarkActionBar

res/menu/menu_main.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:yourapp="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/action_share"
          android:title="Share"
          yourapp:showAsAction="ifRoom"
          yourapp:actionProviderClass="android.support.v7.widget.ShareActionProvider"
        />
</menu>

 java/package/MainActivity.java

package com.andrody.androdycom;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.ShareActionProvider;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends ActionBarActivity {

    private ShareActionProvider mShareActionProvider;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);

        // Set up ShareActionProvider's default share intent
        MenuItem shareItem = menu.findItem(R.id.action_share);
        mShareActionProvider = (ShareActionProvider)
                MenuItemCompat.getActionProvider(shareItem);
        mShareActionProvider.setShareIntent(setShareIntent());

        return super.onCreateOptionsMenu(menu);
    }

    private Intent setShareIntent() {
        Intent shareIntent = new Intent(Intent.ACTION_SEND);
        shareIntent.setType("text/plain");
        shareIntent.putExtra(Intent.EXTRA_SUBJECT, "MY Subject");
        shareIntent.putExtra(Intent.EXTRA_TEXT, "My Extra Text");
        mShareActionProvider.setShareIntent(shareIntent);
        return shareIntent;

    }
}

الطريقة الاولى على ما أذكر كانت : extends Activity

أما الأخرى فـ : extends ActionBarActivity

والله الموفق 🙂

عن عبدالقادر عليوي

مواليد 1996 , سوري الجنسية, طالب علم, لدي شغوف كبير في تعلم كل ما يتعلق بالانترنت من تطوير وحماية, أحب القراءة كثيراً .. هدفي نشر العلم بشتى أنواعه ومجالاته, متابع من الدرجة الأولى لـ الدكتور ابراهيم الفقي و الشيخ أحمد ديدات - رحمهم الله -.

شاهد أيضاً

التقنيات التي نستطيع برمجة تطبيقات والعاب الاندرويد بها

هل أنت محتار من أين تريد البدأ في مجال برمجة التطبيقات للهواتف الذكية أو الألعاب عالية الاداء ؟ تعرف في هذا المقال عن اللغات والتقنيات واختر منها ما يناسبك لدخول هذا المجال

تعلم برمجة تطبيق اندرويد لمدونتك البلوجر (1)

هل لديك تدوينة أو موقع إخباري ؟ أو معرض يعرض الكثير من البيانات من وسائط ؟ وبحاجة لعرضها في تطبيق اندرويد ؟ هذه فرصتك من هنا وللمبتدئين تعلم برمجة تطبيق لمدونتك

عرض صورة في التطبيق من فايربيس

بسم الله الرحمن الرحيم اليوم سيكون شرحنا عن كيفية عرض صورة  في التطبيق من قاعدة …

9 تعليقات

  1. السلام عليكم شكرا للجهود الرائعة المبذولة
    عند تنفيذ هذا الدرس واجهت مشكلة في التشغيل يغلق التطبيق و يظهر :
    AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.UnsupportedOperationException: This is not supported, use MenuItemCompat.getActionProvider()

    بحثت ووجت الحالة مماثلة تماما لما هو موجود في هذا السؤال:
    http://stackoverflow.com/questions/27887716/exception-this-is-not-supported-use-menuitemcompat-getactionprovider
    و موجود الحل به و لم استطع تنفيذ المطلوب من الحل هل من الممكن شرح الحل و المشكلة التي أواجهها لماذا؟
    مع العلم بأن min SDK للتطبيق هو
    API15 Android 4.0.3

    • مع العلم بأني استخدمت في القائمة على الشكل التالي :

      
      
      

      و السبب لذلك هو عند وضع السطر :
      android:showAsAction=”ifRoom”
      يظهر الخطأ
      Should use app:showAsAction with the appcompat library……

    • شكل القائمة المستخدم:
      menu xmlns:android=”http://schemas.android.com/apk/res/android”
      xmlns:app=”http://schemas.android.com/apk/res-auto”
      item android:id=”@+id/menu_item_share”
      app:showAsAction=”ifRoom”
      android:title=”share”
      android:actionProviderClass=”android.widget.ShareActionProvider”

    • وعليكم السلام, اهلا وسهلا أخي .

      ممكن أرسال الكود المستخدم في الاكتفتي.

      وأهم سطر أريده منك هو public class . من أجل تجربة الكود ومعرفة أين الخطأ وتوضيحه 🙂

      • هذا هو الكود :
        import android.content.Intent;
        import android.support.v7.app.ActionBarActivity;
        import android.os.Bundle;
        import android.view.Menu;
        import android.view.MenuItem;
        import android.widget.ShareActionProvider;

        public class MainActivity extends ActionBarActivity {

        ShareActionProvider mShareActionProvider;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu, menu);
        MenuItem shareItem=menu.findItem(R.id.menu_item_share);
        if (shareItem!=null)
        mShareActionProvider=(ShareActionProvider) shareItem.getActionProvider();
        setShareIntent();
        return true;
        }

        private void setShareIntent(){
        if(mShareActionProvider!=null)
        {
        Intent shareIntent =new Intent(Intent.ACTION_SEND);
        shareIntent.setType(“text/plain”);
        shareIntent.putExtra(Intent.EXTRA_SUBJECT,”MY Subject”);
        shareIntent.putExtra(Intent.EXTRA_TEXT,”My Extra Text”);
        mShareActionProvider.setShareIntent(shareIntent);
        }
        }
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
        return true;
        }

        return super.onOptionsItemSelected(item);
        }
        }

        • مشكور على الملاحظة .. تم تعديل المقال.

          اتبع الطريقة الثانية 🙂

          • شكرا جزيلا
            اذا أمكن اضافة الطريقة الثانية الى الكتاب الالكتروني للاحتفاظ بها و شكرا

          • العفو, إن شاء الله في يوماً ما سوف يتم إعادة بناء الكتب لجميع المقالات, حالياً من أجل الوقت وتجهيز دروس أقوى أنسى فعل الكتب لأنها كذلك تأخذ وقت ..

  2. لو سمحت ده كود لعمل مشاركة موقع واحد محدد ازاى اعمل شير لاى موقع اتصفحه مثال
    عامل ويب فيو لموقع اخبار الناس بتخش على اى مقال ازاى اقدر اعمل شير للصفحة الموجود بها ؟

ضع بصمتك بتعليق يعبر عن امتنانك

هذا الموقع يستخدم Akismet للحدّ من التعليقات المزعجة والغير مرغوبة. تعرّف على كيفية معالجة بيانات تعليقك.