2009-12-24 15 views
6

...android: Ben basit bir şey eksik eminim basit LinearLayout ve fill_parent soru

Geçmiş:

Ben android ve UI tasarımı için yeni, ve sadece etrafında oynamak istedim düzenleri ile. Şu anda metin etiketinin üstünde bir onay kutusu istemek istiyorum. (Sadece nasıl çalıştığını işler için bir fikir edinmesini)

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 

    <CheckBox android:id="@+id/check_box" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/check_box_text" /> 

    <TextView android:id="@+id/dummy_display" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/dummy_label" /> 

</LinearLayout> 

Benim Testleri: Ben ince çalışır aşağıdaki xml düzenini kullanıyorum

  • Senaryo 1) ayarladığınızda CheckBox'un layout_height - "fill_parent", CheckBox tüm ekranı kaplar ve merkez hizalanır (yani - TextView kaybolur).

  • Senaryo 2) yerineTextView 'ın layout_height"fill_parent" için, CheckBox yok olmaz ayarlarsanız. Aslında hiçbir şey kaybolmaz ve düzen, her şeyin üst sola itildiği yukarıdaki xml ile aynı görünür.

Soru (ve yorum):

Nasıl oluyor Senaryo 1 Çalışır şekilde çalışır?

Bu davranış benim için tutarsız görünüyor. fill_parent'un sadece elemanın ebeveynde hangi boşluğun mevcut olduğunu doldurmasına izin vereceğini sanıyordum. Bu yüzden bana TextView (wrap_content olduğundan) alan ne olursa olsun, CheckBox alanın geri kalanını alması gerektiği görünmüyor (TextView ekranın altına zorlanacaktır, ancak görünmez değil). Başka bir deyişle ... Senaryo 2 benim için mantıklı, ancak senaryo 1 değil.

Lütfen açıklayınız :-).

sayesinde

Tom tek adım olarak

+0

Bunu okumak isteyebilirsiniz (henüz değilse): Android görüntüleri nasıl çeker? Link: http://developer.android.com/guide/topics/ui/how-android-draws.html – Samuh

cevap

13

LinearLayout önlemleri çocukların teker teker o ilk çocuk bunun için veriyor mevcut tüm yüksekliğe sahip istiyorum görür İlk örnekte kadar. İkinci örneğinizde, ikinci çocuğa tüm müsait yerleri verir. araçlar bölümündeki metin kutusu için gerekli yerin dışındaki tüm gerçekleşecek isterseniz wrap_parent için onay kutusu layout_height değiştirip her çocuğun layout_weight özelliğini ayarlamanız gerekir, düzen ağırlığı bütün çocuklar olmalıdır ölçüldü nasıl kullanılabilir yerin çok sonra gösterir Bunların her birine ekleyin. Adımlara göre daha spesifik olması için:
1) LinearLayout'un Ebeveyni, doğrusal düzenin ne kadar büyük olabileceğini söyler
2) LinearLayout, tüm çocuklara düzen paraşütleri hakkında belirttikleri sıraya göre sorup kullanılabilir alanı dağıtır.herhangi boş alan onların ağırlığın (düzen ağırlığına göre çocuklar arasında dağıtır hala kullanılabilir durumdaysa
3), 0, 0 ile 1-
Umarım yardımcı olur varsayılan)
Düzenleme: Birkaç gün önce
LinearLayout kaynak kodunu kontrol ettik ve bir doğrusal düzen FILL_PARENT düzen params vardı ve sıfır ağırlık ölçüm kodu WRAP_CONTENT ve daha sonra ağırlıkları göre tüm çocuklar arasında boşluk dağıtmak için sıfır ağırlık kodu vardı ne olduğunu öğrendim.

+0

Hmmm, bu tamamen doğru görünmüyor, ama yakın görünüyorsun. Onay kutusunun ağırlığını 1 ... olarak ayarlıyorum ancak yüksekliği için fill_parent olarak TUTUN ... beklendiği gibi çalışır. Anlamı ... renderer, yükseklik için fill_parent görür görmez tüm alanı onay kutusunu vermez. Yani ağırlıklar hakkında söylediğin her şey bana mantıklı geliyor ... ama ben "fill_parent" in bu yerleşim algoritmasına ne zaman/nerede uyduğunu göremiyorum. Yapıyor musun? – Tom

+0

Daha fazla bilgi için düzenlememe bakın. Bu yüzden her zaman bir şeyler öğrenmek için bir şansım var :) –

+0

Size birden fazla oy verebilirsek, yapardım. NUTS beni, mevcut alanın tamamını nasıl dolduracağını anlamaya çalışırken, daha fazla alan diğerinden daha fazla alan ile beni yönlendiriyordu. Göreceli düzenlerin bir hodgepodge kullanıyordum ve çok uzağa gitmiyordum. – I82Much