c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinonclick תייצקנופ...

40
c# פיתוח אפליקציות לאנדרואיד בסביבתxamarin : c# xamarin מהו: c# xamarin פתיחת תכנית ראשונה בVisual Studio ראשית, נלמד איך לפתוח תוכנית חדשה לאחר ההתקנה הראשונית שלCopyright © 2019 appSchool. Powered by appSchool.co.il

Upload: others

Post on 12-Aug-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

c# פיתוח אפליקציות לאנדרואיד בסביבת xamarin

: c# xamarin מהו

: c# xamarin פתיחת תכנית ראשונה ב

Visual Studio ראשית, נלמד איך לפתוח תוכנית חדשה לאחר ההתקנה הראשונית של

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 2: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 3: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

מבנה תכנית בזמרין :

כל תכנית שנבנה בזמרין תיפתח בצורה כזו:

כך יראה המסך כאשר נפתח תוכנית חדשה.

למטה במסך ניתן לראות את הoutput של התוכנית. במקרה של באג בקוד ניתן לבדוק בעזרת תיבה זו היכן כשל הקוד וקרסה התוכנית.

מצד שמאל ניתן לראות את הקובץ הפתוח. מצד ימין ניתן לראות את הספריה של התוכנית שלנו. בכל תיקיה נמצאים קבצים שונים מקטגוריה מסוימת.

לדוגמה, תיקיית ה values מכילה קבועים שבונים את האפליקציה. כמו צבע האפליקציה, אייקון, string'ים ושם האפליקציה.

ניתן לראות שבתחילת הקוד ממומשים הקבועים שבתיקיית values, כגון שם האפליקציה.style ו

נוכל לראות שימוש בתיקיה זו בתחילת כל activity שנפתח.

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 4: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

Activity הוא דף לאפליקציה שלנו. בכל פעם שאנו מגיעים למסך חדש באפליקציה, אנו מגיעים בעצם ל Activity אחר. כל Activity בנוי מקובץ C# וקובץ XML שקשורים אחד

לשני. קבצי ה XML מופיעים תחת תיקיית layout שבתיקיית Resources ובהם נערוך את

.Activityהגרפיקה של ה קבצי ה C# נקראים גם Class ובהם נצהיר על משתנים וקבועים ובהם נערוך את הקוד

שמאחורי התוכנית..AppCompatActivity שנקרא classיורש מ Activity של class כל

הפונקציה הראשונה שתיקרא בפתיחת כל Activity היא OnCreate, שם מוגדר בעזרת.Activity של ה layout שיהיה ה XML קובץ ה SetContentView פונקציה שנקראת

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 5: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

איך מריצים את האפליקציה? בשביל להריץ את האפליקציה נשתמש באחת משתי הדרכים הבאות - בעזרת אימולטור

או בעזרת הטלפון שלנו.

נוכל לחבר את הטלפון למחשב ולהריץ את האפליקציה עליו (יותר מהיר, עדיף למחשבים איטיים), או שנוכל להריץ על אימולטור במחשב שלנו.

אימולטור הוא בעצם טלפון בעל מערכת הפעלה של אנדרואיד שישמש כטלפון הניסוי שלנו בו נוכל להריץ את האפליקציה שבנינו.

בשביל להריץ את האפליקציה על האימולטור נוריד קודם את כל המשאבים שידרשו לנו:

(קיים אימולטור שמגיע עם ההתקנה של VisualStudio, אך הוא חזק ולא ירוץ על הרבה מחשבים)

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 6: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 7: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

.start כעת נראה שהאימולטור שלנו נשמר ונטען (יכול לקחת כמה דקות, תלוי בחוזק מחשב), לאחר מכן נלחץ על .start בפעם הראשונה שנריץ את האימולטור התהליך יקח כמה דקות מרגע שנלחץ

כאשר אנו רואים ב Output (החלון מצד שמאל למטה במסך) שיש לנו שגיאה בתוכנית, לעיתים זה קורה בגלל ששינינו שמות ו id (נלמד בהמשך) בכל מיני מקומות באפליקציה והתוכנית לא הספיקה לעדכן זאת, או שאין

סנכרון בין קובץ ה XML לקובץ ה C# בגלל שינוי שמות, וכו'. בשביל לטפל בזה כדאי לשמור את קובץ ה XML לאחר שאנו מסיימים לעדכן אותו, ואם בכל מקרה יש שגיאה,

נוכל לנקות את האפליקציה בדרך הבאה: (ניתן ללחוץ על clean ואם עדיין לא עובד - גם rebuild, או להפך)

בדרך זו אנחנו מנקים את הקוד שבנינו לפני כן וכבר לא משומש.

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 8: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

פרק 1

בפרק זה נבנה את האפליקציה הראשונה שלנו.נבנה אפליקציה שמעלה ומורידהTextView ניקוד באמצעות לחיצה על כפתורים והצגת הניקוד על

בניית אפליקציה בזמרין תתחלק ל 4 שלבים :

layout שלב 1 : עיצוב #cשלב 2 : הצהרה על תכונות ב

XMLשלב 3 : קבלת הפניה לתכונות שב שלב 4 : מימוש events (אובייקטים כגון כפתורים וטקסטים)

layout שלב 1 - עיצוב השלב הראשון של האפליקציה שלנו הוא החלק הגרפי.

בשלב זה נלמד איך לעצב את האפליקציה שלנו בדרך שנרצה. נרצה שהאפליקציה שלנו בפרק זה תראה כך:

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 9: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

נעשה זאת בעזרת לחיצה בספריית התיקיות על

.Resources -> layout -> activity_main.axml אנו נלמד לעבוד בעזרת סידור מסך שנקרא LinearLayout, לכן שנו את המילה

RelativeLayout ל LinearLayout. מה שמייחד את צורת סידור LinearLayout הוא שכאשר נשים בה אובייקטים, הם יופיעו על המסך אחד אחרי השני, מלמעלה למטה או

משמאל לימין - בצורה שאנו נקבע..horizontal סידור משמאל לימין נקרא

.vertical אנו נשתמש לבניית האפליקציה שלנו בסידור מלמעלה למטה שנקרא :LinearLayout במילה RelativeLayout כך יראה הקוד שלנו לאחר החלפת המילה

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 10: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

. <LinearLayout/> בכל פעם שנוסיף אובייקט למסך נוסיף אותו לפני השורה

לדוגמה, במידה ונרצה להוסיף טקסט למסך נרשום TextView> ונעצב אותו.

CTRL + ולחיצה על android נוכל להוסיף לאובייקט שלנו תכונות בעזרת כתיבת המילה SPACE. אז יופיעו לנו רשימת התכונות של האובייקט.

כשמוסיפים תכונות לאובייקט חשוב לשים לב שאנו כותבים זאת לפני ה </.

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 11: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 12: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

ניצור גם שני כפתורים:

הוספת תמונה לאפליקציה

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 13: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

בשביל להעלות תמונה לאפליקציה נצור תיקיה בשם drawable (חובה בשם הזה!) תחת

.resources תיקיית נעשה העתק לתמונה. לאחר מכן נלחץ קליק ימני על התיקייה drawable והדבק.

android:background = "@drawable/picName" בשביל להשתמש בתמונה נרשום

(XMLכמובן, ב) .בתוך האובייקט שאת הרקע שלנו נרצה לשנות

סיימנו את שלב מספר 1. כך נראית האפליקציה שלנו בינתיים, ללא קוד שעובד מאחורי הקלעים.

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 14: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

:C# (class)שלב 2 - הצהרה על תכונות בקובץ ה ניצור אובייקטים ב C# בהאתם לאובייקטים שיצרנו ב layout, ולאחר מכן ניתן להם

הפניה לאובייקטים שיצרנו ב XML (רפרנס) בשביל שנוכל להשתלט עליהם.

layoutעל מנת לקבל הפניה לאובייקטים ב ,MainActivity הכרזה על אובייקטים בקובץ

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 15: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

XML שלב 3 - קבלת הפניה לתכונות שב

בשלב זה נקשר את האובייקטים שיצרנו בשלב 2 בקובץ ה C# עם האובייקטים

XML שיצרנו בשלב 1 ב

:event שלב 4 - האזנה באמצעות

בשלב זה נראה איך לממש את הפעולות שנרצה לבצע על הכפתורים בעזרת האזנה. ראשית, מתחת לשורות שהבאנו לכפתורים בOnCreate נרשום לכפתורים אפשרות

האזנה.

נרשום את השורה btnName.Click += ונלחץ פעמיים TAB במקלדת. בעקבות זאת תושלם השורה באותה צורה שאנו רואים בקוד למטה.

במקביל ייפתח חלון ובו נלחץ על apply. לאחר שנלחץ כך תיבנה פונקציה שמאזינה לכפתור.

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 16: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

כלומר בכל פעם שנלחץ על הכפתור יקרה מה שנגדיר שיקרה בתוך הכפתור.

במקרה שלנו נקשר את btnPlus ואת btnMinus לפונקציות שמאזינות להן, ונגדיר שבכל פעם שילחצו עליהן יגדל/ יקטן ה counter בהתאם, ויעודכן הTextView בהתאם.

private void BtnPlus_Click(object sender, System.EventArgs e) { counter++; display.Text = "your total points are " + counter; } private void BtnMinus_Click(object sender, System.EventArgs e) { counter--; display.Text = "your total points are" + counter; }

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 17: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

הריצו את האפליקציה :)

דרך נוספת שבה נשתמש בקורס זה כדי להגדיר פונקציית האזנה ללחיצה על כפתור: הסבר + כל שורות הקוד שכתבנו בפרק זה נמצאים למטה.

:Listener האזנה ללחיצה על כפתור באמצעות

במקום שורות הקוד שרשמנו בשלב 4, נרשום הפעם את שורות הקוד שבורוד.

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 18: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

OnClick כשאנחנו רושמים שורות אלה אנחנו אומרים לתוכנית שאנו ממשים פונקציית שנמצאת במחלקה שבה אנחנו נמצאים (this), לכן נממש את הממשק

Android.Views.View.IOnClickListener, כמו שמופיע באדום למטה. יראה לנו שגיאה בקוד כי לא מימשנו את הפונקציה OnClick שבממשק, לכן נלחץ על

הנורה הצהובה שהופיעה מצד שמאל בשורת הקוד שבה מימשנו את הממשק, ונלחץ על.implement interface

namespace Lesson1Ex1Introduction { [Activity(Label = "Lesson1Ex1Introduction", MainLauncher = true, Icon = "@mipmap/icon")] public class MainActivity : AppCompatActivityActivity, Android.Views.View.IOnClickListener { Button btnPlus; Button btnMinus; TextView tv; int counter= 0; protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // Set our view from the "main" layout resource SetContentView(Resource.Layout.Main); // Get our button from the layout resource, // and attach an event to it btnPlus= FindViewById<Button>(Resource.Id.btnPlus); btnMinus= FindViewById<Button>(Resource.Id.btnMinus);

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 19: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

tv= FindViewById<TextView>(Resource.Id.tvDisplay);

}

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 20: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

זהו זה, נריץ עכשיו את האפליקציה.

מצורפים כל שורות הקוד:

C#: using Android.App; using Android.Widget; using Android.OS;

namespace Lesson1Ex1Introduction { [Activity(Label = "Lesson1Ex1Introduction", MainLauncher = true, Icon = "@mipmap/icon")] public class MainActivity : Activity,Android.Views.View.IOnClickListener { Button btnPlus; Button btnMinus; TextView tv; int counter= 0; protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // Set our view from the "main" layout resource SetContentView(Resource.Layout.Main); // Get our button from the layout resource, // and attach an event to it btnPlus= FindViewById<Button>(Resource.Id.btnPlus); btnMinus= FindViewById<Button>(Resource.Id.btnMinus); tv= FindViewById<TextView>(Resource.Id.tvDisplay);

btnPlus.SetOnClickListener(this); btnMinus..SetOnClickListener(this); }

private void OnClick(View v) { if(v==btnPlus)

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 21: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

{ counter++; display.Text = "your total points are points" + counter; } else if(v==btnMinus) { counter--; display.Text = "your total points are points" + counter; } }

}

}

XML: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:background="@drawable/back1"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="you have 0 points" android:textSize="30dp" android:layout_gravity="center" android:gravity="center" android:id="@+id/txtdisplay" /> <Button android:layout_width="250dp" android:layout_height="wrap_content" android:text="add one point" android:textSize="15dp" android:layout_gravity="center" android:id="@+id/btnplus" /> <Button android:layout_width="250dp" android:layout_height="wrap_content" android:text="minus one point"

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 22: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

android:textSize="15dp" android:layout_gravity="center" android:id="@+id/btnminus" />

</LinearLayout>

דוגמה 2: האפליקציה השנייה שנבנה בפרק זה תקלוט את השם שנרשום לה, ותציג אותו על המסך

עם טקסט.

נעבוד לפי השלבים שלמדנו בדוגמה הראשונה:

layout שלב 1 : עיצוב #cשלב 2 : הצהרה על תכונות ב

XMLשלב 3 : קבלת הפניה לתכונות שב שלב 4 : מימוש events (אובייקטים כגון כפתורים וטקסטים)

layout שלב 1 - עיצוב האפליקציה שנבנה בדוגמה זו תראה כך:

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 23: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

.LinearLayout ל RelativeLayoutונחליף את ה XML ראשית נפתח את קובץ ה

.vertical orientation נוסיף גם לאחר מכן נוסיף אובייקט בשם EditText למסך.

ה EditText הוא אובייקט שהמשתמש יכול לרשום בו פרטים.

אנו נבנה את ה EditText שלנו כך:

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 24: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

כעת ניצור עוד EditText שבו המשתמש ירשום את השם משפחה. ניצור גם button שעליו ילחץ המשתמש כדי שהשם שרשם יופיע על המסך.

לבסוף ניצור TextView שיציג על המסך את השם שיכתוב המשתמש.

שימו לב! סדר כתיבת האובייקטים במסך הXML משפיע על סדר הופעתם על המסך

הקוד הסופי הסופי שלנו בקובץ הXML ייראה כך: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 25: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

android:layout_height="match_parent" android:orientation="vertical" android:background="@drawable/back1" <- הוספנו כאן תמונה לרקע > <EditText android:layout_width="200dp" android:layout_height="wrap_content" android:id="@+id/etFname" android:hint="First Name" android:layout_gravity="center" android:textSize="30sp" /> <EditText android:layout_width="200dp" android:layout_height="wrap_content" android:id="@+id/etLname" android:layout_gravity="center" android:hint="Last Name" android:textSize="30sp" android:layout_marginTop="10dp" קביעת מרחק האובייקט מהאובייקט שמעל /> <Button android:layout_width="200dp" android:layout_height="wrap_content" android:text="Save" android:layout_gravity="center" android:id="@+id/btnSave"

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 26: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

android:textSize="30sp" android:layout_marginTop="10dp" קביעת מרחק האובייקט מהאובייקט שמעל /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/tvDisplay" android:text="" android:textSize="30sp" ></TextView> </LinearLayout>

:C# (class)שלב 2 - הצהרה על תכונות בקובץ ה כעת נצהיר בקובץ הC# על המשתנים שנרצה שישלטו לנו על האובייקטים מאחורי

הקלעים. נצטרך בשביל זה להגדיר משתנה לכל אחד מהאובייקטים שנרצה שיפעלו במהלך

השימוש באפליקציה:

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 27: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

XML שלב 3 - קבלת הפניה לתכונות שב :#C לאובייקטים שיצרנו בשלב 2 בקובץ XMLנבצע הפניה לאובייקטים שיצרנו בשלב 1 ב

:SetOnClickListener שלב 4 - האזנה באמצעות כעת הגיע החלק שבו אנו כותבים את הקוד שיפעל בזמן שנשתמש באפליקציה, הקוד

שיחיה את הlayout שעיצבנו.

תחילה נביא לbutton אפשרות האזנה לפונקציית לחיצה על כפתור. חשוב מאוד - ללא אפשרות האזנה הכפתור לא יעבוד ויהיה אובייקט חסר שימוש על

המסך! נכתוב את שורה זו בתוך פונקציית הonCreate אחרי שהפנינו את הbutton לאחד

XMLשיצרנו בקובץ ה

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 28: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

וכעת נרשום בתוך פונקציית ההאזנה פקודה לפיה כאשר המשתמש ילחץ על כפתור save והוא מלא את התיבות הטקסט של שם פרטי ושם משפחה, יופיע שמו המלא על

המסך בתוך תיבת הטקסט. נעשה זאת כך:

הקוד הסופי שלנו לדוגמה 2 ייראה כך:

XML:

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 29: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@drawable/back1" <- הוספנו כאן תמונה לרקע > <EditText android:layout_width="200dp" android:layout_height="wrap_content" android:id="@+id/etFname" android:hint="First Name" android:layout_gravity="center" android:textSize="30sp" /> <EditText android:layout_width="200dp" android:layout_height="wrap_content" android:id="@+id/etLname" android:layout_gravity="center" android:hint="Last Name" android:textSize="30sp" android:layout_marginTop="10dp" קביעת מרחק האובייקט מהאובייקט שמעל /> <Button android:layout_width="200dp"

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 30: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

android:layout_height="wrap_content" android:text="Save" android:layout_gravity="center" android:id="@+id/btnSave" android:textSize="30sp" android:layout_marginTop="10dp" קביעת מרחק האובייקט מהאובייקט שמעל /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/tvDisplay" android:text="" android:textSize="30sp" ></TextView> </LinearLayout> C#: using Android.App; using Android.OS; using Android.Support.V7.App; using Android.Runtime; using Android.Widget; using Android.Views; namespace App1 { [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 31: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

public class MainActivity : AppCompatActivity, Android.Views.View.IOnClickListener { Button btnSave; EditText etFName, etLName; TextView tvDisplay; protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // Set our view from the "main" layout resource SetContentView(Resource.Layout.activity_main); etFName = FindViewById<EditText>(Resource.Id.etFName); etLName = FindViewById<EditText>(Resource.Id.etLName); btnSave = FindViewById<Button>(Resource.Id.btnSave); tvDisplay = FindViewById<TextView>(Resource.Id.tvDisplay); btnSave.SetOnClickListener(this); } public void OnClick(View v) { if(etFName.Text.Length > 0 && etLName.Text.Length) { tvDisplay.Text = etFName.Text + " " + etLName.Text; } } }

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 32: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

} .Context כעת, לאחר שסיימנו את שתי הדוגמאות הראשונות, נלמד

אז מהו Context בעצם?

Context הוא בעצם הפניה למי שיצר את המשתנה. הוא יכול להיות הפניה לממשק על או מחלקת על שיצרה את המשתנה.

אנו יודעים שכל אובייקט יורש מObject, וב visual studio כל אובייקט יורש גם.Object שיורשת מ ,Context ממחלקת העל

?Objectאז למה בעצם לא להשתמש פשוט ב

כיוון שלמחלקת Context יש יותר פונקציות ותכונות שימושיות, וכמובן, לפי חוקי הירושה שאנו מכירים, מופע של מחלקת הבת יכול גם להשתמש בפונקציות ובתכונות של מחלקת

האב.?Contextמתי נשתמש ב

כאשר ניצור מחלקה, (כלומר קובץ C# שלא קשור לActivity) ונרצה להשתמש באובייקט כללי.

לדוגמה:TextView ובה פונקציה שמשנה את הטקסט של אובייקט Game נוכל ליצור מחלקה

.Activityשל ה #Cשנמצא בקובץ ה

איך נעשה זאת? ניעזר בקוד הבא:

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 33: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

דוגמה 3:

בדוגמה זו נלמד איך להאזין ללחיצה על הכפתור שבנינו בדוגמה 1 בעזרת מחלקה.(Activityמחוץ ל) חיצונית

נעשה זאת לפי השלבים שלמדנו:

שלב 1 -

נשאיר את הlayout זהה לזה שבדוגמה הראשונה (אפשר גם לבנות באותו פרויקט) שלב 2 -

נצהיר על אותם המשתנים כבדוגמה הראשונה. שלב 3 -

נתן הפניה באותה הצורה כבדוגמה 1.

עד כה האפליקציה שלנו זהה לאפליקציה הראשונה שבנינו.

שלב 4 - בשלב זה ניתן לתוכנית להאזין ללחיצה על כפתור במחלקה אחרת.

ראשית כדי ליצור מחלקה נוספת נעקוב אחר השלבים הבאים:

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 34: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

ניצור מחלקה בשם Game שיורשת מ Button וניתן לה מספר תכונות:

namespace Lesson1Ex1Introduction{

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 35: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

public class Game : Button { TextView tvDisplay; int point = 0; String message;

:Constructor ו public Game(int point, String message, TextView tvDisplay,Context context):base(context) { this.point = point; this.message = message; this.tvDisplay = tvDisplay; }

:settersו getters ניתן גם public int getPoint() { return point; } public void setPoint(int point) { this.point = point; } public String getMessage() { return message; } public void setMessage(String message)

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 36: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

{ this.message = message; }

:toStringולבסוף אפשר להוסיף גם את פונקציית ה

public String toString() { return "Game{" + "point=" + point + ", message='" + message + '\'' + '}'; }

עכשיו לאחר שיצרנו את הבסיס למחלקה, נבנה פונקציית OnClick שתאזין לכפתור:

נגדיר שהמחלקה שלנו תממש את הממשק IOnClickListener שבו נמצאת פונקציית:OnClick ההאזנה

public class Game : Button, Android.Views.View.IOnClickListener שימו לב שחובה לרשום לפני כן את הButton, מפני שאחרת זה לא יקלוט את המחלקה

IOnClickListener

public void OnClick(object sender, System.EventArgs e) { Button btn = (Button)sender; if (btn.Id == Resource.Id.btnplus) { point++; }

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 37: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

else if (btn.Id == Resource.Id.btnminus) { point--; } this.message = "You Have " + this.point + " points"; tvDisplay.Text = this.message; } } }

:MainActivityעכשיו נראה איך יראה קובץ ה namespace Lesson1Ex1Introduction { [Activity(Label = "Lesson2Ex1Introduction", MainLauncher = true, Icon = "@mipmap/icon")] public class MainActivity : Activity { Button add; Button minus; TextView tvDisplay; protected override void OnCreate(Bundle savedInstanceState { base.OnCreate(savedInstanceState); // Set our view from the "main" layout resource SetContentView(Resource.Layout.Main);

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 38: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

// Get our button from the layout resource, // and attach an event to it add = FindViewById<Button>(Resource.Id.btnplus); minus = FindViewById<Button>(Resource.Id.btnminus); tvDisplay = FindViewById<TextView>(Resource.Id.txtdisplay); Game game = new Game(0, "", tvDisplay,this); add.Click += game.OnClick; minus.Click += game.OnClick; } } }

.Toast בשיעור זה נלמד מהו Toast הוא בעצם הודעה שמופיעה על המסך למספר שניות ולאחר מכן נעלמת.

כאשר נרצה להשתמש בToast נכתוב אותו בקובץ הC# במקום שבו נרצה שהוא יפעל.

לדוגמה, במידה ונרצה שבכל פעם שהמשתמש ילחץ על כפתור תופיע הודעה קצרה, נכתוב קוד כזה:

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 39: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

סיכום המושגים: לסיום הפרק הראשון נעבור על כל המושגים שלמדנו עד כה:

layout - קבצי UI שמכילים את כל הגרפיקה של האפליקציה

Activity-מסך באפליקציה. בנוי מקובץ XML (החלק הגרפי) וקובץ C# (מאחורי הקלעים)

onCreate - הפונקציה הראשונה שנקראת כשמגיעים למסך חדש.

Button ,TextView,ImageView,EditText - אובייקטים שלמדנו איך להשתמש בהם

wrap_content - יחידת מידה לפיה האובייקט תופס את השטח המינימלי שדרוש לתוכן

match_parent -יחידת מידה לפיה האובייקט מתפרש על פני כל השטח הפנוי (לפי

רזולוציית המסך)

dp - יחידת מידה של אורך

sp - יחידת מידה של גודל הטקסט

hint - רמז על תיבת טקסט

(dp /wrap_content /match_parent נקבע לפי) רוחב האובייקט - layout_width

(dp /wrap_content /match_parent נקבע לפי) אורך האובייקט - layout_height

gravity_layout - סדר האובייקט על המסך (שמאל/ מרכז/ ימין)

Copyright © 2019 appSchool. Powered by appSchool.co.il

Page 40: c# תביבסב דיאורדנאל תויצקילפא חותיפ xamarinOnClick תייצקנופ םישממ ונאש תינכותל םירמוא ונחנא הלא תורוש םימשור

gravity - סדר התוכן בתוך האובייקט (שמאל/ מרכז/ ימין…)

margin - מרחק האובייקט מאובייקט אחר/ דופן המסך (לפי השוליים)

padding - מרחק התוכן מהשוליים של האובייקט

onClick - פונקציה שמאזינה ללחיצה על כפתור. בשביל לממש אותה צריך לממש את

(Android.Views.View.IOnCliclListener) .המחלקה בה היא נמצאת

Resources - תיקיה בה מופיעים כל קבצי הXML (הקבצים שקשורים לגרפיקה של

האפליקציה)

drawable- תיקיה המכילה את התמונות

values - תיקיה המכילה הגדרות מרכזיות של האפליקציה כגון צבע, שם האפליקציה וכו'

manifest - קובץ בהגדרות של האפליקציה. בו נרשמים המחלקות והקבצים שנוצרים

Copyright © 2019 appSchool. Powered by appSchool.co.il