الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيفية عمل شاشة خاصه باعدادات تطبيقك على الـ Android

بدأه Mahmoud Kelany في 30 سبتمبر 2012 · 6 رد · 1,970 مشاهدة · في Android
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله وبركاته

اليوم سوف اقوم بشرح كيفية حفظ اعدادات للتطبيق الخاص بك

فقط كنت اعمل على مشروع تخرجى فأردت ان قوم بحفظ مجموعه من البيانات المتغيره حسب المستخدم

مثل الـ Local Ip - Local Port , .... و اشياء اخرى

هذا ضمن عمل تطبيقى فى المشروع

لذلك قومت بالتفكير كيف اقوم بذلك وانا مبتدا فى الاندرويد

ها قد وجدتها سأقوم بعمل جدول بيانات يقوم بحفظ هذه البيانات فى قاعده البيانات الموجوده فى التطبيق

لان التطببيق ايضا كان قائم على ان يكون بداخله قاعده بيانات

لكن ما الحل اذن كيف افعل ذلك ؟؟؟

قومت بعمل Setting beans و SettingServices

لكى اقوم بالتعامل مع قاعده البيانات وانتم على درايه بكيفيه التعامل مع قواعد البيانات بنظام الـ MVC

بعد ذلك قومت ببناء Layout خاصه بالتطبيق ولكنها بصراحه كانت غير مرضية لى من حيث الشكل

لكن كيف افعل ذلك فقمت بكتابه الكثير من الكود ليكى يكون التطبيق بهذا الشكل (لايهم الخلفيه) فقط اقصد ان يكون هناك Checkbox وبعدها ListView

post-217802-007469300 1349024760_thumb.p

وبعدها قومت بعمل custom Dialog لكى اقوم بعرض البيانات الموجوده فالـ list ومن ثم اقوم بتعديلها كما فالصوره التاليه

post-217802-073684500 1349024786_thumb.p

كل هذا بالاضافه للكود الذى يتعامل مع البيانات الموجوده فاللقائمة وكيفه تعديلها مره اخرى وهكذا

مع العلم ان انا اشتغلت بمبادئ OOP لكن ذلك كلف الكثير من الوقت والمجهود

blink.gifblink.gif انسى الطريقة السابقة laugh.gifROFL.gif

لكن بعد ان وجدت طريقه اخرى وهى طريقه كنت رايت شكلا لها فى برنامج من قبل لكن كنت أتسائل كيف تم فعل هذا الشكل

فوجدته سهل جدا وبسيط ابسط مما تتخيل مع استخدام الـ Preferences تمكنك من عمل ذلك بشكل افضل وتقوم ايضا بحفظ البيانات داخليا داخل الموبيل

دون الحاجه الى قواعد بيانات او خلافه

post-217802-088364700 1349024846_thumb.p

وعند التعديل يكون ايضا عن طريق Dialog

post-217802-016336700 1349024863_thumb.p

الطريقتان ممكن ان نقول متشابهان فالوصول للحل

لكن الطريقه الثانيه افضل واسهل بكثير من الاولى وعن تجربه :)

فكيف يمكن استخدام الطريقه الثانيه ؟؟؟

كل ما عليك فعله هو ان تقوم بعمل مجلد xml داخل المجلد res لكى يحتوى على ملفات الـ Preference

كما بالصوره

post-217802-035219400 1349024878_thumb.p

بعد ذلك تقوم بعمل ملف xml جديد كما ايضا موضح بالصوره المسبقه انه login_prefs.xml

وهو يحتوى على الكود التالى

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
  xmlns:android="http://schemas.android.com/apk/res/android">
	<CheckBoxPreference
    	android:title="Voice Guide"
    	android:key="voice_guide"
    	android:summary="Play voice Guide"
    	android:defaultValue="true"
	/>
	<EditTextPreference
    	android:title="Local IP"
    	android:key="local_ip"
    	android:summary="Change Local Ip"
    	android:defaultValue="192.168.1.10"
	/>
	<EditTextPreference
    	android:title="Local Port"
    	android:key="local_port"
    	android:summary="Change Local Port"
    	android:defaultValue="80"
	/>
	<EditTextPreference
    	android:title="Public IP"
    	android:key="public_ip"
    	android:summary="Change Public IP"
    	android:defaultValue="41.44.213.33"
	/>
	<EditTextPreference
    	android:title="Public Port"
    	android:key="public_port"
    	android:summary="Change Public Port"
    	android:defaultValue="5353"
	/>
	<EditTextPreference
    	android:title="SMS Phone"
    	android:key="sms_phone"
    	android:summary="Change SMS Phone number"
    	android:defaultValue="01114456657"
	/>
</PreferenceScreen>

فستجد ان العنصر الاول CheckBoxPreference هو خاص ببناء عنصر للـ Checkbox

والعناصر الاخرى كلها من النوع EditTextPreference هو خاص ببناء عنصر او صف يحتوى على الـ EditText

ولكن دعنا نرى ماذا يعنى

android:title وهو عباره عن العنوان الذى يكون خارج العنصر

android:key وهو عباره عن الـ key الذى سوف نصل اليه عن طريق الكود , مجازا ممكن ان نقول عليه ID

android:summary وهو عباره عن جمله تعرف ماذا يفعل هذا العنصر

android:defaultValue وهى القيه الافتراضيه

وتختلف حسب النوع فى حاله الـ CheckBoxPreference تجد انك تقوم بوضع true او false

فى حاله الـ EditTextPreference يكون القيمه الافتراضيه عباره عن قيمة String

post-217802-043452500 1349024899_thumb.p

بعد ذلك سوف نقوم بعمل الـ Activity الخاص بتشغيل الـ Preference

لكن هذه المره ليس Activity عادى ولكنه PreferenceActivity التى ترث من الـ Activity class

وبدلا من استدعاء الداله setContentView سوف نقوم باستدعاء داله اخرى addPreferencesFromResource

public class PreferencesActivity extends PreferenceActivity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    	addPreferencesFromResource(R.xml.login_prefs);
	}

}

وها قد انتهينا من عمل الـ Layout وتشغيله عن طريق الـ PreferencesActivity

يتبقى شىء واحد وهو كيفيه استرجاع القيم الموجوده بداخله ؟

الامر بسيط جدا

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

نقوم بعمل مرجعيه للـPreference الموجوده فالجهاز عن طريق الـ PreferenceManager

وبعد ذلك نقوم باستخراج البيانات عن طريق الـ key الذى تم وضعه لكل عنصر مسبقا

مثلا

فى حاله CheckBoxPreference نحتاج فقط لمعرفه هل true او false

فيكون بهذا الشكل

prefs.getBoolean("voice_guide", true);

voice_guide هو الـ key

لكن ماذا عن true ؟؟؟ فهى هنا المدخل الثانى للداله وهو ما يكون القيمه الافتراضيه فى حاله ان لم يتم وجود او تسجيل الـ Preference من قبل

وفى حاله EditTextPreference فهو يكون عباره عن String

prefs.getString("local_ip", "LOCAL_IP_NA");

ليكون الكود فى حاله ان تقوم باسترجاع قيمه خاصه بالـ Preference

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    	boolean voiceGuide = prefs.getBoolean("voice_guide", true);

هكذا نكون قد انتهينا من ذلك

واليكم تطبيق يوضح ذلك عن طريق عرض البيانات الموجوده فالـ Preference

وعند الضغط على القائمه يدخل على شاشه الـ Preferences وتقوم بالتعديل بها

ووعند العودة مره اخرى تجد انه قد تم تعديل البيانات وحفظها ايضا

post-217802-061495500 1349024942_thumb.p

للتحميل

TestAndroidPrefrences.zip

بالتوفيق ان شاء الله

المرفقات
device-2012-07-24-151156.pngsitting_edit.pngdevice-2012-09-30-190714.pngdevice-2012-09-30-183738.png111.pngmm.pngdevice-2012-09-30-190238.png

Software Developer
Mahmoudkelany.com


 

#2

محمد دائما تطل علينا بابداعاتك.

شكرا على هذا الدرس ، مع تحفظي على المقدمه :mad:

#3
العيافـي كتب:

محمد دائما تطل علينا بابداعاتك.

شكرا على هذا الدرس ، مع تحفظي على المقدمه :mad:

اشكرك اخ عيافى :)

الفكره فى المقدمة هى توضيح الفرق بين الطريقتين ليس الا

الطريقة الاولى هى ما فكرت به حيال ان انفذ التطبيق فأردت ان اوضحها لكى يعلم الجميع كم ان الامر سهل

لكن الجهل بشىء يجعله صعبا

انت تحفظت على المقدمه وانا اتحفظ على الاسم محمود وليس محمد :)

Software Developer
Mahmoudkelany.com


 

#4

اعتذر .. خطا مطبعي فقط

المكابر فقط هو من ينكر بصمتك في هذا المنتدى .

اسال الله التوفيق .

#5
العيافـي كتب:

اعتذر .. خطا مطبعي فقط

المكابر فقط هو من ينكر بصمتك في هذا المنتدى .

اسال الله التوفيق .

:) ولايهمك , جميع الاخوه هنا ينادونى بمحمد حتى الحاج علاء :)

ايضا بصمتك وبصمه الجميع هنا اخى العيافى

فأنا تعلمت منك الكثير والكثير

اسال الله التوفيق لنا جميعا ان شاء الله :)

Software Developer
Mahmoudkelany.com


 

#6

السلام عليكم

شكرا على الدرس بس عندي سؤال صغير

كيف ممكن اضيف صوره السهم على اليمين مثل الصوره اللي انت حاططها

وشكرا الك مره ثانيه ...

www.ahammad.net

#7
doom2008 كتب:

السلام عليكم

شكرا على الدرس بس عندي سؤال صغير

كيف ممكن اضيف صوره السهم على اليمين مثل الصوره اللي انت حاططها

وشكرا الك مره ثانيه ...

وعليكم السلام ورحمه الله وبركاته

اخى طريقه الـ Preferences هى من تقوم بذلك كما تم شرحه فالدرس

Software Developer
Mahmoudkelany.com


 

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…