Yanıtlar:
İle layout_weight
birden çok görünüm arasında bir boyut oranı belirleyebilirsiniz. Örneğin , haritaya bazı ek bilgiler göstermesi gereken bir MapView
ve bir bilginiz var table
. Harita ekranın 3 / 4'ünü ve tablo ekranın 1 / 4'ünü kullanmalıdır. Sonra koyacaktır layout_weight
arasında map
3 ve layout_weight
içinde table
1.
Çalışması için yüksekliği veya genişliği (yönlendirmenize bağlı olarak) 0 piksel olarak ayarlamanız gerekir.
Özetle, görünümdeki fazladan alanın ne kadarının görünüme layout_weight
ayrılacağını belirtir.
LinearLayout, bireysel çocuklara ağırlık atamayı destekler. Bu öznitelik bir görünüme "önem" değeri atar ve üst görünümde kalan boşlukları dolduracak şekilde genişlemesine olanak tanır. Görünümlerin varsayılan ağırlığı sıfırdır.
Genel olarak formül:
çocuğa atanan alan = (çocuğun bireysel ağırlığı) / (Doğrusal Yerleşimdeki her çocuğun ağırlığı toplamı)
Üç metin kutusu varsa ve bunlardan ikisi ağırlık 1 olarak beyan edilirken, üçüncü kutuya ağırlık verilmezse (0), kalan alan aşağıdaki gibi atanır:
1. metin kutusu = 1 / (1 + 1 + 0)
2. metin kutusu = 1 / (1 + 1 + 0)
3. metin kutusu = 0 / (1 + 1 + 0)
Diyelim ki yatay bir satırda bir metin etiketi ve iki metin düzenleme öğesi var. Etikette layout_weight
belirtilmiş olmadığından, oluşturulması için gereken minimum yer kaplar. Eğer layout_weight
iki metin düzenleme elemanlarının her birinin 1 olarak ayarlanır (onlar aynı derecede önemli İstem için), üst düzeninde kalan genişliği arasında eşit bölünmüş olacaktır.
Hesaplama:
1. etiket = 0 / (0 + 1 + 1)
2. metin kutusu = 1 / (0 + 1 + 1)
3. metin kutusu = 1 / (0 + 1 + 1)
Bunun yerine, ilk metin kutusunun layout_weight
1 değeri varsa ve ikinci metin kutusunun layout_weight
değeri 2 ise, kalan boşluğun üçte biri birinci, üçte ikisi ikinciye verilir (çünkü ikinci biri daha önemlidir).
Hesaplama:
1. etiket = 0 / (0 + 1 + 2)
2. metin kutusu = 1 / (0 + 1 + 2)
3. metin kutusu = 2 / (0 + 1 + 2)
android:layout_width="0px"
önemlidir. Ayrıca, ağırlıkların tamsayı olması gerekmez.
weightSum
resme nereden geliyor? Bununla bir ilgisi var layout_weight
mı?
diğer cevaplara ek olarak, bunun işe yaraması için en önemli şey mizanpaj genişliğini (veya yüksekliğini) 0 piksel olarak ayarlamaktır
android:layout_width="0px"
aksi takdirde çöp görürsünüz
A'yı kapsayan birden çok görünüm varsa LinearLayout
, layout_weight
her birine orantılı bir boyut verir. Daha büyük bir layout_weight
değere sahip bir görünüm daha ağırdır, böylece daha büyük bir alan elde edilir.
İşte işleri daha net hale getirmek için bir görüntü.
Yerleşim ağırlığı terimi , matematikteki ağırlıklı ortalama kavramı ile ilgilidir . Ödev% 30, devam% 10, ara sınav% 20 ve final% 40 değerinde bir üniversite sınıfında olduğu gibidir. Bu parçalar için aldığınız puanlar, birlikte ağırlıklandırıldığında size toplam notunuzu verir.
Düzen ağırlığı için de aynıdır. Views
Bir yatay olarak LinearLayout
her biri toplam genişliğinin belli bir yüzdesi kadar sürebilir. (Veya dikey için yüksekliğin yüzdesi LinearLayout
.)
Kullandığınız LinearLayout
şuna benzer:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<!-- list of subviews -->
</LinearLayout>
Eğer kullanması gerektiğini Not layout_width="match_parent"
için LinearLayout
. Eğer kullanırsanız wrap_content
, o zaman işe yaramaz. Ayrıca layout_weight
, RelativeLayouts'taki görünümler için çalışmadığını unutmayın ( bu sorunla ilgili SO cevapları için buraya ve buraya bakın ).
Yataydaki her görünüm LinearLayout
şöyle görünür:
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
layout_width="0dp"
Birlikte kullanmanız gerektiğini unutmayın layout_weight="1"
. Bunu unutmak birçok yeni kullanıcı sorununa neden olur. ( Genişliği 0 olarak ayarlayarak elde edebileceğiniz farklı sonuçlar için bu makaleye bakın. ) Görüşleriniz dikeyse , elbette LinearLayout
kullanabilirsiniz layout_height="0dp"
.
In Button
I Yukarıdaki örnekte 1 olarak ağırlığını ayarlamak, ancak herhangi bir numarayı kullanabilirsiniz. Önemli olan sadece toplamdır. Gönderdiğim ilk görüntüdeki üç düğme satırında görebilirsiniz, sayıların hepsi farklıdır, ancak oranlar aynı olduğundan, ağırlıklı genişlikler her satırda değişmez. Bazı insanlar toplamı 1 olan ondalık sayıları kullanmayı sever, böylece karmaşık bir düzende her parçanın ağırlığının ne olduğu açıktır.
Son bir not. Kullanan çok sayıda iç içe düzeniniz varsa layout_weight
, performans için kötü olabilir.
En iyi görüntü için xml düzeni şöyledir:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="android:layout_weight="
android:textSize="24sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="1" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="2" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="1" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="android:layout_weight="
android:textSize="24sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="10"
android:text="10" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="20"
android:text="20" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="10"
android:text="10" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="android:layout_weight="
android:textSize="24sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=".25"
android:text=".25" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=".50"
android:text=".50" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=".25"
android:text=".25" />
</LinearLayout>
</LinearLayout>
layout_weight
Android cihazına View
a LinearLayout
. Daha sonra Android önce View
belirtilen ağırlığı olan tüm s için gereken toplam oranı hesaplar ve her View
birini ekranın hangi kısmına ihtiyaç duyduğuna göre yerleştirir. Aşağıdaki örnekte, Android görür TextView
ler bir var layout_weight
bir 0
(varsayılan ayar) ve EditText
ler bir var layout_weight
bir 2
süre, her Button
bir ağırlığa sahiptir 1
. Yani Android ayırır 'yeterli' ekrana uzay tvUsername
ve tvPassword
sonra ve tahsis edilir ikisi 5 eşit parçaya ekran genişliğinin kalan böler etUsername
, iki etPassword
ve son bölüm bLogin
:
<LinearLayout android:orientation="horizontal" ...>
<TextView android:id="@+id/tvUsername"
android:text="Username"
android:layout_width="wrap_content" ... />
<EditText android:id="@+id/etUsername"
android:layout_width="0dp"
android:layout_weight="2" ... />
<TextView android:id="@+id/tvPassword"
android:text="Password"
android:layout_width="wrap_content" />
<EditText android:id="@+id/etPassword"
android:layout_width="0dp"
android:layout_weight="2" ... />
<Button android:id="@+id/bLogin"
android:layout_width="0dp"
android:layout_weight="1"
android:text="Login"... />
</LinearLayout>
Şöyle görünüyor:
ve
Bu şekilde düşün, daha basit olacak
3 düğmeniz varsa ve ağırlıkları 1,3,1 ise, HTML'deki tablo gibi çalışır
Bu hat için 5 kısım sağlayın: Düğme 1 için 1 kısım, Düğme 2 için 3 kısım ve Düğme 1 için 1 kısım
Saygı,
benim için en iyi açıklamalardan biri bu idi (Android öğreticisinden, adım 7'ye bakın) :
layout_weight, düzen içindeki Görünümlere "önem" atamak için LinearLayouts'ta kullanılır. Tüm Görünümlerin varsayılan düzen_ağlığı sıfırdır, yani ekranda görüntülenmeleri için yalnızca yer kaplarlar. Sıfırdan daha yüksek bir değer atamak, her Görünüm'ün düzen_ağırlığının değerine ve bu ve diğer Görünüm öğeleri için geçerli mizanpajda belirtilen genel düzen_ağırlığına oranına göre üst görünümdeki kullanılabilir alanın geri kalanını böler.
Bir örnek vermek gerekirse: diyelim ki yatay bir satırda bir metin etiketimiz ve iki metin düzenleme öğemiz var. Etikette belirtilen layout_weight yoktur, bu nedenle oluşturulması için gereken minimum alanı kaplar. İki metin düzenleme öğesinin her birinin düzen_ağırlığı 1 olarak ayarlanırsa, üst düzende kalan genişlik aralarında eşit olarak bölünür (çünkü aynı derecede önemli olduklarını iddia ederiz). Birincisinin düzen_ağırlığı 1 ve ikincisinin düzen_ağırlığı 2 ise, kalan boşluğun üçte biri birinciye, ikincisinin üçte ikisi verilir (çünkü ikincisinin daha önemli olduğunu iddia ederiz).
http://developer.android.com/guide/topics/ui/layout-objects.html#linearlayout
layout_weight, kontrolün diğer kontrollere göre ne kadar alan elde etmesi gerektiğini tanımlar.
Lütfen her bir Görünümün LinearLayout'un weightSumum'una ve layout_weight değerine bakın. android: weightSum = "4" android: layout_weight = "2" android: layout_weight = "2" Onların layout_height her ikisi de 0px, ancak relevan olduğundan emin değilim
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="4">
<fragment android:name="com.example.SettingFragment"
android:id="@+id/settingFragment"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="2"
/>
<Button
android:id="@+id/dummy_button"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="2"
android:text="DUMMY"
/>
</LinearLayout>
Her iki yanıtı birleştirmek
Flo & rptwsthi ve roetzi,
Değiştirmeyi unutmayın layout_width=0dp/px
, yoksa en layout_weight
büyük sayı en küçük alanı işgal eden ve en az sayı en büyük alanı işgal eden davranış ters olarak hareket edecektir.
Ayrıca, bazı ağırlık kombinasyonları bazı düzenlerin gösterilememesine neden olacaktır (bu alan üzerinde yer kapladığından).
Buna dikkat et.
Ekleme android:autoSizeTextType="uniform"
, metni sizin için otomatik olarak yeniden boyutlandırır
Adından da anlaşılacağı gibi, Düzen ağırlığı, belirli bir alanın veya widget'ın ekran alanını işgal etmesi gereken alan miktarını veya yüzdesini belirtir.
Ağırlığı yatay yönde belirtirsek, o zaman belirtmeliyiz layout_width = 0px
.
Benzer şekilde, ağırlığı dikey yönde belirtirsek, o zaman belirtmeliyiz layout_height = 0px
.