
EditText לקליטת מספר, לחצן Create, ומתחתיהם ScrollView שמכיל LinearLayout (בשם linearLayoutContainer) לגלילה כשהלחצנים רבים. ה-layout הראשי הוא linearLayoutMain.Integer.parseInt על הטקסט ב-EditText.new Button(this), כי ה-activity הוא ה-Context.setText, setAllCaps(false) ו-setBackgroundColor עם צבע אקראי.getRandomColor מגרילה שלושה גוונים, אדום, ירוק וכחול, בעזרת Math.random() שמחזיר מספר בין 0 ל-1 (כולל 0 ולא כולל 1). מכפילים ב-256, ממירים ל-int, ומחזירים Color.rgb(red, green, blue).new LinearLayout.LayoutParams עם רוחב MATCH_PARENT וגובה WRAP_CONTENT, וקובעים שוליים של עשרה פיקסלים מכל צד. בקוד היחידות הן פיקסלים. אפשר להמיר ל-dp בנוסחה.linearLayoutContainer.addView(button, layoutParams).setOnClickListener עם מחלקה אנונימית. הפונקציה onClick מקבלת את הלחצן ששלח את האירוע (v). מקבלים ממנו את הרקע עם getBackground(), ממירים ל-ColorDrawable, קוראים getColor(), ומציבים את הצבע כרקע של linearLayoutMain.הטקסט המלא של הדקות הראשונות בהרצאה «Dynamic Controls» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אחרי שראינו את ה-Listener Design Pattern וראינו איך אנחנו יכולים להירשם לאירועים בצורה דינמית, בואו נראה עכשיו איך אנחנו יכולים ליצור רכיבים בצורה דינמית וכמובן לאחר מכן להירשם לאירועים שלהם.
יש לנו פה תוכנית פשוטה של תיבת טקסט, אדיט טקסט ולחצן. יוזר מכניס בתיבה כמה לחצנים נוספים והוא רוצה, לוחץ על לחצן קריאייט ואנחנו רוצים כאן באזור הזה ליצור לו דינמית לחצנים לפי המספר שהוא הכניס כאשר האזור הזה זה בעצם אזור שמכיל סקרול view המאפשר לבצע סקרולינג כי יכול
להיות שהיוזר יכניס מספר גדול ויהיו הרבה רכיבים וליניאר לאאוט שנמצא בתוך הסקרולינג ואנחנו רוצים להכניס את הלחצנים בצורה דינמית לתוך הליניאר לאאוט הזה כלומר לתוך הליניאר לאאוט קונטיינר מה הלחצנים עושים אז בוא נגיד שברגע כשיוזר לוחץ על לחצן,
אז הלחצן גורם לצביעה של צבע הרקע של המסך כולו, כאשר אנחנו הולכים לצבוע את ה-Linear Layout הראשי, Linear Layout Main.
ובוא נניח שהצבע גם יהיה רנדומלי. אז הכי פשוט זה להגדיר לחצן עם צבע רקע רנדומלי, ואז כשלוחצים עליו הוא בעצם מעביר את הצבע שלו לצבע של ה-Layout כולו.
ואנחנו הולכים לראות בתרגיל הזה גם יצירה דינמית של לחצנים וגם רישום דינמי לאירועים שלהם, שזה בעצם עוד סיבה למה אנחנו רוצים להירשם דינמית לאירועים.
דבר ראשון, אנחנו רוצים לקבל את המספר שנכנס בתוך ה-Edit Text. אז בואו ניקח כאן איזשהו אינטג'ר קאונט, נגדיר אינטג'ר get, יותר דיוק parseInt וניגש ל-Edit Text count, גט טקסט טו סטרינג ואם יש לנו את המספר שהיוזר
הכניס אז אנחנו כמובן רוצים לייצר את הלחצנים כתלות במספר הזה אז יש לנו פה לולאה ואנחנו רצים עד אקאונט מה אנחנו רוצים ליצור דבר ראשון אנחנו רוצים ליצור לחצן חדש וזה פשוט יצירה של אובייקט חדש לגמרי על ידי האופרטור ניו עכשיו אנחנו רואים שהקונסטרקטור
שלו אומר לנו תביאו לי מינימום את הקונטקסט אז בואו נגדיר לו דיס אנחנו מיין אקטיביטי אז אנחנו קונטקסט. לאחר מכן אנחנו רוצים להגדיר כל מיני מאפיינים ללחצן, אז בואו ניגש אליו ונגדיר לדוגמה set text change color.
בואו נגדיר לדוגמה button set all caps false שלא יהיה הכל אותיות גדולות. button.set background color אנחנו רוצים להגדיר איזשהו צבע רקע רנדומלי. צבע זה אינטג'ר ולכן בואו נפגש ונבנה איזושהי פונקציית אזר פרטית כזאת שמחזירה אינטג'ר ונקראת get random color אז איך אנחנו יוצרים צבע יש לנו פה שלושה גוונים red, green וblue ליצירת צבע רקע רנדומלי
יש לנו את המחלקה math.random ואנחנו רוצים שכל גוון יהיה בין 0 ל-256 כולל 0 ולא כולל 256 וזה בדיוק הקוד הזה לנו כאן מראה לאינטג'ר מפני שמאת' נקודה רנדום מחזירה לנו מספר רנדומלי בין 0 ל-1 דאבלי כזה ואנחנו רוצים למתוח אותו עד 0 בין 0 ל-256.
המספר שחוזר הוא כולל 0 אך לא כולל 1 ולכן כל המתיחה הזאת תהיה בין 0 ל-256 כולל 0 לא כולל 256. אנחנו ממירים את זה לאינטג'ר כי אנחנו רוצים את הערך האינטג'רי של המספר רנדומלי ואנחנו מוצאים שלושה גוונים רד, גרין ובלו ואחרי שיש לנו שלושה גוונים כאלה אנחנו יכולים להחזיר color.rgb שאומר לנו הנה שלושת הגוונים איזה גוונים בעצם אתם רוצים לתת לי ויש לנו אותם רד, גרין ובלו והנה יש לנו פונקציה שמחזירה צבע
רקע רנדומלי שבנוי משלושה גוונים. אז אנחנו יכולים לשתול את הפונקציה כאן והנה עכשיו ללחצן יש צבע רקע. רנדומלי. עוד מאפיינים שאנחנו רוצים לתת זה בעצם מאפייני layout המאפיינים האלה שנתנו זה מאפיינים שקשורים ללחצן עצמו ויש סדרה של מאפיינים שקשורים ל-layout לצורך כך אנחנו פותחים משהו שנקרא linear layout כי זה ה-layout שלנו
נקודה layout params זה בעצם משתנה שמחזיק מאפיינים לגבי ה-layout עצמו אז ובואו ניצור אובייקט ממנו new linear layout.layout.params ואנחנו רוצים לתת כמה דברים.
דבר ראשון linear layout.layout.params.match.parent ובואו פשוט נעתיק את זה, נדביק ונשנה את זה ל-wrap-content.
אז עכשיו יש לנו בעצם את ה-width וה-height של הלחצן שקשורים ל-layout עצמו. דבר נוסף שאנחנו רוצים לתת זה מרג'ין, אז בואו נגדיר איזה שהם עשרה פיקסלים מכל צד. כשאנחנו מתייחסים בקוד, אז אנחנו כמובן מתייחסים רק לפיקסלים.
אפשר לבצע איזושהי נוסחה ולהמיר את זה ל-dps. לאחר מכן בואו ניתן את המידע עצמו ל-linear layout שעוטף בעצם את הלחצנים. כלומר, אנחנו רוצים לקחת עכשיו את הלחצן ולהוסיף אותו ל-layout.