Before I begin coding, I'm going to answer this question.
I really still know about only two view groups, LinearLayouts and
RelativeLayouts.
Now the key word right here was that these two have to take up equal space.
Using layout weight is a really easy way to do this.
Okay, let's go ahead and look at the code.
All right, I'm not working in Java anymore, so I'm going to go ahead and
go over to activity_main.xml.
And here's my XML file.
So I'm going to start by putting all of this code to another LinearLayout.
And this is the parent LinearLayout for my two mini LinearLayouts.
And I'm going to move these two lines up here,
because they need to be attached to the root view, add a closing brace.
Okay, Android Studio automatically made a closing tag for me right here.
So, I'm going to go ahead and
cut this closing tag, scroll down to the bottom, and paste it.
Okay, now I got a red squiggly line, and if I look at the error,
I can see that it says I need to have layout_height and layout_width defined.
Whoops! All right, let's do that.
So because this is the root view, I'll go ahead and make this match_parent.
Okay, so
I have one LinearLayout surrounding a child LinearLayout right now.
And if I go to the Preview, it looks pretty much the same.
Okay, so what I'm going to do, is I'm going to copy everything in
the Team A LinearLayout, and right below Team A, I am going to paste it.
And this is going to be my Team B LinearLayout.
So, now things are beginning to look a little bit disorganized.
So I am going to do a Cmd+A, or a select all, and then I am going to
use the keyboard shortcut Cmd+Option+L to format my code.
On Windows, that's Ctrl+Alt+L, that looks a little bit better.
Now, I just want to make sure that you understand what's going on here.
Scrolling to the top, I have a root LinearLayout here.
It starts here, and if I scroll all the way to the bottom, it ends here.
Inside of that root LinearLayout, I'm going to scroll up again.
I've got one child layout here, which starts here.
I'll scroll down slowly.
And it ends here.
This is for TeamA.
And I have another child LinearLayout, which starts here.
Scroll down slowly, ends here for TeamB.
All right, now I noticed some red up at the top, so
I'm going to scroll up again and see what the error says.
Wrong orientation, no orientation specified, and default is horizontal.
Yet this layout has multiple children,
where at least one has width match_parent.
Hm, well I do want it to be horizontal, but let's go ahead and
specify the orientation.
Again, this is not technically needed, because the default is horizontal, but
it's good to be explicit.
Okay, and it was saying something about children covering each other up.
I'm going to click on Preview.
Hm, And this doesn't seem to have really changed very much, even though I went
to all the trouble of copying and pasting another LinearLayout.
This might have had to do with the error that I just looked at.
It was saying that it's a horizontal layout.
So it's trying to lay these two LinearLayouts next to each other, but
that the LinearLayout has a layout_width of
match_parent which fills up the screen.
So basically my first LinearLayout is filling up the screen, and
then the other LinearLayout is getting placed next to it somewhere off screen.
So let's think about what we actually want to have happen at this point.
We want to have the two layouts taking up equal space and next to each other.
So this when we're going to need to bring in layout_weights.
I'm going to take the first LinearLayout and
give it a layout_weight of 1.
I'm also going to set its width to 0.
Okay, so we can see already that we do in fact have two LinearLayouts,
they're just not really being displayed properly.
But this is a bit better.
So I have to put a layout_weight also on my second LinearLayout,
this one right here.
So I'm going to scroll down.
Here's my second LinearLayout.
I'm going to do exactly the same thing.
I'm going to say that it has a layout_weight of 1 as well, so
now they have equivalent layout_weights.
And then I'm going to set the width to 0.
Okay, and the reason that I set the width of both of them to 0,
is basically, that if both of these sides aren't taking up any width.
Then, it's going to take all the extra space,
which is the entire screen, and divide it up, giving half to one and
half to the other, because they both have the same layout weight.
If that's at all confusing, I've linked to a few videos in
the instructor notes that talk about layout_weight.
Okay, but this is looking pretty good, except it says Team A.
I'm going to scroll down to change that here, change this to Team B.
Now you might have noticed that there is also an error here, and
that error occurs because, well, we have a duplicate ID.
Remember, I just copied and pasted the code.
So, we basically have two things that are trying to have the same id
of team_a_score.
So, I'm actually going to change this to team_b_score.
Okay, this is looking pretty good.
It's a little hard to see.
I'll zoom in.
But, it says Team B here.
And I got all the correct buttons, and all the correct text views.
So I'm going to try to run this on my phone.
Okay, and this looks pretty good.
Now if I press the Team A buttons, it's updating so that's great.
If I press the Team B buttons, well, it's also updating.
That's special.
But remember, we just wanted to get the XML right.
We didn't really care about the Java.
But now that we got the XML working, why not fix the Java?
قبل أن أبدأ بكتابة الكود سأقوم بالإجابة على هذا السؤال
أنا أعرف فقط اثنتين من طرق العرض: LinearLayouts
RelativeLayouts
الكلمة المهمة الآن أن كلاً من طريقتي العرض يجب أن تشغل نفس المساحة
إن استخدام layout_weight هو وسيلة سهلة حقاً للقيام بذلك
حسناً فلنمضي قدماً ولنلقي نظرة على الكود
حسناً، أنا لن أعمل بلغة جافا بعد الآن، لذا سأمضي قدماً
وسأنتقل إلى "activity_main.xml"
وها هو ملفي الـ XML.
لذلك سأبدأ بوضع كل هذا الكود في LinearLayout آخر
وهذا LinearLayout الأصل لكلا LinearLayouts الأصغر
و سأقوم بتحريك هذين السطرين هنا
لأنها يجب أن تكون مرتبطة RootView نضيف قوس إغلاق
حسناً، سيقوم "Android Studio" تلقائياً بإنشاء وسوم إغلاق هنا
لذا، سأمضي قدماً
سأقوم بقص وسوم الإغلاق وأنزل إلى الأسفل ومن ثم أقوم بلصقه
حسناً، الآن لدي خط أحمر متعرج وإذا نظرت إلى الخطأ
أرى أنه ينبهني إلى أنني أحتاج إلى تحديد layout_height وlayout_width
عجباً! حسناً، فلنقم بذلك
لأن هذه هي جذر طريقة العرض سأمضي قدماً وأنشئ match_parent
حسناً، إذاً
الآن لدي LinearLayout واحدة تحيط LinearLayout أصغر
وإذا قمت بالمعاينة ستبدو نفسها إلى حد كبير
حسناً، لذا ما سأقوم به هو أنني سأنسخ كل شيء في
TeamALinearLayout وسأقوم بلصقها أسفل TeamA
وسيكون هذا TeamBLinearLayout
حسناً، بدأت الأمور الآن تبدو فوضوية قليلاً
لذا سأقوم Cmd+A أو تحديد الكل ومن ثم سأقوم
سأستخدم اختصارات لوحة المفاتيح Cmd+Option+L لأقوم بتهيئة الكود
على ويندوز،إنها Ctrl + Alt + L هذا يبدو أفضل قليلا
الآن، أريد فقط أن اتأكد من أنك تفهم ما يحدث هنا
سأمرر إلى الأعلى لدي LinearLayout جذر هنا
إنها تبدأ هنا، وإذا قمت بالتمرير إلى الأسفل فإنها تنتهي هنا
داخل جذر LinearLayout سأقوم بالتمرير أعلى مجدداً
لدي تخطيط فرعي هنا والذي يبدأ من هنا
سأمرر إلى لأسفل ببطء
وهو ينتهي هنا
هذا من أجل TeamA
ولدي LinearLayout فرعي آخر و الذي يبدأ هنا
سأمرر للأسفل ببطء والتي تنتهي هنا TeamB
حسناً لقد لاحظت خط أحمر في الأعلى، لذا
سأمرر إلى الأعلى مرة أخرى لأرى ما تقوله رسالة الخطأ
توجيه خاطئ، لم يتم تحديد التوجيه الافتراضي هو أفقي
حسناً هذا التصميم لديه عدة أفرع
حيث واحد على الأقل لديه width match_parent
أريد أن يكون أفقي فلنمضي قدماً
ونحدد الاتجاه
مرة أخرى، ليس هناك حاجة إليها من الناحية الفنية لأن الافتراضي هو أفقي، ولكن
من الجيد أن تكون واضحة
حسناً، كان يقول شيئاً عن الأولاد التي تغطي بعضها البعض
سأنقر على معاينة
لا يبدو أنها تغيرت بشكل فعلي كثيراً على الرغم من أنني قمت
بكل عناء نسخ ولصق LinearLayout الأخرى
ربما هذا له علاقة بالخطأ الذي عاينته للتو
كان يقول أنه HorizontalLayout
لذا سأحاول وضع كلتا LinearLayouts بجانب بعضهما البعض، ولكن
LinearLayout لديه layout_width
match_parent التي تملأ الشاشة
وذلك أساسا أول LinearLayout يملىء الشاشة
ثم يحاول LinearLayout الآخر أن يتوضع بجانبه في مكان ما خارج الشاشة
لذا فلنفكر بما نريده فعلاً أن يحدث في هذه المرحلة
نريد أن يكون لدينا تصميمين يشغلان مساحة متساوية ويكونان بجانب بعضهما البعض
لذلك سنحتاج هنا إلى جلب layout_weights
سأقوم باتخاذ LinearLayout الأول
وسأعطيه layout_weight من 1
سأقوم أيضا بضبط عرضه إلى 0
حسناً، يمكننا أن نرى أن ما لدينا في الواقع اثنين من LinearLayouts
إنهم فقط لا يتم عرضهم بشكل صحيح
ولكن هذا هو أفضل قليلا
لذلك يجب أن أضع layout_weight أيضا في LinearLayout الثاني
هذا الجانب هنا
سأقوم بالتمرير إلى الأسفل
وهذا LinearLayout الثاني
سأقوم بفعل نفس الشيء بالضبط
سأقول أن التصميم لديه layout_weight من 1 كذلك، لذا
الآن لديهم layout_weights متساوية
سأقوم بتعيين العرض إلى 0
حسناً، والسبب أنني قمت بضبط عرض كل منهما إلى 0
في الأساس، أنه إذا كان كلا هذه الأطراف لا تشغل أي عرض
إذاً فإنها ستشغل كامل المساحة الإضافية
والتي هي الشاشة بأكملها، وتقسمها لتعطي نصف إلى إحداهما
والنصف الثاني إلى الأخرى لأن كلا منهما له نفس layout_weight
لقد قمت بوضع روابط لبعض مقاطع الفيديو في حال كان ذلك مربك جداً
ملاحظات المدرس التي تشرح layout_weight
حسناً، هذا هو يبدو جيداً جداً باستثناء أنه يقول TeamA
سأقوم بالتمرير إلى الأسفل لتغيير ذلك هنا، سأغيرها إلى TeamB
لا بد أنك قد لاحظت وجود خطأ هنا
إن هذا الخطأ يحدث لأنه حسناً، لدينا معرف مكرر
تذكر، لقد نسخت ولصقت الكود للتو
لذلك، لدينا في الأساس اثنين من الأشياء التي تحاول أن يكون لها نفس المعرف
من team_a_score
لذلك، سأقوم فعلياً بتغيير هذا إلى team_b_score
حسناً، هذا هو يبدو ممتازاً
الرؤية صعبة قليلاً
سأقوم بالتكبير
ولكن، مكتوب هنا TeamB
و لدي كل الأزرار ومربعات النص الصحيحة
سأقوم بمحاولة تشغيل هذا على هاتفي
حسناً، وهذا يبدو ممتازاً
الآن إذا ضغطت على أزرار TeamA إنها تستجيب لذا فإن هذا أمر رائع
إذا ضغطت على أزرار TeamB إنها تستجيب أيضاً
هذا مميز
ولكن تذكر، نريد فقط الحصول على XML بشكل صحيح
لسنا مهتمين بلغة جافا
لكن الآن بعد أن حصلنا على XML يعمل بشكل صحيح لماذا لا نقوم بتصحيح جافا؟
Antes de empezar con el código, voy a contestar a esta pregunta.
Aún solo conozco dos ViewGroups, LinearLayouts and RelativeLayouts.
La palabra clave aquí es que estos dos deben ocupar un espacio igual.
Usando el peso del layout es algo muy fácil de hacer.
Vamos a echarle un vistazo al código.
Ya no estoy trabajando en Java,
así que voy a ir directamente a activity_main.xml.
Y aquí está mi archivo XML.
Voy a empezar poniendo todo este código
en otro LinearLayout.
Y este es el LinearLayout padre de mis dos miniLinearLayouts.
Voy a mover estas dos líneas aquí arriba,
porque necesitan estar adjuntas a la vista raíz.
Añado una llave de cierre.
Android Studio automáticamente me pone una etiqueta de cierre aquí.
Lo que voy a hacer es cortar esta etiqueta de cierre,
bajar hasta abajo del todo y pegarla.
Bueno, aquí tengo una línea roja serpenteante.
Si miro al error, dice que debo definir layout_height y layout_width.
¡Vaya! Hagámoslo.
Como esta es la vista raíz, pondré match_parent.
Bueno,
tengo ahora un LinearLayout alrededor de su LinearLayout hijo.
Si voy a Preview [vista previa], tenemos más o menos lo mismo.
Lo que voy a hacer es copiar todo
lo que hay en el LinearLayout del equipo A.
Y justo debajo del equipo A, voy a pegarlo
y este va a ser el LinearLayout del equipo B.
Bueno, ahora todo tiene una pinta un poco desorganizada.
Así que pulso Cmd+A, o seleccionar todo,
y voy a usar el atajo de teclado Cmd+Opción+L
para formatear mi código.
En Windows, eso es Ctrl+Alt+L.
Ahora tiene mejor aspecto.
Quiero asegurarme de que entiendes lo que está pasando aquí.
Subimos hasta arriba, donde hay un LinearLayout raíz.
Empieza aquí
y si bajo hasta el final, acaba aquí.
Dentro de ese LinearLayout raíz, voy a subir de nuevo.
Tengo un layout hijo aquí, que empieza aquí.
Bajaré despacio.
Y acaba aquí.
Esto es para el equipo A.
Y tengo otro LinearLayout hijo, que empieza aquí.
Bajo despacio.
Y aquí acaba el equipo B.
He visto algo rojo en la parte de arriba, así que voy a subir otra vez
a ver qué dice el error.
Orientación equivocada, sin orientación especificada. Por defecto es horizontal,
sin embargo este layout tiene varios hijos,
de los cuales al menos uno tiene un ancho match_parent.
Quiero que sea horizontal...
Bueno, vamos a especificar la orientación.
Esto no es técnicamente necesario, porque por defecto es horizontal,
pero está bien ser claros.
Y también decía algo de que los hijos se cubrían unos a otros.
Voy a hacer clic en vista previa.
Esto no parece haber cambiado demasiado,
a pesar de tomarme la molestia de copiar y pegar otro LinearLayout.
Esto quizá tenga que ver con el error que acabo de mirar.
Decía que es un layout horizontal.
Así que está intentando presentar estos dos LinearLayouts uno junto al otro,
pero el LinearLayout tiene un layout_width [ancho]
de match_parent que llena la pantalla.
Así que mi primer LinearLayout está llenando la pantalla
y el otro LinearLayout estará colocado al lado, fuera de la pantalla.
Pensemos qué es lo que queremos que pase ahora de verdad.
Queremos que los dos layouts ocupen el mismo espacio, uno junto al otro.
Ahora es cuando tenemos que ocuparnos de los layout_weights [pesos].
Voy a coger el primer LinearLayout
y darle un layout_weight de 1.
También le daré un ancho de 0.
Podemos ver que ya tenemos de hecho dos LinearLayouts,
lo único es no se los muestra adecuadamente.
Pero esto está un poco mejor.
Por eso, tengo que darle un layout_weight también al segundo LinearLayout,
este de aquí.
Así que voy a bajar.
Aquí está mi segundo LinearLayout.
Voy a hacer exactamente lo mismo.
Voy a decir que tiene
un layout_weight también de 1, para darles layout_weights iguales.
Y le voy a poner un ancho de 0.
La razón por la que les doy a los dos un ancho de 0
es, básicamente, porque si ninguno de los dos lados tiene ancho,
entonces se cogerá todo el espacio extra, que es la pantalla entera,
y se dividirá, dando la mitad a un lado y la otra mitad al otro.
porque ambos tienen el mismo layout_weight.
Si no te queda claro, tienes unos enlaces de vídeos
en las notas del profesor que tratan sobre layout_weight.
Esto tiene muy buen aspecto, salvo que dice equipo A.
Voy a bajar para cambiar esto.
Aquí... a equipo B.
Quizá hayas notado que también hay un error aquí.
Ese error ocurre porque tenemos una id dos veces.
Recuerda, solo copié y pegué el código,
así que tenemos dos cosas que intentan tener la misma id
de team_a_score.
Así que voy a cambiar esto a team_b_score.
Esto tiene muy buen aspecto.
No se ve bien, pero... Haré zoom...
Aquí dice equipo B.
Y todos los botones están bien y todas las TextViews están bien,
así que voy a ejecutar esto en mi teléfono.
Bueno, tiene muy buen aspecto.
Ahora, si pulso los botones del equipo A, se actualiza, así que estupendo.
Si pulso los botones del equipo B, pues también.
Esto es especial,
pero recuerda que solo queríamos corregir el XML,
sin preocuparnos demasiado Java.
Pero ahora que el XML funciona, ¿por qué no arreglar Java?
Avant de commencer le codage, Je vais répondre à cette question.
Je savais vraiment encore environ deux seulement groupes de vue, et LinearLayouts
RelativeLayouts.
Maintenant le mot clé ici est que ces deux ont à relever un espace égal.
Utilisation de poids de mise en page est une façon vraiment facile de faire cela.
Ok, allons de l'avant et Regardons le code.
Tout droit, je ne travaille pas en Java plus, donc je vais aller de l'avant et
passer à activity_main.xml.
Et voici mon fichier XML.
Je vais donc commencer par mettre tout de ce code à un autre LinearLayout.
Et cela est le LinearLayout parent pour mes deux mini LinearLayouts.
Et je vais passer ces deux lignes ici,
parce qu'ils ont besoin d'être attaché à la vue racine, ajoutez une accolade de fermeture.
Okay, Android studio automatiquement fait une balise de fermeture pour moi ici.
Alors, je vais aller de l'avant et
couper cette balise de fermeture, défiler vers le bas, et de le coller.
Ok, maintenant je suis une ligne ondulée rouge, et si je regarde l'erreur,
Je peux voir qu'il dit que je dois avoir layout_height et layout_width définis.
Oups! Très bien, nous allons le faire.
Ainsi, parce que cela est la vue racine, je vais aller de l'avant et fais cette match_parent.
Okay, donc
Je ai une LinearLayout entourant un enfant LinearLayout dès maintenant.
Et si je vais à l'Aperçu, il semble à peu près la même.
Okay, donc ce que je vais faire, est je vais copier tout
l'équipe A LinearLayout, et à droite ci-dessous équipe A, je vais le coller.
Et cela va être mon équipe B LinearLayout.
Donc, maintenant les choses commencent à regarder un peu désorganisé.
Donc, je vais faire un Cmd + A, ou tout sélectionner, puis je vais
Utiliser le raccourci clavier Cmd + Option + L pour formater mon code.
Sous Windows, qui est Ctrl + Alt + L, qui ressemble un peu mieux.
Maintenant, je veux juste vous assurer que vous comprenez ce qui se passe ici.
Défilement vers le haut, Je ai un LinearLayout racine ici.
Il commence ici, et si je fais défiler tous les le chemin vers le bas, il se termine ici.
Intérieur de cette racine LinearLayout, Je vais faire défiler à nouveau.
Je l'ai obtenu un présentation des enfants d'ici, qui commence ici.
Je vais défiler lentement.
Et il se termine ici.
Ceci est pour teamA.
Et je avoir un autre enfant LinearLayout, qui commence ici.
Descendez lentement, se termine ici pour TeamB.
Tout droit, maintenant je remarqué un peu de rouge au sommet, donc
Je vais défiler vers le haut encore et voir ce que dit l'erreur.
Mauvaise orientation, aucune orientation spécifiée, et par défaut est horizontale.
Pourtant, cette disposition a plusieurs enfants,
dont au moins un a match_parent largeur.
Hm, eh bien je ne veux qu'elle soit horizontale, Mais allons de l'avant et
spécifier l'orientation.
Encore une fois, ce ne soit pas techniquement nécessaire, parce que le défaut est horizontale, mais
il est bon d'être explicite.
Accord, et il disait quelque chose sur les enfants couvrant les uns les autres.
Je vais cliquez sur Aperçu.
Hm, ce qui ne semble pas avoir vraiment beaucoup changé, même si je suis allé
à tous la peine de copier et de coller autre LinearLayout.
Cela pourrait avoir eu à faire avec l'erreur que je viens de regardé.
Il disait qu'il est une disposition horizontale.
Alors qu'il essaie de mettre ces deux LinearLayouts côté de l'autre, mais
que le LinearLayout a une layout_width de
match_parent qui remplit l'écran.
Donc, fondamentalement, mon premier de LinearLayout se remplit l'écran, et
Puis l'autre LinearLayout devient placé à côté de quelque part hors de l'écran.
Donc, nous allons réfléchir à ce que nous avons réellement voulez qu'il se passe en ce moment.
Nous voulons avoir les deux configurations prenant jusqu'à égale l'espace et à côté de l'autre.
Donc quand nous allons avoir besoin d'apporter layout_weights.
Je vais prendre le premier LinearLayout et
lui donner un layout_weight 1.
Je vais aussi à mettre sa largeur à 0.
Ok, donc nous pouvons voir déjà que nous Elles ont en effet deux LinearLayouts,
ils sont tout simplement pas vraiment affiché correctement.
Mais cela est un peu mieux.
Je dois donc mettre un layout_weight aussi sur mon deuxième LinearLayout,
celui ici.
Je vais donc faire défiler.
Voici ma deuxième LinearLayout.
Je vais faire exactement la même chose.
Je vais dire qu'il a a layout_weight de 1 aussi, donc
Maintenant, ils ont layout_weights équivalentes.
Et puis je vais définir la largeur à 0.
accord, et la raison pour laquelle je me mis la largeur de deux d'entre eux à 0,
est essentiellement, que si ces deux côtés ne sont pas prenant toute la largeur.
Ensuite, il va prendre tout l'espace supplémentaire,
Qui est la totalité de l'écran, et le diviser, donnant la moitié à l'une et
moitié à l'autre, parce qu'ils deux ont le même poids de mise en page.
Si cela est tout confus, Je suis lié à quelques vidéos dans
les notes de l'instructeur que de parler layout_weight.
D'accord, mais cela est à la recherche assez bonne, sauf qu'il dit équipe A.
je vais faire défiler vers le bas pour changer qu'ici, à changer cette équipe B.
Maintenant, vous avez sans doute remarqué que il ya aussi une erreur ici, et
cette erreur se produit parce que, bien, nous avons une double identité.
Souvenir, Je viens de copier et collé le code.
Donc, nous avons essentiellement deux choses qui tentent d'avoir le même identifiant
de team_a_score.
Donc, je vais réellement à changer cela team_b_score.
Okay, cette recherche est assez bonne.
Il est un peu difficile à voir.
Je vais agrandir
Mais, il dit l'équipe B ici.
Et je suis tous les bons boutons, et toutes les vues correctes de texte.
Alors je vais essayer de exécuter sur mon téléphone.
Accord, et cela semble assez bon.
Maintenant, si je appuie sur les boutons de l'équipe A, il met à jour de manière ce qui est grand.
Si je presse les touches de l'équipe B, bien, il est également mise à jour.
Qui est spécial.
Mais souvenons, nous voulions juste pour obtenir le droit de XML.
Nous ne soucions vraiment Java.
Mais maintenant que nous avons obtenu le XML de travail, pourquoi ne pas fixer le Java?
Sebelum saya mulai coding, saya akan jawab pertanyaan ini.
Saya hanya mengetahui dua view groups, LinearLayouts dan
RelativeLayouts.
Kata kuncinya adalah keduanya harus menempati ruang yang sama.
Menggunakan layout weight adalah cara paling mudah digunakan.
Oke, ayo kerjakan dan perhatikan kodenya.
Saya tidak lagi bekerja dalam Java, jadi akan saya lanjutkan dan
pindah ke activity_main.xml.
Inilah berkas XML saya.
Saya akan mulai dengan meletakkan semua kode ini pada LinearLayout lain.
Dan ini adalah induk LinearLayout untuk dua LinearLayouts mini saya.
Saya pindah dua baris ini ke atas sini,
karena mereka harus menempel pada root view, tambahkan kurung kurawal.
Oke, Android Studio secara otomatis akan membuat tag penutup untuk saya.
Jadi, saya lanjutkan dan
memotong tag penutup, gulir ke bawah dan tempel.
Oke, muncul garis merah dan jika saya lihat kesalahannya,
dikatakan kalau saya harus menentukan layout_height dan layout_width.
Baiklah, ayo kerjakan.
Jadi karena ini adalah root view, saya akan membuat match_parent.
Oke, jadi
Saya punya satu LinearLayout mengelilingi anak LinearLayout sekarang.
Dan jika saya buka Preview, terlihat sama.
Oke, yang akan saya lakukan adalah menyalin semuanya yang ada
di dalam Team A LinearLayout, dan disebelah Team A, saya akan tempel.
Dan akan menjadi LinearLayout Team B.
Sekarang, semuanya mulai terlihat berantakan.
Saya akan lakukan Cmd+A, atau pilih semua, kemudian
menggunakan jalan pintas papan ketik Cmd+Option+L untuk memformat kode saya.
Pada Windows, Ctrl+Alt+L, terlihat sedikit lebih baik.
Saya hanya ingin memastikan kalau Anda memahami apa yang kini sedang terjadi.
Gulir ke atas, ada root LinearLayout di sini
Dimulai dari sini, dan jika kita gulir ke bawah, berakhir di sini.
Di dalam root LinearLayout, saya gulir ke atas lagi.
Ada satu anak tata letak di sini, yang mulai dari sini.
Saya akan gulir perlahan.
Dan berakhir di sini.
Ini untuk TeamA.
Dan saya ada anak LinearLayout lain yang mulai dari sini.
Gulir ke bawah perlahan, akhiri di sini untuk TeamB.
Baiklah, saya menemukan beberapa tanda merah di sebelah atas,
Saya akan gulir ke atas lagi dan melihat kesalahannya.
Orientasi salah, tidak ada orientasi ditetapkan, dan defaultnya horizontal.
Namun tata letak ini memiliki banyak anak,
dimana setidaknya memiliki setidaknya satu width match_parent.
Saya juga ingin membuatnya horizontal, tapi ayo lanjutkan dulu dan
tetapkan orientasinya.
Sekali lagi, secara teknis ini tidak dibutuhkan karena defaultnya horizontal
tapi akan bagus jika lebih jelas.
Oke, ini tentang anak yang saling menutupi.
Saya akan klik Pratinjau.
Tidak terlihat berubah terlalu banyak, meskipun
saya sudah menyalin dan menempel LinearLayout lain.
Pasti ada hubungannya dengan kesalahan yang tadi.
Dikatakan kalau ini adalah tata letak horizontal.
Jadi, dia mencoba meletakkan dua LinearLayouts berdampingan
tapi LinearLayout itu punya layout_width dari
match_parent yang mengisi layar.
Jadi, intinya LinearLayout pertama saya memenuhi layar
lalu LinearLayout lain berada di sebelahnya di luar layar.
Mari pikirkan tentang apa yang sebenarnya kita mau di sini.
Kita mau dua tata letak menempati ruang sama dan berdampingan.
Inilah saatnya untuk kita memberi layout_weights.
Saya akan ambil LinearLayout pertama dan
memberinya layout_weight 1.
Saya juga akan atur width ke 0.
Oke, kita bisa lihat kalau kita punya dua LinearLayouts,
hanya saja mereka tidak tertata dengan baik.
Tapi sekarang sudah lebih baik.
Saya juga beri layout_weight pada LinearLayout kedua,
di sebelah sini.
Saya gulir ke bawah.
Inilah LinearLayout kedua saya.
Saya akan lakukan hal yang sama.
layout_weight juga 1
jadi, sekarang mereka punya layout_weight yang setara.
dan saya atur lebar ke 0.
Alasan saya mengatur lebar keduanya ke 0,
adalah jika kedua sisi tidak diberi lebar.
Maka mereka akan menguasai seluruh ruang,
yaitu seluruh layar, dibagi menjadi dua
karena keduanya memiliki lebar yang sama.
Jika semua ini membingungkan, saya sudah menautkan beberapa video
dalam catatan instruktur yang membahas tentang layout_weight.
Ini sudah terlihat lumayan bagus, kecuali di sini disebut Team A.
Saya akan gulir ke bawah dan mengubahnya menjadi Team B.
Anda mungkin juga menyadari kalau ada kesalahan di sini dan
kesalahan itu muncul karena adanya ID ganda.
Ingat, saya baru saja menyalin dan menempel kode.
Jadi, pada dasarnya kita punya dua hal yang sedang mencoba memiliki id sama
dari team_a_score.
Saya akan menggantinye ke team_b_score.
Oke, sudah lumayan bagus.
Agak kurang jelas. Saya perbesar.
Tertulis di sini Team B.
Tombol dan semua tampilan teks yang benar.
Saya akan mencobanya di ponsel.
Oke, sudah lumayan bagus.
Sekarang, jika saya menekan tombol Team A, dia bertambah. Bagus.
Jika saya tekan tombol Team B, dia juga bertambah.
Ini spesial.
Tapi ingat, kita hanya ingin mendapatkan XML yang tepat.
Kita tidak terlalu peduli dengan Java.
Tapi sekarang XML sudah bisa berjalan, kenapa tidak sekalian kita perbaiki Java?
コードを書く前に この問題に答えたいと思います
リニアレイアウトと相対レイアウトという ２つのビューグループしかまだ知りません
この２つは同じ大きさのスペースを 使うというのが鍵となります
リニアレイアウトウエイトを使えば 簡単に設定ができます
ではコードを見てみましょう
Javaは使っていないので activitiy_main.xmlに行きます
私のXMLファイルです
このコードをすべて 別のリニアレイアウトに入れてみます
２つの子リニアレイアウトの これが親となります
この２行を上に移動します
rootビューに付いていなければ ならないからです
カッコを閉じます
Android Studioが自動的に ここに終了タグを付けました
この終了タグはカットして
下にスクロールしてペーストします
赤の波線が出てしまいました エラーを見てみましょう
‟layout_heightとlayout_widthを 指定してください”とあります
おっと！忘れていました
rootビューなので match_parentにしましょう
さて子リニアレイアウトを囲んでいる リニアレイアウトが１つあります
プレビューで見ても ほとんど同じですね
Team Aのリニアレイアウトを すべてコピーしましょう
そしてTeam Aの下にペーストします
これがTeam Bの リニアレイアウトになります
少しごちゃごちゃした感じになってきました
command+Aかすべて選択をして キーボードのショートカットを使います
command+Option+Lで コードをフォーマットします
Windowsでは Ctrl+Alt+Lです 見やすくなりました
何が起きているか説明しましょう
上にスクロールすると rootの リニアレイアウトがここにあります
ここから始まり下にスクロールすると ここで終わります
rootリニアレイアウトの中には…
もう一度上に行きます
ここで始まる子レイアウトがあり…
ゆっくりスクロールしましょう
ここで終わります
これがTeam Aです
別の子リニアレイアウトがあり ここから始まります
ゆっくりスクロールして ここで終わり Team Bとなります
上に赤い字があったのが見えました
上にスクロールして エラーを見てみましょう
‟間違った方向 方向の特定なし デフォルトが水平方向である
このレイアウトは複数の子が存在するが
少なくとも１つがmatch_parentの幅を持つ”
水平方向にはしたいのですが
方向を特定してみましょう
デフォルトが水平方向になっているので 厳密には必要はありませんが
はっきりと指定しましょう
子同士が重なっているいるとか 言っていましたね
プレビューをクリックします
別のリニアレイアウトをコピーして ペーストしたりしたわりには
あまり変わったようには見えません
さっきのエラーと関係があるのかもしれません
水平方向のレイアウトだと言っていました
２つのリニアレイアウトを 隣同士に並べようとしていますが
このリニアレイアウトは match_parentの幅を持っていますので
画面いっぱいになってしまいます
つまり最初のリニアレイアウトは 画面いっぱいに広がっていたので
他のリニアレイアウトは画面の外に 追い出されてしまったのです
どうしたらいいのか考えましょう
２つのレイアウトを同じ大きさで 隣同士に並べたい
そこでlayout_weightsが 必要になります
最初のリニアレイアウトに―
１というlayout_weithtを与えます
そしてwidth（幅）を０とします
これでリニアレイアウトが ２つあることが見えます
正しく表示されてはいませんが
でも少しよくなっています
２つめのリイアレイアウトにも layout_weightを与えます
これですね
下にスクロールします
これが２つめのリニアレイアウト
まったく同じことをします
１というlayout_weightを与え
同じlayout_weightを持たせました
そして幅を０に設定します
両方の幅を０に設定した理由は
この両端が幅をまったくとっていないからです
画面全体の余ったスペースを使って
２つに割りそれぞれに半分ずつを与えます
同じレイアウトウェイトが 与えられているからです
もし複雑だったら インストラクターノートのリンクにある―
レイアウトウェイトについて解説した ビデオを参照してください
Team Aと書いてある以外は だいぶ良くなってきましたね
下にスクロールして変更します これをTeam Bにします
ここにもエラーがあることに 気が付いたでしょうか
このエラーの原因となったのは 重複したIDがあるからです
コードをコピー＆ペーストしたからです
team_a_scoreという同じIDを 使おうとしているものが２つあります
ここを team_b_score に変えます
とても良くなりましたね
見えにくいですね
ズームします
Team Bになっています
ボタンもテキストビューも すべて正しくできています
携帯で実行してみます
とてもいい感じですね
Team Aのボタンを押すと更新されます いいですね
Team Bのボタンを押すと こちらも更新されます
すばらしい
ただしXMLを正しくしただけで Javaには何もしていませんね
XMLがうまくできたので Javaも修正してみましょう
코딩을 하기에 앞서, 본 문제에 대해 답을 할 것입니다.
저는 단지 두 가지의 뷰 그룹들만을 알고 있습니다.
[LinearLayouts], [RelativeLayouts]
이곳에서의 키워드는 이 두 가지들이 동일한 여백을 갖는다는 것입니다.
[layout weight]의 사용은 이를 간편하게 할 수 있도록 합니다.
자 이제 다음으로 넘어가 코드를 살펴보도록 합시다.
좋습니다. 저는 더 이상 자바를 사용하지 않을 것이기 때문에
[activity_main.xml]으로 넘어가겠습니다.
여기에 XML 파일이 있습니다.
따라서 이 모든 코드들을 다른 [LinearLayout]에 넣는 것으로 시작하겠습니다.
이것은 저의 작은 [LinearLayouts]들에 대한 [parent] [LinearLayout]입니다.
그리고 이 두 열 들을 이곳 위쪽으로 올리겠습니다.
왜냐하면 이것들을 [root view]에 첨부하고 [closing brace]에 더하기 위해서 입니다.
좋습니다. 안드로이드는 자동으로 이곳에 닫는 태그를 만들었습니다.
자 이제 다음 단계로 넘어가
이 닫는 태그를 자르도록 하겠습니다. 바닥까지 스크롤을 내리고 붙여 넣으십시오.
자 이제 붉은색의 [squiggly line]이 생겼습니다. 그리고 오류를 살펴보면,
[layout_height]와 [layout_width]의 규정이 필요하다는 것을 알 수 있습니다.
이런! 좋습니다. 이를 해결하도록 합시다.
이것은 [root view] 이므로, 다음에 [match_parent]를 만들겠습니다.
좋습니다.
하위 [LinearLayout]의 주변에 하나의 [LinearLayout]을 만들었습니다.
프리뷰를 살펴보면, 잘 만들어 졌습니다.
자 이제 다음으로 할 일은 A팀 [LinearLayout]의 모든 내용을
복사하여 A팀 바로 아래 붙여 넣는 것입니다.
그리고 이는 B팀의 [LinearLayout]이 됩니다.
아직은 조금 정렬이 되지 않은 듯 합니다.
따라서 [Cmd+A]를 할 것입니다. 또는 모두 선택을 하고
코드 포맷을 위한 Cmd+Option+L 단축키를 사용할 것입니다.
윈도우에서는 Ctrl+Alt+L입니다. 이제 한 결 나아졌습니다.
자 이제 지금까지의 과정을 잘 이해하셨기를 바랍니다.
위 부분까지 스크롤을 올리면 [root LinearLayout]을 확인할 수 있습니다.
이곳에서부터 시작됩니다. 그리고 스크롤을 바닥까지 내리면 이곳에서 끝이 납니다.
[root LinearLayout] 내부에서, 다시 한 번 스크롤을 올려보도록 하겠습니다.
이곳에서 시작하는 하위 [layout]이 만들어 졌습니다.
스크롤을 천천히 내리겠습니다.
이곳에서 끝이 납니다.
이것이 A팀입니다.
그리고 이곳에서 시작하는 다른 하위 [LinearLayout] 얻게 되었습니다.
스크롤 천천히 내리면 B팀은 이곳에서 끝이 납니다.
좋습니다. 이제 윗부분에서 빨간 부분을 발견하였습니다.
오류 내용을 확인하기 위해 다시 한 번 스크롤을 올려보도록 하겠습니다.
잘못된 방향, 방향지정 없음, 기본 값은 수평방향입니다.
여전히 이 [layout]은
[width match_parent]를 포함하여 다양한 하위 분류를 가지고 있습니다.
저는 수평 방향을 원합니다. 하지만 일단 다음으로 넘어가
방향을 규정하도록 합시다.
기본값은 수평방향이기 때문에 이것은 기술적으로는 필요가 없습니다.
하지만 이것은 확실합니다.
그리고 이는 다른 것들을 포함하는 하위 분류에 대해 나타냅니다.
프리뷰를 클릭해 보도록 하겠습니다.
흠. 모든 문제 사항들에 관한 내용을 붙여 넣기 하였지만
별다른 변화가 보이지는 않습니다.
이는 제가 오류부분들을 수정하지 않았던 것처럼 나타납니다.
이는 수평 [layout]임을 나타냅니다.
이 두 [LinearLayout]들을 나란히 놓고자 하지만,
[LinearLayout]은 [match_parent]의 [layout_width]을 가지고 있어
화면에 가득 찹니다.
이처럼 간단히 저의 첫 [LinearLayout]은 화면을 채웁니다.
그리고 다른 [LinearLayout]이 화면의 다른 곳에 배치됩니다.
여기서 우리가 바라는 것이 무엇인지를 확인해 봅시다.
우리는 서로 같은 여백을 가지고 나란히 놓이는 두 개의 [layout]들을 원합니다.
따라서 이것을 [layout_weight]로
불러들일 경우, 첫 번째 [LinearLayout]을 취하고 1에 대한
[layout_weight]를 줍니다.
또한 이것의 길이를 0으로 설정합니다.
따라서 이제 우리가 두 개의 [LinearLayouts]을 완성하였다는 것을 알 수 있습니다.
이들은 정확히 표시되지 않습니다.
하지만 이는 조금 더 낫습니다.
따라서 저는 [layout_weight]를 이 곳의 두 번째 [LinearLayout]에
넣도록 하겠습니다.
자 이제 스크롤을 내리겠습니다.
이곳에 두 번째 [LinearLayout]이 있습니다.
저는 완전히 같은 작업을 할 것입니다.
여기에도 1에 대한 [layout_weight]가 있기 때문에 동일한 [layout_weight]를
가지고 있다고 할 수 있습니다.
그리고 너비를 0으로 설정합니다.
두 개의 너비를 0으로 설정하는 이유는 실질적으로
이 두 측면이 너비를 가지지 않기 때문입니다.
그리고 이 둘은 같은 [layout weight]을 가지기 때문에
이에 따라 화면 전체에 대한 모든 여백을 가지고
이를 나눠 절반씩 가질 것입니다.
만약 이 내용이 이해되지 않는다면, 제가 지시 내용 부분에 걸어둔
[layout_weight]에 관한 링크 내용을 확인하시면 됩니다.
A팀을 나타낸 것을 제외하고는 훨씬 나아졌습니다.
이를 B팀으로 변경하기 위해 스크롤을 내려보도록 하겠습니다.
이곳에도 오류가 발생하였음을 확인할 수 있을 것입니다.
그리고 이 오류는 복제된 ID로 인한 것입니다.
제가 코드를 붙여 넣었다는 것을 명심하시기 바랍니다.
따라서 기본적으로 [team_a_score]라는 같은 id에 대해
두 가지 작업을 한 것입니다.
따라서 이를 [team_b_score]로 변경해 주겠습니다.
자 이제 좋아졌습니다.
식별이 어렵군요.
확대해보도록 하겠습니다.
이곳에서는 B팀을 나타냅니다.
정확한 버튼과 문자 뷰를 완성하였습니다.
자 이제 이것을 제 핸드폰에서 실행시키도록 하겠습니다.
좋습니다.
A팀 버튼을 누르면 업데이트 됩니다. 좋습니다.
B팀 버튼을 눌러도 같은 내용이 업데이트 됩니다.
특이하군요.
하지만 우리는 XML에 관한 내용을 작업하였다는 것을 기억하십시오.
우리는 자바에 관한 내용은 고려하지 않았습니다.
하지만 XML에 정상 작동 된다면 자바로 변경하지 못할 이유는 없습니다.
Antes de começar, vou responder a esta pergunta.
Eu só sei de dois ViewGroups:
LinearLayouts e RelativeLayouts.
A questão aqui...
é que estes espaço deve ser dividido ao meio.
Usando layout_weight fica bem fácil.
Bem, vamos ver o código.
Não estou mais trabalhando em Java,
então vou até a aba activity_main.xml.
Aqui está meu XML.
Eu vou começar colando todo este código
em outro LinearLayout.
Este é o LinearLayout pai...
dos meus dois LinearLayouts menores.
E vou trazer estas duas linhas aqui para cima...
porque elas precisam estar anexadas à rootView.
Adiciono uma chave de fechamento.
O Android Studio fez automaticamente
uma tag de fechamento para mim aqui.
Vou simplesmente recortá-la...
e colá-la no final.
Certo, um sublinhado vermelho.
O erro diz...
que devo definir layout_height e layout_width.
Opa! Vamos fazer isso.
Como esta é a rootView,
usarei match_parent.
Certo, eu tenho um LinearLayout
envolvendo um LinearLayout filho.
Se eu pré-visualizar...
É quase a mesma coisa.
Certo, então vou copiar...
tudo no LinearLayout do time A...
e colarei sob o time A.
Este será o LinearLayout do time B.
As coisas estão começando a ficar meio bagunçadas.
Vou apertar Cmd+A, ou "Selecionar tudo",
e vou usar o atalho de teclado Cmd+Option+L
para formatar meu código.
No Windows, é Ctrl+Alt+L. Agora está melhor.
Quero garantir que você está entendendo o que houve.
No topo, há um LinearLayout raiz.
Começa aqui e, rolando para o fim,
termina aqui.
Dentro do LinearLayout raiz - vou voltar para cima -
tem um layout filho, que começa aqui -
vou rolar devagar -
e termina aqui. É do time A.
E tem outro LinearLayout filho,
que começa aqui - vou rolar devagar -
e termina aqui, que é do time B.
Percebi algo vermelho lá em cima,
então vou voltar para ver o erro.
"Orientação errada, não especificada
e padrão é horizontal,
mas layout tem muitos filhos
e a largura de pelo menos um é igual à do pai."
Eu quero mesmo que seja horizontal.
Mas vamos especificar a orientação.
Isto não é de fato necessário, pois o padrão é horizontal,
mas é bom deixar explícito.
E dizia algo sobre os filhos estarem se sobrepondo.
Vou pré-visualizar.
Não parece ter mudado muita coisa,
embora eu tenha tido o trabalho de copiar outro LinearLayout.
Pode ter a ver com o erro que acabei de ler.
Dizia que é um layout horizontal,
que tenta justapor estes LinearLayouts,
mas que o layout_width do LinearLayout
é match_parent, o que toma a tela.
Então meu primeiro LinearLayout está tomando a tela toda...
e o outro está justaposto em algum lugar fora da tela.
Vamos pensar no que pretendemos.
Queremos que os layouts tomem o mesmo espaço
e fiquem lado a lado.
Eis o que teremos que usar: layout_weights.
Vou até o primeiro LinearLayout...
e adicionarei "layout_weight=1".
Também vou definir sua largura como 0.
Já dá para ver que temos dois LinearLayouts
que só não estão sendo bem exibidos.
Mas já melhorou.
Também porei layout_weight no meu segundo LinearLayout,
este aqui.
Vou rolar para baixo... Aqui está o segundo.
Vou fazer a mesmíssima coisa.
Definirei que ele também tem peso 1,
ou seja, layout_weights iguais,
e definirei a largura como 0.
Bom, a razão para definir as larguras como 0...
é que, se os dois lados não tomam nenhum espaço,
todo o espaço extra, ou seja, a tela toda,
será dividido ao meio e distribuído aos dois,
pois ambos têm o mesmo peso.
Se isso for meio confuso, deixei alguns vídeos
nas "Notas do instrutor" sobre layout_weight.
Bom, está bem legal, só que diz que é do time A.
Vou rolar a tela e mudar isso.
Pronto, mudei para time B.
Você pode ter percebido que tem outro erro aqui.
Este erro acontece por termos um ID duplicado.
Lembre-se, eu copiei e colei um código.
Há duas coisas tentando ter o mesmo ID,
"team_a_score".
Vou mudar para "team_b_score".
Está bem bonito!
Está meio pequeno, vou dar um zoom,
mas diz time B aqui.
Todos os botões e TextViews estão certos,
então vou tentar rodar no meu celular.
Pronto. Está bem bonito.
Os botões do time A estão respondendo,
que ótimo.
E os do time B, bem... também respondem.
Que coisa.
Mas nós só queríamos consertar o XML,
não nos importamos com o Java.
Agora que o XML funciona, que tal consertar o Java?
Прежде чем начать с кодами, я отвечу на этот вопрос.
Я пока что знаю только о двух группах элементов, LinearLayouts и
RelativeLayouts.
Ключевым тут было то, что эти группы должны занимать равное пространство.
Это легко сделать, использовуя вес панели.
ну что ж, давайте посмотрим на код.
Я больше не буду работать в Java, поэтому я перейду
к файлу activity_main.xml.
А вот мой XML файл.
Начну с того, что внесу весь этот код в другой LinearLayout.
Это родительский элемент LinearLayout для двух моих мини LinearLayouts.
Я передвину эти две строки сюда вверх, потому что они
должны быть присоединены к корневому элементу, добавим закрывающую скобку.
Android Studio автоматически сделало для меня закрывающий тэг вот здесь.
Так что я сейчас
вырежу этот закрывающий тэг, прокручу вниз и вставлю его.
Так появилась красная волнистая линия и если я посмотрю на ошибку, я увижу,
что мне предлагают определить высоту layout_height и ширину layout_width.
Ой! Что ж, давайте так и сделаем.
Это корневой элемент, я пропишу соответствие match_parent.
Хорошо. Итак.
У меня есть один LinearLayout, окру- жающий дочернюю запись LinearLayout.
И если зайти в предпросмотр, выглядит почти так же.
Ладно, я сделаю вот что: я скопирую все в
LinearLayout команды А, и сразу же под командой А это вставлю.
Это будет LinearLayout для команды Б.
Вот теперь записи выглядят немного неорганизованно.
Поэтому я сделаю Cmd+A, или выбрать все, а потом
воспользуюсь сочетанием клавиш Cmd+Option+L для переформатирования.
В среде Windows, то же действие на Ctrl+Alt+L. Так выглядит лучше.
Теперь я хочу убедиться в том, что вы понимаете, что тут происходит.
Проматываю вверх, тут у меня корневой LinearLayout.
Он начинается тут, и если я промотаю вниз, до конца, заканчивается он тут.
Внутри этого корневого LinearLayout, я снова промотаю вверх.
Здесь у меня дочерняя раскладка, которая начинается тут.
Я медленно пролистаю вниз.
Она заканчивается здесь.
Это для команды A.
И есть еще один дочерний LinearLayout который начинается здесь.
Медленно проилистываем вниз, заканчивается тут для команды Б.
Хорошо. Там, вверху я заметила что-то красное, так что
я снова возвращаюсь вверх и смотрю, в чем ошибка. Неправильная
ориентация, ориентация не указана, а по умолчанию она горизонтальная.
Однако в этой раскладке есть пара дочерних записей,
где, по крайней мере, в одной есть ширина match_parent.
Гмм, я и правда хочу, чтобы она была горизонтальной, но давайте
все же уточним ориентацию.
Технически это не нужно, потому что горизонтально по умолчанию,
но лучше все же уточнить.
Тут еще говорится, что дочерние записи накрывают друг друга.
Нажимаю на Предпросмотр.
Гм, вроде бы не сильно изменилось, хотя я постаралась
скопировать и вставить все с одного в другой LinearLayout.
Наверное это связано с только что увиденной ошибкой.
Там было написано, что раскладка горизонтальна.
Так что оно пытается уложить эти два LinearLayouts рядом друг с другом, но
тот LinearLayout, у которого ширина layout_width соответствует
match_parent, заполняет весь экран.
Так что мой первый LinearLayout заполняет экран, а
потом второй размещается рядом с ним где-то за экраном.
Давайте решим, что мы хотим сделать в данный момент.
Мы хотим, чтобы две раскладки занимали равное пространство рядом.
И вот тут нам понадобится ввести вес layout_weight.
Я беру первый LinearLayout и
присваиваю ему layout_weight, равную 1.
И еще я присвою ему ширину 0.
Ну вот, теперь видно, что у нас вообще-то два LinearLayout,
они просто не отображались как следует.
Вот так уже лучше.
Теперь надо присвоить layout_weight второму LinearLayout,
вот тут.
Так что я пролистаю вниз.
А вот и мой второй LinearLayout.
И проделаю ту же самую операцию.
Я ему присвою layout_weight тоже равный 1, так что
теперь у них одинаковый вес layout_weight.
И еще раз присвою ширину 0.
А причина того, что я присвоила им обоим ширину 0 в том,
что если обе этих стороны не занимают никакой ширины,
тогда они занимают все лишнее пространство,
чем является весь экран, и делят его на две части: половина одному
и половина другому, потому что у них равный вес раскладки.
Если это немного запутанно, я дала ссылки на несколько видео
с обучающими заметками по layout_weight.
Итак, выглядит вполне неплохо, кроме того, что пишет там и там Команда А.
Я поднимусь вверх и изменю подпись, напишу Команда Б.
Вы могли заметить, что тут тоже есть ошибка, а
происходит она из-за того, что у нас дубликаты ID.
Вы помните, что я просто скопировала и вставила код.
Грубо говоря, у нас тут два объекта, у которых одинаковый ID
счета команды team_a_score.
Поэтому я поменяю это сейчас на team_b_score.
Теперь смотрится хорошо.
Трудновато увидеть.
Я увеличу.
Но тут написано Команда Б.
У меня все правильные кнопки и правильные элементы текста.
Так что попробую посмотреть на это
на своем телефоне. Выглядит хорошо.
Если нажимать кнопки Команды А, счет обновляется. Чудесно.
Если нажимать кнопки Команды Б... ну, счет тоже обновляется.
Это нечто.
Но помните, мы просто хотели настроить правильно XML.
Нам сейчас неважно, что с Java.
Но раз уж XML работает, почему бы не исправить Java?
Kodlamaya başlamadan önce, bu soruyu cevaplayacağım.
Ben yalnızca gerçekten hala LinearLayouts ve RelativeLayouts adında iki tane
görüntü grubu tanıyorum.
Şimdir buradaki anahtar kelime bu ikisinin eşit aralığı yakalamasıdır.
Tasarım kalınlığı kullanımı gerçekten kolay yapılması gereken iştir.
Pekala, haydi devam edelm ve bu koda bakalım.
Pekala, artık Javada çalışmıyorum öyleyse devam edeceğim ve activity_main.xml'i
gözden geçireceğim.
Ve işte XML dosyası.
O zaman tüm bu kodları başka bir LinearLayout'a koyarak başlayacağım.
Ve bu benim iki tane mini LinearLayouts'um için üst öğe LinearLayout'udur.
Ve bu iki çizgiyi buraya taşıyacağım çünkü bunların kök dizini görünümüne
eklenmiş olması ve kapama parantezinin ilave edilmiş olması gerekmektedir.
Pekala, Android Studio benim için burada otomatik olarak bir kapama biçimi
oluşturdu. O zaman devam edeceğim ve kapama biçimini keseceğim, alta doğru
kaydıracağım ve bunu yapıştıracağım.
Pekala şimdi kırmızı bir kıvrımlı çizgim var ve eğer hataya bakarsam, onun
layout_height ve layout_width'ının belli olması gerektiğini söylediğini görebilirim.
Vay canına! Pekala, haydi yapalım.
Çünkü bu kök dizini görüntüsü, devam ediyorum ve bu match_parent'u yapıyorum.
Pekala, öyleyse bir adet LinearLayout çevrem ve bir adet alt
LinearLayout'ım var şimdi.
Ve eğer Önizlemeye gidersem, oldukça benzer olduğunu görürüm.
Pekala, yapacağım şey A takımı LinearLayout'unu ve sağ alt A
takımını kopyalayacağım ve yapıştıracağım.
Ve bu benim B takımı LinearLayout'um olacak.
O zaman şimdi bunlar biraz kötü organize edilmiş gibi görünmeye başlayacak.
O zaman, Cmd+A veya hepsini seç yapacağım ve sonra kodumu formatlamak
için klavye kısayolu Cmd+Option+ öğesini kullanacağım.
Windows'da daha iyi Ctrl+Alt+L kısayoludur.
Şimdi, sadece burada olan biteni anladığınızdan emin olmak istiyorum.
Üste doğru kaydırarak, burada bir adet kök dizini LinearLayout'a sahibim.
Burada başlıyor ve aşağıya doğru tam olarak kaydırırsam, burada sona erer.
Bu LinearLayout kök dizini içerisine doğru, tekrardan yukarı kaydıracağım.
Burada başlayan bir adet alt tasarıma sahibim.
Yavaş yavaş aşağıya kaydıracağım.
Ve o burada sonlanıyor.
Bu TeamA için.
Ve burada başlayan başka bir alt LinearLayout'um var.
Yavaşça aşağı kaydırın, bu TeamB için burada sona ermektedir.
Pekala, şimdiüstte kırmızı bir tanesini farkettim, tekrar yukarı kaydıracağım
ve hatanın ne olduğunu göreceğim.
Hatalı sayfa yönü, sayfa yönü belirtilmedi ve varsayılan yatay.
En azından geniş match_parent'in bulunduğu yerde bu tasarım
çoklu bir alttakine sahip.
Hm, güzel bunun yatay olmasını istiyorum ancak haydi devam edelim ve sayfa
yönünü belirleyelim.
Yine, bu teknik açıdan gerekli değildir çünkü varsayılan yatay ancak
bunun net olması güzel.
Pekala, alttakilerle ilgili birbirinin dahil edilmesiyle ilgili birşeyler
söylüyorlardı. Önizlemeye tıklayacağım.
LinearLayout için tüm kopyalama ve yapıştırma sıkıntılarını halletmeme rağmen,
bunun gerçekten çok değişmediği görünmektedir.
Bu, baktığım hataya sahip olabilir.
Bunun yatay bir tasarım olduğu söyleniyordu.
O zaman o, birbirine yakın bu iki LinearLayouts'u tasarlamaya çalışıyordu
ancak LinearLayout, ekranı dolduran match_parent'ın layout_width'ine
sahiptir.
Aslında benim ilk LinearLayout'um ekranı dolduruyor ve sonra diğer
LinearLayout ekranın dışına yakın bir yerde yerleştiriliyor.
O zaman, haydi bu noktada aslında ne yapmak istediğimizi düşünelim.
Biz iki tane tasarımın birbirine yakın ve eşit aralıkta tamamlanmasını istiyoruz.
O zaman ne zaman layout_weights'da getirmeye gereksinim duyacağız.
İlk LinearLayout'u alacağım ve 1 numaralı layout_weight'u
vereceğim.
Aynı zamanda genişliğini 0'a ayarlayacağım.
Pekala, aslında gerçekten düzgünce gösterilmeyen biz iki tane
LinearLayouts'u görebiliriz.
Ama bu biraz daha iyi.
O zaman buraya kendi ikinci LinearLayout'um üzerine layout_weight koymam
gerekiyor.
O zaman biraz daha aşağıya kaydıracağım.
İşte benim ikinci LinearLayout'um.
Tam olarak aynı şeyi yapacağım.
Bunun 1 numaralı layout_weight'a sahip olduğunu söyleyeceğim ve
şimdi bunlar eşit layout_weight'a sahipler.
Ve sonra genişliği 0'a ayarlayacağım.
Eğer bunların her iki tarafı herhangi bir genişlik kaplamıyorsa, pekala
sebep her ikisinin genişliğini 0'a ayarlamış olmamdır.
Sonra, tüm ekran boyunca olan bütün ekstra aralıkları alacağım ve
yarısını birine yarısına başkasına vererek böleceğim, çünkü bunların
her ikiside aynı tasarım kalınlığına sahipler.
Eğer tüm bunlar kafa karıştırıyorsa, layout_weight ile ilgili eğitici notlarda
birkaç link paylaştım.
Pekala, ancak A takımı hariç bu oldukça güzel görünüyor.
Burada bunu değiştirmek için aşağıya kaydıracağım ve bunu B takımına
değiştireceğim. Şimdi burada bir hatanın olduğunu farketmişsinizdir, bu hata
oluyor çünkü çift ID'iz var.
Unutmayın, yalnızca kodu kopyaladım ve yapıştırdım.
O zaman esasında biz team_a_score'ın aynı id'sine sahip olmaya çalışan
iki şeyimiz var.
O zaman bu team_b_score'u gerçekten değiştireceğim.
Pekala, bu oldukça güzel görünüyor.
Bunu görmek biraz zor.
Yaklaştıracağım.
Ancak burası B takımı.
Ve tüm doğru tuşlara ve doğru metin görünümlerine sahibim.
O zaman bunu kendi telefonumda çalıştıracağım.
Pekala, bu oldukça güzel görünüyor.
Şimdi eğer A takımı tuşlarına basarsam, o güncellenir, bu harika.
Eğer B takımı tuşlara basarsam, aynı zamanda o da güncellenir.
Bu özeldir.
Ancak unutmayın, biz yalnızca XML'i elde etmek istedik.
Gerçekten Java'yla ilgilenmedik.
Ancak şimdi XML çalışıyor, Java'yı neden düzeltmeyelim?
Trước khi bắt đầu viết mã, Tôi sẽ trả lời câu hỏi này.
Tôi vẫn biết chỉ có hai nhóm dạng xem, và LinearLayout và
RelativeLayout.
Bây giờ mấu chốt ở đây là hai nhóm này phải có khoảng cách bằng nhau.
Sử dụng độ dày bố trí là cách dễ dàng để thực hiện điều này.
Hãy tiếp tục và xem đoạn mã.
Được rồi, tôi không còn làm trong Java nữa, vì vậy tôi sẽ đi tiếp và
lướt qua activity_main.xml.
Và đây là tập tin XML của tôi.
Tôi sẽ bắt đầu bằng cách đưa tất cả đoạn mã sang một LinearLayout khác.
Và đây là LinearLayout mẹ cho hai LinearLayout nhỏ của tôi.
Tôi sẽ di chuyển hai dòng này lên đây,
bởi vì chúng cần phải gắn liền vào dạng xem gốc, thêm một dấu ngoặc ôm đóng.
Được rồi, Android Studio tự động tạo ra một thẻ đóng cho tôi ngay tại đây.
Vậy, tôi tiếp tục và
cắt thẻ đóng này, di chuyển xuống phía dưới, và dán nó.
Bây giờ tôi có một dòng lượn sóng màu đỏ, và nếu tôi nhìn vào lỗi,
Tôi thấy nó cho biết tôi cần phải có layout_height và layout_width cụ thể.
Whoops! Được rồi, hãy tiến hành.
Bởi vì đấy là dạng xem gốc, nên tôi sẽ tiếp tục và tạo match_parent này.
Được rồi,
Bây giờ, tôi có một LinearLayout quanh một LinearLayout con.
Và nếu tôi đến phần Xem trước, trông chúng khá giống nhau.
Nên điều tôi chuẩn bị làm là tôi sẽ sao chép mọi thứ trong
LinearLayout Đội A, và tôi sẽ dán nó ngay dưới Đội A.
Và đây sẽ là LinearLayout Đội B của tôi.
Bây giờ mọi thứ bắt đầu trông khá lộn xộn.
Nên tôi sẽ thực hiện Cmd+A, hoặc chọn tất cả, rồi
sử dụng phím tắt trên bàn phím Cmd+Option+L để định dạng mã của mình.
Trên Windows là Ctrl+Alt+L, giờ trông ổn hơn một chút.
Bây giờ, tôi muốn chắc chắn rằng bạn hiểu những gì đang xảy ra ở đây.
Di chuyển lên trên, tôi có một LinearLayout gốc ở đây.
Nó bắt đầu ở đây, và nếu tôi kéo xuống tận dưới cùng, nó kết thúc ở đây.
Bên trong LinearLayout gốc đó, tôi sẽ di chuyển lên một lần nữa.
Tôi có một bố trí con ở đây, nó bắt đầu ở đây.
Tôi sẽ kéo xuống từ từ.
Và nó kết thúc ở đây.
Đây là cho Đội A.
Và tôi có một LinearLayout con khác bắt đầu tại đây.
Kéo xuống từ từ, kết thúc ở đây cho Đội B.
Được rồi, tôi nhận thấy một số được tô đỏ ở đầu,
nên tôi lại kéo lên một lần nữa và xem lỗi đó nói gì.
Định hướng sai, không có định hướng, và mặc định theo chiều ngang.
Nhưng, bố trí này có nhiều dạng xem con,
mà có ít nhất một cái có chiều rộng match_parent.
Hừm, tôi muốn nó theo chiều ngang, nhưng hãy cứ tiếp tục và
xác định định hướng.
Nói lại, về kỹ thuật, nó không cần thiết, bởi vì mặc định là nằm ngang, nhưng
làm rõ là điều tốt.
Nó cho biết điều gì đó về các dạng xem con đè lên nhau.
Tôi sẽ bấm vào Xem trước.
Hừm, nó dường như không thay đổi mấy, mặc dù tôi đã đi đến
toàn bộ các vấn đề về sao chép và dán LinearLayout khác.
Cái này có thể phải có tác dụng với lỗi mà tôi vừa mới xem.
Nó cho biết đó là bố trí ngang.
Vậy nên nó cố gắng để đặt hai LinearLayout cạnh nhau, nhưng
LinearLayout có một layout_width của
match_parent vốn tràn ra cả màn hình.
Vì vậy, về cơ bản LinearLayout đầu tiên lấp đầy cả màn hình, và
LinearLayout kia được đặt cạnh nó ở đâu đó ngoài màn hình.
Hãy suy nghĩ về thứ chúng ta thực sự muốn xảy ra vào thời điểm này.
Chúng ta muốn có hai bố trí có khoảng cách bằng nhau và đặt cạnh cái kia.
Đây là khi chúng ta sẽ cần layout_weight.
Tôi sẽ lấy LinearLayout đầu tiên và
gán cho nó layout_weight là 1.
Tôi cũng sẽ đặt chiều rộng của nó là 0.
Được rồi, chúng ta có thể thấy rằng thực ra chúng ta có hai LinearLayout,
chúng không được hiển thị một cách chính xác.
Nhưng cái này tốt hơn một chút.
Nên tôi cũng phải đặt một layout_weight trên LinearLayout thứ hai của tôi,
cái này ngay tại đây.
Tôi sẽ kéo xuống.
Đây là LinearLayout thứ hai của tôi.
Tôi sẽ thực hiện chính xác điều tương tự.
Tôi sẽ nói rằng nó cũng có layout_weight là 1, vì vậy
giờ chúng có layout_weight tương đương.
Và sau đó tôi sẽ đặt chiều rộng về 0.
Được rồi, và lý do mà tôi đặt chiều rộng của cả hai là 0,
đơn giản là nếu cả hai phía này không chiếm bất kỳ chiều rộng nào.
Thì tôi sẽ lấy toàn bộ khoảng cách thêm,
đó là toàn bộ màn hình, và chia nó ra, thành mỗi cái một nửa
bởi vì cả hai đều có độ dày bố trí giống nhau.
Nếu những điều đó đều khó hiểu, tôi đã liên kết với một vài video trong
ghi chép hướng dẫn nói về layout_weight.
Được rồi, cái này trông khá ổn, ngoại trừ nó nói Đội A.
Tôi sẽ kéo xuống để thay đổi nó ở đây, chuyển nó sang Đội B.
Lúc này có thể bạn đã nhận thấy rằng cũng có một lỗi nữa ở đây, và
lỗi đó xảy ra bởi vì, chúng ta có một ID bị trùng.
Hãy nhớ, tôi vừa sao chép và dán đoạn mã.
Nên về cơ bản, chúng ta có hai thứ có cùng id
là team_a_score.
Tôi sẽ thay đổi nó thành team_b_score.
Được rồi, trông khá ổn rồi.
Hơi khó xem một chút.
Tôi sẽ phóng to.
Nhưng ở đây nó cho biết là Đội B.
Và tôi có tất cả các nút chính xác, và tất cả các dạng xem văn bản chính xác.
Tôi sẽ thử chạy trên điện thoại của mình.
Được rồi, trông có vẻ khá ổn.
Bây giờ nếu tôi bấm các nút Đội A, thật tuyệt là nó sẽ cập nhật.
Nếu tôi bấm các nút Đội B, nó cũng sẽ cập nhật.
Thật đặc biệt.
Nhưng hãy nhớ, chúng ta chỉ muốn có XML chính xác.
Chúng ta không quá quan tâm về Java.
Nhưng giờ chúng ta đã khiến XML làm việc, tại sao không sửa cả Java?
写代码之前我会先回答这个问题
我只知道两种 ViewGroups LinearLayout 和
RelativeLayout
现在的关键是 这两个布局占用相同的空间
使用 layout_weight 比较容易
我们来看一下代码
先不要管 Java 代码
先看看 activity_main.xml 文件
这是我的 XML 文件
我要把这些代码放到另一个 LinearLayout 里
这是我的两个小 LinearLayouts 的父 LinearLayout
我会把这两行移动到上边 在这
因为他们需要在根 View 中定义 添加一个结束标签
Android Studio 自动生成了结束标签
我们继续
剪切这个结束标签 向下滚动然后粘贴
出现了红色曲线 看看出了什么错
它说我需要定义 layout_height 还有 layout_width
好的 那就定义一下
因为这是根 View 要写上match_parent
好的
我有了一个包含着子 LinearLayout 的一个 LinearLayout
预览一下 看起来和以前一样
接下来是复制
A 队的 LinearLayout 然后粘贴到 Team A 下边
这是 B 队的 LinearLayout
现在代码看起来有点乱
全选 然后
使用快捷键 Cmd+Option+L 格式化代码
在 Windows 系统 是 Ctrl+Alt+L 现在看起来好多了
我希望你能明白我所做的
滑动鼠标到顶端 这有一个根 LinearLayout
从这开始 滑到底部到这才结束
在根 LinearLayout 里 我再滑上去
这有一个子布局 从这开始
慢慢往下滑
在这结束
这是A 队的布局
还有另一个子 LinearLayout 从这开始
慢慢往下滑 B 队在这结束
我发现上边有的地方被标红了
再滑上去看看是什么错误
没有指定方向 默认是横向的
还有 这个布局有好多子布局
至少有一个的宽度是 match_parent
我希望它是横向的
我们就来指定一下方向
再说一遍 这个其实是不需要声明的 因为默认就是横向的
但声明一下看起来比较清楚
它说子布局相互重叠了
看看预览
好像并没有什么改变 虽然我
粘贴了另一个 LinearLayout
这也许和我刚刚看到的错误有关系
它说这是一个横向布局
所以它试图横向排列这两个 LinearLayout 但是
这个 LinearLayout 的 layout_width 的值是 match_parent
所以会充满整个屏幕
所以可以看到 我的第一个 LinearLayout 充满了整个屏幕
另一个 LinearLayout 就被挤到了屏幕的外边
仔细想想 现在我们需要做的是什么
我们希望两个布局紧挨着并平分整个屏幕的空间
所以我们就要使用 layout_weight 来实现
先修改第一个 LinearLayout
把它的 layout_weight 赋值为1
把 width 赋值为0
现在我们可以看到两个 LinearLayout 了
但看起来有点别扭
不过比之前强多了
把第二个 LinearLayout 的 layout_weight 也设置一下
就在这
往下滑
这是第二个 LinearLayout
跟刚才一样
也是把 layout_weight 赋值为1
现在两个 layout_weights 一样了
把 width 赋值为0
之所以把 width 都赋值为0
是因为如果他们的边界不占用空间
那么他们就会占用所有额外的空间
也就是整个屏幕 然后每个布局各占一半
因为他们的layout_weight 相同
如果你感觉有点迷惑 在讲师注释里
可以链接到一些关于 layout_weight 的视频
看起来很不错 除了这还写着 Team A
往下滑 把它改成 Team B
你也许意识到了 这还有个错误
是因为 ID 重复了
因为我仅仅复制粘贴了这些代码
所以两个东西可能会有相同的
team_a_score 这个 ID
把它改成 team_b_score
看起来好多了
看不太清
放大一些
这写的是 Team B
所有的按钮和 TextView 都正确了
在手机上运行一下
看起来很不错
如果我点击 A 队的按钮 A 队分数就会更新
点击 B 队的也能正常运行
这很特别
记住 我们刚刚希望得到正确的 XML
并不关心 Java 代码
但现在 XML 已经没问题了 为什么不修正一下 Java 代码呢？
在我開始寫編碼前， 我將會回答這條問題。
我知道的view groups有兩種: LinearLayouts 及
RelativeLayouts
在這裡的關鍵是 這兩個需要擁有相等空間
運用layout weight是 一個相當容易的方法。
好，開始看看這些code代碼。
好的，我不再會使用Java了 我會繼續
去到activity_main.xml
這就是我的 XML 檔案
我將會把這些code碼放到 另一個 LinearLayout.
這個大 LinearLayout裡包含 兩個小LinearLayouts
我將會把這兩行移上到這裡
由於他們需要依附左rootview 加一個關括號。
好 Android Studio 已自動為我 加一個關引號
我會繼續
剪下這個關引號 捲動到底貼上
好，現在這裡有條紅色波浪線 當我查看這個錯誤
我看到這裡說我需要 定義layout_height 及 layout_width
哎呦! 好，做吧。
因為這裡是root view 我將會把這裡設定為match_parent
好
我有一個LinearLayout包含著 一個子LinearLayout
如果我去預預覽 這看來仍然沒變
好，我將會複製所有
在 Team A LinearLayout 的東西 然後在Team A LinearLayout下貼上
這些將會是 Team B LinearLayout
好，現在這裡開始 有一點混亂
我將會按 Cmd+A 即全選 然後
用快捷鍵Cmd+Option+L 去把code
在 Windows 系統, 這會是Ctrl+Alt+L, 現在好看一點了
現在，我只想確定 你明白這裡發生什麼事
捲動回到頂， 這裡有個根 LinearLayout
在這裡開始，我捲動 回到底，這就是結束。
在根 LinearLayout 裡, 我將再捲動回到頂。
這裡個子層從這開始
我會慢慢向下捲動
在這裡終結。
這就是 TeamA 的。
我另一個子 LinearLayout， 由這裡開始。
慢慢向下捲動，在這裡終結 這是 TeamB 的。
好，我看到上面有些紅線
我會捲動會上面看看 有什麼錯誤
方向錯誤?沒有指定方向， 預設方向是橫向。
但這層有多個子層。
而其中一個子層闊為match_parent
嗯，我的確想它變成橫向 我將會繼續
為它指定方向。
再次說明，技術上這是不需要的 因為預設已經是橫向。但
明確一點比較好。
好，這裡好像說子層互相 覆蓋著對方。
我將會去到預覽。
嗯，這裡好似沒轉變， 雖然我已經
完成所有LinearLayout 的 複製貼上動作。
這可能是關於我剛剛 看到的錯誤。
之前說這裡是橫向的佈局。
它嘗試把這兩個LinearLayouts 並列，但
LinearLayout 的 layout_width 為
match_parent，所以填滿了畫面
基本上第一個LinearLayout 已填滿了畫面。
所以另一個LinearLayout放了在 畫面外面。
現在再想想我們想怎樣。
我們想這兩個佈局佔用 相等空間且並排在一起。
所以這時我們需要加入 layout_weights
我將會把第一個LinearLayout
的layout_weight設為1
然後把闊設為0
好，我們已經確切地看到 這裡有兩個LinearLayouts，
它們只是無法正常顯示。
但這已經改好了。
我亦需要為我第二個LinearLayout 加入layout_weight
在這裡
我將會捲動到下面
這就是第二個LinearLayout
我將會再重覆做一次
我把這裡的layout_weight 繼續設為 1
現在它們有相同的layout_weights了。
然後我會將闊度社為0
好，我將他們的闊度都 設為0的原因是
這兩邊都不會佔用任何闊度。
然後這會佔據所有剩餘空間。
即是整個螢幕 然後分開每邊一半
因為它們擁有相等的layout weight
如果這仍然有些混亂， 可在指導說明文件中
尋找關於 layout_weight 的影片。
好，除了這還寫Team A外， 一切都看來很好。
我將會捲動到下面作修改 改成Team B
現在你會得悉到這裡也 會出現錯誤
出現錯誤的原因是 我們有重覆了的ID
不要忘記，我剛剛 做過複製貼上
所以我們有兩個 相同ID的東西
它就是team_a_score
所以我將會把它 改名為team_b_score
好，現在看來好多了。
這裡有點難看。
我會放大
這裡寫著 Team B
我已經完成所有按鈕及 所有的按鈕文字說明。
我將會嘗試在我的 電話中運行。
好，一切看來正常
現在如果我按下Team A 按鈕， 這裡更新了，很好。
現在我按下Team B 按鈕， 這裡也更新了。
但這很奇怪。
但不要忘記， 我們之前只做好了XML檔案。
我們並沒改到Java 檔案。
我們改好了XML檔案， 為什麼不一起改Java 檔案?