מבוא
בפרק הקודם ראינו כיצד ניתן לבנות layouts (מסכים) שונים ע"י שימוש בשפת markup – XML כפי שאנחנו מכירים מפלטפורמות אחרות כגון WEB/ASP.NET או WPF.
ע"פ הנחייה של Google וכל best practice שתפגשו אשר דן בסוגיה (XML או קוד), מומלץ לשתמש ב XML על מנת לבנות layouts, אך בכל זאת כדאי מאוד שנכיר גם את השיטה השניה, בנייה ע"י code.
בואו נתחיל:
בואו ניזכר במתודה אשר נקראית
במקרה ה XML-י הבנאי קיבל שם קובץ הLayout. כאשר אנו כותבים את כל הממשק בקוד, הוא יקבל View.
בואו נראה דוגמא קצרה:
נניח שאני רוצה שה VIEW של ה Activity שלי יכיל:
Button – עם המלל hit me
TextView - עם המלל : “hello world”
כמו כן, ארצה ששני הcontrols הללו יופיעו בצורה מאונכת אחד מעל השני, וממורכזים אופקית.
הקוד שיבצע את המשימה הנ"ל הינו הקוד הבא:
מהם היתרונות ומהם החסרונות של בנייה layouts בשיטה זו?
החסרונות המוהבקים הם:
- חוסר הפרדה בין לוגיקה לבין UI ברמת החלוקה לקוד, יכול להיווצר ערבוב של השניים, מה שיקשה על התחזוקה של הקוד.
- יש צורך להכיר באופן לא הכי אינטואיטיבי את הAPI על מנת לדעת בדיוק כיצד לגשת לאיזשהו פרמטר חשוב שאנחנו רוצים להגדיר, כגון gravity, או LayoutParams.
- מה יקרה כשנרצה להעביר את הקוד הזה למישהו על מנת שיתחזק אותו? יהיה לו מעט קשה להבין מהם המקומות שבהן הוא צריך לכתוב קוד חדש, כי הוא לא מחולק כמו שצריך.
- אין עורך גרפי, לא ניתן לגרור controls כמו במצב ה XML י, לכן אנחנו לא באמת יודעים כיצד ה layout ייראה עד שנריץ את הפרוייקט שלנו באמולטור או במכשיר הנייד שלנו.
- קשה לעשות re use בקוד שכזה, כי ב XML ניתן לעשות include ל controls ב layouts אחרים, על מנת ליצור תבניות בדומה לCSS*
*לא יילמד במדריך זה
ומהם היתרונות?
- למפתחי ה swing שביניכם, השיטה הזאת ממש דומה לבניית ממשקים בswing ואתם תרגישו מאוד בנוח
- הכתיבה הינה מהירה יותר למנוסים שביניכם וברגע שרגילים לכתוב קוד OO, אז יש שטף בכתיבה מבלי לעבור XML אחורה וקדימה.
- בעיקרון, אפשר לכתוב פחות ולהשיג יותר.
בפרק הקודם ראינו כיצד ניתן לבנות layouts (מסכים) שונים ע"י שימוש בשפת markup – XML כפי שאנחנו מכירים מפלטפורמות אחרות כגון WEB/ASP.NET או WPF.
ע"פ הנחייה של Google וכל best practice שתפגשו אשר דן בסוגיה (XML או קוד), מומלץ לשתמש ב XML על מנת לבנות layouts, אך בכל זאת כדאי מאוד שנכיר גם את השיטה השניה, בנייה ע"י code.
בואו נתחיל:
בואו ניזכר במתודה אשר נקראית
setContentView(R.layout.main),
זוהי מתודה של המחלקה Activity, אשר בבנאי שלה אנו בעצם שמים reference ל VIEW אשר יופיע לנו בזמן שהActivity הרלוונטי בפוקוס (Forground). במקרה ה XML-י הבנאי קיבל שם קובץ הLayout. כאשר אנו כותבים את כל הממשק בקוד, הוא יקבל View.
בואו נראה דוגמא קצרה:
נניח שאני רוצה שה VIEW של ה Activity שלי יכיל:
Button – עם המלל hit me
TextView - עם המלל : “hello world”
כמו כן, ארצה ששני הcontrols הללו יופיעו בצורה מאונכת אחד מעל השני, וממורכזים אופקית.
הקוד שיבצע את המשימה הנ"ל הינו הקוד הבא:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// views declaration
LinearLayout linearLayout = new LinearLayout(this);
Button btn = new Button(this);
TextView tv = new TextView(this);
// setting parameters for the main linearlayout container
linearLayout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
linearLayout.setOrientation(LinearLayout.VERTICAL);
linearLayout.setGravity(Gravity.CENTER_HORIZONTAL);
// setting parameters for the textview
tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
tv.setText("hello world");
linearLayout.addView(tv, 0);
linearLayout.addView(btn, 1);
// setting parametrs for the button
btn.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
btn.setText("hit me");
// setting the linear layout as the view of the current activity
setContentView(linearLayout);
}
מהם היתרונות ומהם החסרונות של בנייה layouts בשיטה זו?
החסרונות המוהבקים הם:
- חוסר הפרדה בין לוגיקה לבין UI ברמת החלוקה לקוד, יכול להיווצר ערבוב של השניים, מה שיקשה על התחזוקה של הקוד.
- יש צורך להכיר באופן לא הכי אינטואיטיבי את הAPI על מנת לדעת בדיוק כיצד לגשת לאיזשהו פרמטר חשוב שאנחנו רוצים להגדיר, כגון gravity, או LayoutParams.
- מה יקרה כשנרצה להעביר את הקוד הזה למישהו על מנת שיתחזק אותו? יהיה לו מעט קשה להבין מהם המקומות שבהן הוא צריך לכתוב קוד חדש, כי הוא לא מחולק כמו שצריך.
- אין עורך גרפי, לא ניתן לגרור controls כמו במצב ה XML י, לכן אנחנו לא באמת יודעים כיצד ה layout ייראה עד שנריץ את הפרוייקט שלנו באמולטור או במכשיר הנייד שלנו.
- קשה לעשות re use בקוד שכזה, כי ב XML ניתן לעשות include ל controls ב layouts אחרים, על מנת ליצור תבניות בדומה לCSS*
*לא יילמד במדריך זה
ומהם היתרונות?
- למפתחי ה swing שביניכם, השיטה הזאת ממש דומה לבניית ממשקים בswing ואתם תרגישו מאוד בנוח
- הכתיבה הינה מהירה יותר למנוסים שביניכם וברגע שרגילים לכתוב קוד OO, אז יש שטף בכתיבה מבלי לעבור XML אחורה וקדימה.
- בעיקרון, אפשר לכתוב פחות ולהשיג יותר.