Android : 사용 가능한 공간을 채우기 위해 뷰를 확장하는 방법은 무엇입니까?


90

이것은 간단 해 보이지만 어떻게해야할지 모르겠습니다. EditText와 두 개의 ImageButton이있는 가로 레이아웃이 있습니다. ImageButton은 고정 된 크기이고 EditText는 레이아웃의 나머지 공간을 차지하기를 원합니다. 이것이 어떻게 성취 될 수 있습니까?

<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>

답변:


51

상대 레이아웃에서 시도

<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
감사합니다. 이것은 훌륭하게 작동합니다. (조셉이 언급했듯이 ImageButtons는 EditText 전에 정의되어야한다는 점을 제외하고).
ab11 2011 년

1
fill_parent-이 상수는 API 레벨 8부터 지원이 중단되며 {@code match_parent}로 대체됩니다.
Zon

147

레이아웃을 동일하게 유지하려면 (예 : 텍스트 뒤의 버튼) layout_weight속성과 함께을 사용하십시오 fill_parent.

<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'무게 것은'는 지난 파악하고, 버튼에 우선 순위를 제공받을 수 있습니다. 다른 layout_weights로 플레이하고 얼마나 재미있을 수 있는지 확인하십시오!


1
감사합니다. 내 레이아웃 3 영역 (머리글, 콘텐츠-WebView 및 바닥 글)에 WebView layout_weight = 1 및 바닥 글의 layout_weight = 0을 설정하여 문제를 해결했습니다.
MKK

한 아이에게 체중과 0dp를 설정하는 비법을 몰랐습니다. 감사합니다!
Marcel Bro

1
이것은 일반적으로 모범 사례로 간주됩니까? 안드로이드가 뷰를 확인하는 순서에 영향을 미칠 수 있다는 것은 흥미 롭습니다.
Cypress Frankenfeld 2014 년

2
폭은 내가 생각하는 0 유지해야한다
Bibaswann Bandyopadhyay에게

19

괜찮아:

<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>

레이아웃의 요점은 다음과 같습니다.

  • 고정 된 크기의 항목은 레이아웃에서 먼저 배치됩니다. 이렇게하면 Android가 fill_parent나중에 파일에서 사물의 높이를 계산할 때 차지할 수있는 모든 공간이 아닌 나머지 공간 만 고려합니다. 거기에 아무것도 없었다
  • EditText의 높이는 fill_parent( match_parent2.2+에서) 사용 가능한 나머지 공간을 차지합니다.

질문을 읽지 못해 죄송합니다. 위의 코드는 수직 방식으로 수행하려는 경우 답을 제공합니다. 수평 레이아웃의 경우 @Sunil이 게시 한 코드가 작동합니다.


조셉 감사합니다. 작동합니다. 그래도 조금 더 빠르다는 점을 수닐에게 칭찬했다.
ab11 2011 년

13

사용은 설정 layout_width이나 layout_height0dp(방향함으로써 당신은 남은 공간을 채우려). 그런 다음을 사용하여 layout_weight나머지 공간을 채 웁니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.