Türkçe karşılığı yerçekimi demek olan gravity özelliği bir nesneyi daha büyük bir alan içerisinde konumlandırmak için kullanılır. layout_gravity ve android_gravity olmak üzere farklı amaçlar için kullanılan iki gravity özelliği bulunur.
layout_gravity
Bir nesneyi layout içerisinde konumlandırmak için kullanılan özelliktir. Buton gibi nesnelerinizi layout içerisinde center,left veya right gibi parametreler kullanarak konumlandırabilirsiniz. Linearlayoutun varsayılan sıralaması (orientation) yataydır (horizontal). Eğer nesnelerinizi horizontal sıralaması olan bir linearlayout içerisinde konumlandırırsanız nesnelerinizin bulunduğu sütun içerisinde bu işlem gerçekleşecektir. Bunu bir örnekle açıklayalım.
Şekil 1’de 3 buton linearlayout içerisinde sıralanmıştır. Kodlar incelendiğinde linearlayout özelliklerinde orientation belirtilmediği için varsayılan olarak horizontaldır. Bu sebeple butonlar yan yana dizilmiştir. Her bir butona weight değeri 1 olarak verildiği için yatayda eşit miktarda yer kaplamışlardır. Her butonun yükseklik değeri ise 150dp’dir.
Şekil
2’de ise her bir buton layout_gravity kodu ile linearlayout içerisinde farklı
pozisyonlarda konumlandırılmıştır.
14.
Satırda Buton1 layout_gravity komutu ve center parametresi ile merkeze
konumlandırılmıştır. 21.Satırda Buton2 right parametresi ile sağa ve 28.satırda
ise Buton3 bottom parametresi ile layoutun en altına konumlandırılmıştır.
Aşağıdaki iki soru akıllara takılan sorular olabilir:
1-
Buton1 center parametresi ile neden layoutun tam ortasına konumlanmadı?
2- Buton2 right parametresi ile
layotun sağına gitmesi gerekirken neden olduğu yerde kaldı?
Yukardaki
iki sorunun cevabı butonların kendi bulundukları sütun içerisinde
konumlanmalarıdır. Bu sebeple kendi sütununu tamamen kapladığı için sağa veya
sola gitmesi mümkün olmayan Buton2 olduğu yerde kalmıştır. Buton1 yatayda tüm
sütununu kapladığı için center
parametresi sonucu sadece dikeyde merkeze gelebilmiştir. Buton3 ise bottom ile
layoutun altına konumlanmıştır. Bu sütunları ekran üzerinde görebilseydik
aşağıdaki şekildeki gibi gözükecekti.
Peki
linearlayoutun sıralaması yatay yerine dikey (vertical) olsaydı o zaman layout
gravity nasıl çalışırdı? Bu durumda konumlandırma işlemi öğelerin bulunduğu
sütun yerine satırda yapılacaktı. Bunu da bir örnekle açıklayalım. Aşağıdaki
şekilde sıralaması dikey olan bir linearlayout içerisinde her birisi 150dp
genişliğinde 3 buton yer alıyor. Görüldüğü gibi bütün butonlar weight değerleri
1 olduğu için dikeyde aynı alanı kaplayacak şekilde sıralanmışlar.
Butonları
layout_gravity kodu ile layout üzerinde konumlandırdığımızda her bir buton
bulunduğu satırda hareket edecektir.
Buton1 15.satırda
layout_gravity=”bottom” kodu ile layoutun altında konumlandırılmak istense de
bulunduğu pozisyonda kalmıştır. Bunun sebebi her butonunun kendi bulunduğu
satır içerisinde hareket etmesidir. Buton2 22.satırdaki center parametresi ile
bulunduğu satırın orta noktasına konumlandırılmıştır. Buton3 ise 29.satırdaki
right parametresi ile bulunduğu satırın sağına yerleşmiştir.
android_gravity
Layout gravity kodu ile nesneler
layout üzerinde konumlandırılırken, android gravity ise nesnelerin içindeki
öğeleri nesne üzerinde konumlandırmaya yarar. Örneğin bir buton üzerindeki “Kaydet”
yazısını buton üzerinde konumlandırmak için android_gravity kullanılır.
Aşağıdaki örnekte 150dp*150dp boyutlarındaki bir buton layout üzerinde
14.satırdaki center parametresi ile bulunduğu sütunda merkeze getirilmiştir.
Buton üzerindeki Kaydet yazısı ise 13.satırdaki android_gravity özelliğine
verilen right parametresi ile butonun sağına hizalanmıştır.
Kaydet yazısını butonun sağ alt
köşesine almak isterseniz iki parametreyi “bottom|right” biçiminde
kullanabilirsiniz. Örnekte linearlayout özelliklerinde orientation özelliğinin
belirtilmediğine dolayısıyla sıralamanın varsayılan olarak horizontal (yatay)
yapıldığına dikkat edin.
English Content
Gravity property, which means gravity in Turkish, is used to position an object in a larger area. There are two gravity properties that are used for different purposes, layout_gravity and android_gravity.
layout_gravity
It is the property used to position an object in the layout. You can position your objects such as buttons in the layout using parameters such as center, left or right. Linearlayout's default orientation is horizontal. If you position your objects in a horizontal order linearlayout, this will be done in the column where your objects are. Let's explain this with an example.
In Figure 1, 3 buttons are listed in linearlayout. When the codes are examined, it is default horizonta because orientation is not specified in the linearlayout properties. For this reason, the buttons are lined up side by side. Since the weight value of each button is given as 1, they occupy an equal amount of space on the horizontal. The height value of each button is 150dp.
In Figure 2, each button is positioned in different positions in the linearlayout with the layout_gravity code.
In line 14, Button1 is located in the center with the layout_gravity command and the center parameter. On the 21st line, Button2 is positioned to the right with the right parameter and on the 28th line, Button3 is positioned at the bottom of the layout with the bottom parameter. The following two questions may be puzzling questions:
1- Why is the button1 not located in the middle of the layout with the center parameter?
2- Why did it stay where it was when it should go to the right of the layot with the button2 right parameter?
The answer to the above two questions is that the buttons are positioned in the column they are in. For this reason, Button2, which cannot go to the right or left because it completely covers its own column, remained in its place. Since button1 covers the entire column horizontally, the result of the center parameter could only come to the center in the vertical. Button3 is positioned below the layout with bottom. If we could see these columns on the screen, it would look like the figure below.
So if the order of linearlayout was vertical instead of horizontal, then how would layout gravity work? In this case, the positioning would be done in the row instead of the column where the items are. Let's explain this with an example. There are 3 buttons, each 150dp wide, in a linearlayout, the order of which is vertical in the following figure. As you can see, all buttons are arranged vertically to cover the same area since their weight values are 1.
When we position the buttons on the layout with the layout_gravity code, each button will move on the line where it is located.
Buton1, on the 15th line, remained in the position it was in, even though it was wanted to be positioned under the layout with the code layout_gravity = "bottom". The reason for this is that each button moves within its own row. Button2 is located in the middle of the line with the center parameter on the 22nd line. Button3 is placed on the right of the line with the right parameter on the 29th line.
android_gravity
With the layout gravity code, objects are positioned on the layout, while android gravity is used to position the elements inside the objects on the object. For example, android_gravity is used to position the "Save" text on a button on the button. In the example below, a button with the size of 150dp * 150dp has been brought to the center in the column with the center parameter on the 14th line on the layout. The Save text on the button is aligned to the right of the button with the right parameter given to the android_gravity property on the 13th line.
If you want to put the Save text in the lower right corner of the button, you can use the two parameters in the form of "bottom | right". Note that the orientation property is not specified in the linearlayout properties in the example, so the sorting is made horizontal by default.
Yorumlar