Android: Kullanılabilir alanı doldurmak için bir görünüm nasıl büyütülür?


91

Bu basit görünüyor, ancak nasıl yapılacağını çözemiyorum. EditText ve iki ImageButton ile yatay bir düzenim var. ImageButton'ların sabit bir boyutta olmasını ve EditText'in düzende kalan alanı kaplamasını istiyorum. Bu nasıl yapılabilir?

<LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content">
        <EditText 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
        </EditText>
        <ImageButton 
            android:src="@drawable/img1"
            android:layout_width="50dip" 
            android:layout_height="50dip">
        </ImageButton>
        <ImageButton 
            android:src="@drawable/img2"
            android:layout_width="50dip" 
            android:layout_height="50dip">
        </ImageButton>
</LinearLayout>

Yanıtlar:


51

bunu göreceli düzende deneyin

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content">
    <ImageButton 
        android:id="@+id/btn1"
        android:src="@drawable/icon"
        android:layout_width="50dip" 
        android:layout_height="50dip"
        android:layout_alignParentRight="true"/>
    <ImageButton 
        android:id="@+id/btn2"
        android:src="@drawable/icon"
        android:layout_width="50dip" 
        android:layout_height="50dip"
        android:layout_toLeftOf="@+id/btn1"/>
    <EditText 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/btn2">
    </EditText>

</RelativeLayout>

4
Teşekkür ederim. Bu harika çalışıyor. (Joseph'in belirttiği gibi ImageButton'ların EditText'ten önce tanımlanmış olması dışında).
ab11

1
fill_parent - Bu sabit, API Seviye 8'den itibaren kullanımdan kaldırılmıştır ve {@code match_parent} ile değiştirilmiştir.
Zon

149

Düzeni aynı tutmak istiyorsanız (yani, metinden sonraki düğmeler), layout_weightözelliği ile birlikte kullanın fill_parent, böylece:

<LinearLayout 
    android:orientation="horizontal"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content">
    <EditText 
        android:layout_weight="1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    </EditText>
    <ImageButton 
        android:src="@drawable/img1"
        android:layout_width="50dip" 
        android:layout_height="50dip">
    </ImageButton>
    <ImageButton 
        android:src="@drawable/img2"
        android:layout_width="50dip" 
        android:layout_height="50dip">
    </ImageButton>
 </LinearLayout>

EditText'Ağırlık' vermek, en son anlaşılmasını sağlar ve düğmelere öncelik verir. Farklı layout_weights ile oynayın ve ne kadar eğlenebileceğinizi görün!


1
Teşekkür ederim. Yerleşimimde 3 alanım var (üstbilgiler, içerik- Web Görünümü ve altbilgi) sorunu WebView layout_weight = 1 ve footer layout_weight = 0 ayarlayarak çözdü.
MKK

Sadece bir çocuğa kilo ve 0dp ayarlamanın püf noktasını bilmiyordum .. Teşekkürler!
Marcel Bro

1
bu genellikle en iyi uygulamalar olarak kabul edilir mi? Android'in görüşleri çözme sırasını etkileyebilmeniz ilginç.
Cypress Frankenfeld

2
genişlik korunmalıdır 0 Sanırım
Bibaswann Bandyopadhyay

19

Tamam:

<RelativeLayout 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content">

        <ImageButton 
            android:id="@+id/button1"
            android:src="@drawable/img1"
            android:layout_width="50dip"
            android:layout_alignParentTop="true" 
            android:layout_height="50dip">
        </ImageButton>
        <ImageButton 
            android:src="@drawable/img2"
            android:layout_width="50dip" 
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@id/button1"
            android:layout_height="50dip">
        </ImageButton>
        <EditText 
            android:layout_below="@id/button"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent">
        </EditText>
</RelativeLayout>

Düzenin temel noktaları şunlardır:

  • Sabit boyutlu öğeler düzende ilk sırada yer alır, bu şekilde Android nesnelerin yüksekliğinin yüksekliğini hesaplamaya geldiğinde fill_parent daha sonra dosyada yalnızca kalan alanı hesaba katar, eğer varsa kaplayabileceği tüm alanı değil orada başka hiçbir şey yoktu
  • EditText, kullanılabilir alanın geri kalanını kaplayacak şekilde fill_parent( match_parent2.2+) yüksekliğe sahiptir.

Üzgünüm, sorunuzu yeterince okuyamadım. Dikey bir şekilde yapmak istiyorsanız yukarıdaki kod cevabı sağlar. Yatay bir düzen için @Sunil tarafından gönderilen kod çalışmalıdır.


Teşekkür ederim Joseph. Bu işe yarıyor. Yine de biraz daha hızlı olduğu için Sunil'e kredi verdim.
ab11

15

layout_widthVeya layout_heightolarak ayarlayın 0dp(Kalan alanı doldurmak istediğiniz yöne göre). Ardından layout_weightkalan alanı doldurması için düğmesini kullanın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.