بسم الله الرحمن الرحيم
مرحباً, في البداية أحب أن أشكركم جميعاً .. كما أشكر جميع الذين ساعدوني في نشر المدونة, والحمدلله لقد لاحظت نتيجة كبيرة من خلال الزيارات القائمة على المدونة .. فشكراً لكم جميعاً.
اليوم إن شاء الله سوف أتكلم وأشرح في هذه التدوينة, درس جداً جداً مهم وخاصة للجيل الجديد الداخل في برمجة تطبيقات اندرويد, فهذا الدرس من عشاق الهواة.. لأنه يمييز التطبيق إلى حد ما.
فهو لعرض زر المشاركة في الأكشن البار .. التايتل العلوي في التطبيق.
صورة معاينة للعمل :
تظهر في زر المشاركة جميع التطبيقات .. التي تدعم المحتوى الذي تريد أن تشاركه.
لنأتي إلى العمل :
* في البداية إذهب إلى مجلد 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
والله الموفق 🙂
السلام عليكم شكرا للجهود الرائعة المبذولة
عند تنفيذ هذا الدرس واجهت مشكلة في التشغيل يغلق التطبيق و يظهر :
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);
}
}
مشكور على الملاحظة .. تم تعديل المقال.
اتبع الطريقة الثانية 🙂
شكرا جزيلا
اذا أمكن اضافة الطريقة الثانية الى الكتاب الالكتروني للاحتفاظ بها و شكرا
العفو, إن شاء الله في يوماً ما سوف يتم إعادة بناء الكتب لجميع المقالات, حالياً من أجل الوقت وتجهيز دروس أقوى أنسى فعل الكتب لأنها كذلك تأخذ وقت ..
لو سمحت ده كود لعمل مشاركة موقع واحد محدد ازاى اعمل شير لاى موقع اتصفحه مثال
عامل ويب فيو لموقع اخبار الناس بتخش على اى مقال ازاى اقدر اعمل شير للصفحة الموجود بها ؟