PracticU

Set Dimensions Programmatically

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › Set Dimensions Programmatically
מילון מושגים:
Java - שפת תכנות עילית ומונחית עצמים, הרצה על מכונה וירטואלית (JVM) ומשמשת לפיתוח מגוון יישומים.
רכיב - יחידת בניין עצמאית וניתנת לשימוש חוזר בתוך מערכת או ממשק משתמש, שאחראית על חלק מוגדר מהתפקוד.
XML - שפת סימון לייצוג נתונים מובְנים בעזרת תגיות, המשמשת להחלפת מידע בין מערכות ולקובצי הגדרות.
אמולטור - תוכנה שמחקה מכשיר או סביבה אחרת, למשל כדי להריץ ולבדוק אפליקציית מובייל על המחשב.

Set Dimensions Programmatically
בקוד Java אפשר לתת לרכיב מידות רק בפיקסלים, ולכן קביעת רוחב ב-dp בזמן ריצה דורשת המרה. כך עושים זאת בלי שהתוצאה תשתנה בין מכשירים.
איך זה עובד
1. הבעיה: ב-XML או בחלון Properties אפשר להשתמש בכל יחידה (אינץ', sp, dp, פיקסלים). מהקוד אפשר רק פיקסלים, ופיקסלים נראים שונים בדחיסויות שונות.
2. הדוגמה: שני TextView. הראשון מוגדר מראש ל-100dp והשני עם ID בשם textViewDynamic. לחיצה על לחצן set width אמורה לתת לשני רוחב של 100 dp בדיוק.
3. המרה: מקבלים DisplayMetrics דרך getResources(), ואז קוראים ל-TypedValue.applyDimension עם הקבוע TypedValue.COMPLEX_UNIT_DIP, עם הערך 100 ועם ה-DisplayMetrics.
4. הצבה: מעגלים את התוצאה ל-int ומציבים ב-setWidth של ה-TextView.
5. בדיקה: באמולטור וגם במכשיר האמיתי הרוחב נראה זהה, למרות שהדחיסות שונה.
6. בדיקת מספרים: כדי לראות כמה פיקסלים זה יצא, מציגים בטקסט את Rounded Pixels. באמולטור התוצאה 300 פיקסלים, כי הדחיסות פי 3 מ-160, ובמכשיר האמיתי 100 פיקסלים, יחס 1 ל-1.
בקצרה
לרכיבים עצמם חייבים לתת פיקסלים. להמרה מ-dp או sp משתמשים ב-TypedValue ובקבועים שלו, ואפשר גם לדעת כמה פיקסלים זה יוצא.
אחרי השיעור אפשר לקבוע מימדים בקוד כך שיראו אותו דבר על כל מכשיר.

פרקי ההרצאה: Set Dimensions Programmatically

  1. 00:00

    הגבלת הקוד ליחידות פיקסלים

  2. 01:00

    הצורך בהמרת יחידות

  3. 01:47

    הגדרת TextView ראשון ב-100 DP

  4. 03:21

    שינוי TextView שני דרך הקוד

  5. 04:28

    קבלת DisplayMetrics

  6. 05:06

    המחלקה TypedValue ו-applyDimension

  7. 05:46

    המרת 100 DP לפיקסלים

תמלול ההרצאה: Set Dimensions Programmatically

הטקסט המלא של הדקות הראשונות בהרצאה «Set Dimensions Programmatically» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:03

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

  2. 00:16

    בצורה כזאת יכלנו פשוט לתת לו כל יחידת מידע שרצינו, בין אם זה אינצ'ים, בין אם זה SP או DP או פיקסלים. אבל מה קורה אם אנחנו רוצים במהלך הריצה של האפליקציה לבצע את זה, כלומר דרך קוד הג'אווה?

  3. 00:34

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

  4. 01:06

    הרצוי. בואו נראה איך עושים את זה. בואו ניקח לחצן, ניתן לו פה איזשהו טקסט ונגדיר שהטקסט שלו יהיה Set Wid והוא אמור בזמן הריצה לתת רוחב מסוים ל-Text View.

  5. 01:29

    בואו ניקח ונחפש את האירוע On Click שלו, נגדיר אותו כ-Button Set Wid underline on-click כעת בואו ניקח text view ראשון בואו נגדיר לו טקסט ונגדיר לו את הטקסט כ-100 dp בנוסף נגדיר לו גם את הרוחב כ-100 dp ממש כאן בחלון הפרופרטיז בואו ניתן לו טקסט alignment שיהיה באמצע ובואו ניתן לו טקסט סייז 20 sp שיהיה טיפה

  6. 02:15

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

  7. 02:39

    נגדיר לו id, ניתר את ה-id שלו, נקרא לו text view dynamic, נגדיר לו טקסט סייז, נצבע אותו גם כן, באותו צבע ונגדיר לו שהטקסט שלו זה כמה וכי מכדי שהוא לא יתפוס לנו את כל ה-100 dp כך נראה שבמהלך הקוד אנחנו יכולים להגדיר אותו בדיוק 100 dp אז יש לנו את הלחצן יש לנו טקסט

  8. 03:26

    view ראשון שמוגדר בחלון הפרופרטיז כ-100 dp בדיוק ואנחנו רוצים בלחיצה על הלחצן להגדיר את הטקסט view השני כ-100 dp גם כן כאשר בקוד אנחנו לא יכולים להגדיר dp אלא רק פיקסלים אז איך אנחנו עושים את זה אז בואו ניגש לxml נלחץ Alt Enter עוד Enter אחד אנחנו כעת בתוך הקוד בואו נגדיר פה Text View Dynamic תיאר אותו d Text View Dynamic ואנחנו רוצים בלחיצה

  9. 04:18

    על הלחצן ללכת ולהצליח להכניס לתוכו 100 dp דבר ראשון אנחנו צריכים שוב פעם את אובייקט ה-resources שראינו מקודם.

  10. 04:34

    פונקציית get resources תביא אותו. לאחר מכן אנחנו רוצים את ה-display matrix. ויש לנו כרגע מידע לגבי הטלפון הנוכחי, לגבי המכשיר הנוכחי. הדבר הבא שאנחנו רוצים זה פיקסלים.

  11. 04:57

    איך אנחנו בעצם מקבלים בדיוק כמה פיקסלים אנחנו צריכים להכניס במכשיר הנוכחי בכדי להגיע ל-100 dp. אנחנו צריכים להשתמש במחלקה שנקראת Typed Value.

  12. 05:14

    Typed Value זאת מחלקה שנותנת מידע לגבי טיפוסים שונים. יש לה פונקציה שנקראת Applied Dimension. Typed Value מכילה בנוסף כל מיני קבועים המייצגים טיפוסים שונים.

  13. 05:34

    לדוגמה יש לנו פה Complex Unit DIP שזה Density Independent Pixel והקבוע הזה מייצג את יחידת המידע dp אנחנו רוצים להמיר dp 100 יחידות ממנו כלומר להמיר 100 dp לפיקסלים והנה אנחנו שולחים לו את הדיספליי מטריקס אז בעצם קיבלנו מימדים לגבי הטלפון הנוכחי לגבי המכשיר הנוכחי ליתר דיוק ועשינו איזושהי המרה לגבי 100 dp לפיקסלים כל מה שאנחנו רוצים לעשות

  14. 06:16

    זה לגשת לטקסט ויו דיינמיק סט וויד נעשה פה

לקורס המלא: קורס פיתוח אפליקציות לאנדרואיד

ההרצאה הקודמת: Display Metrics

ההרצאה הבאה: Layout

הרצאות קשורות מקורסים אחרים

  • הסבר על set
  • Set Bitwise Bit masks - Multiple Choice Data Structures

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode
  • קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון