programing

안드로이드:layout_weight는 무엇을 의미합니까?

magicmemo 2023. 6. 5. 23:49
반응형

안드로이드:layout_weight는 무엇을 의미합니까?

이 속성을 사용하는 방법을 이해할 수 없습니다.그것에 대해 더 말해줄 수 있는 사람?

와 함께layout_weight여러 뷰 간의 크기 비율을 지정할 수 있습니다.예: 예:MapView a 리고a.table지도에 대한 추가 정보를 표시해야 합니다.지도는 화면의 3/4을 사용하고 테이블은 화면의 1/4을 사용해야 합니다.은 그다음설다니합정런을 할 입니다.layout_weight의 시대의map3까지 그리고.layout_weight의 시대의table1대 1로

또한 방향에 따라 높이 또는 폭을 0px로 설정해야 작동합니다.

간단히 말해서, 레이아웃에서 보기에 할당할 추가 공간의 양을 지정합니다.

선형 레이아웃에서는 개별 자식에 가중치를 할당할 수 있습니다.이 속성은 뷰에 "중요도" 값을 할당하고 상위 뷰의 나머지 공간을 채우도록 확장할 수 있습니다.보기의 기본 가중치는 0입니다.

자식 간에 남은 공간을 할당하기 위한 계산

일반적으로 공식은 다음과 같습니다.

하위 항목에 할당된 공간 =(하위 항목의 개별 가중치) /(선형 레이아웃에서 모든 하위 항목의 가중치 합계)

예 1

텍스트 상자가 세 개 있고 그 중 두 개가 가중치 1을 선언하는 반면 세 번째 텍스트 상자에는 가중치(0)가 부여되지 않은 경우 남은 공간은 다음과 같이 할당됩니다.

첫 번째 텍스트 상자 = 1/(1+1+0)

두 번째 텍스트 상자 = 1/(1+1+0)

세 번째 텍스트 상자 = 0/(1+1+0)

예 2

수평 행에 텍스트 레이블과 두 개의 텍스트 편집 요소가 있다고 가정해 보겠습니다.에 레블에가 .layout_weight지정되었으므로 렌더링에 필요한 최소 공간을 차지합니다.에 약에만.layout_weight두 개의 텍스트 편집 요소가 각각 1로 설정되면 부모 레이아웃의 나머지 너비가 동일하게 분할됩니다(둘 다 동일하게 중요하다고 주장하므로).

계산:

첫 번째 레이블 = 0/(0+1+1)

두 번째 텍스트 상자 = 1/(0+1+1)

세 번째 텍스트 상자 = 1/(0+1+1)

대신, 첫 번째 텍스트 상자에 다음 문자가 있는 경우layout_weight1, 그리고 두 번째 텍스트 상자에는layout_weight2의 나머지 공간의 3분의 1은 첫 번째 공간에, 2/3는 두 번째 공간에 주어집니다(우리는 두 번째 공간이 더 중요하다고 주장하기 때문에).

계산:

첫 번째 레이블 = 0/(0+1+2)

두 번째 텍스트 상자 = 1/(0+1+2)

세 번째 텍스트 상자 = 2/(0+1+2)


출처 기사

다른 답변 외에도, 이 작업을 수행하기 위해 가장 중요한 것은 레이아웃 폭(또는 높이)을 0도로 설정하는 것입니다.

android:layout_width="0px"

그렇지 않으면 쓰레기를 보게 될 것입니다.

전체에 걸쳐 있는 여러 뷰가 있는 경우LinearLayout,그리고나서layout_weight각각의 크기가 비례합니다. 큰 뷰 더 큰 뷰layout_weight더 큰 공간을 확보할 수 있도록 더 많은 가치를 부여합니다.

여기 좀 더 명확하게 하기 위한 이미지가 있습니다.

여기에 이미지 설명 입력

이론.

레이아웃 가중치라는 용어는 수학의 가중 평균 개념과 관련이 있습니다.마치 숙제가 30%, 출석이 10%, 중간고사가 20%, 기말고사가 40%의 가치가 있는 대학 수업과 같습니다.해당 부분에 대한 점수를 합산하여 가중치를 부여하면 총점이 부여됩니다.

여기에 이미지 설명 입력

레이아웃 무게도 동일합니다.ViewsLinearLayout 전체 너비의할 수 ()LinearLayout.)

레이아웃

LinearLayout다음과 같이 사용할 수 있습니다.

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <!-- list of subviews -->

</LinearLayout>

로 다을사합니다야해를 .layout_width="match_parent"를해위를 .LinearLayout사용하는 경우wrap_content그러면 작동하지 않을 것입니다. 또참고는 다음과 .layout_weight상대 레이아웃의 보기에서는 작동하지 않습니다(이 문제를 다루는 SO 답변은 여기 및 여기 참조).

더 뷰즈

의 각 뷰LinearLayout다음과 같이 보입니다.

<Button
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1" />

사용해야 한다는 점에 유의하십시오.layout_width="0dp"layout_weight="1"이를 잊으면 많은 새 사용자 문제가 발생합니다.(폭을 0으로 설정하지 않으면 얻을 수 있는 다양한 결과는 이 문서를 참조하십시오.)보기가 수직인 경우 LinearLayout그러면 당신은 사용할 것입니다.layout_height="0dp" 론이야물야.

Button위의 예에서는 무게를 1로 설정했지만 아무 숫자나 사용할 수 있습니다.중요한 것은 오직 전체입니다.제가 올린 첫 번째 이미지의 세 줄의 버튼에서 볼 수 있듯이, 숫자는 모두 다르지만, 비율이 같기 때문에 각 행에서 가중 폭은 변하지 않습니다.어떤 사람들은 복잡한 레이아웃에서 각 부품의 무게가 얼마나 되는지 명확하게 알 수 있도록 합이 1인 십진수를 사용하는 것을 좋아합니다.

마지막 음 하나.사하는중첩용을 이 많은 layout_weight성능에 좋지 않을 수 있습니다.

추가의

상단 이미지의 xml 레이아웃은 다음과 같습니다.

<?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에 배포 방법을 알려줍니다.View단번에LinearLayout그런 다음 Android는 먼저 전체에 필요한 총 비율을 계산합니다.View하고 각각의 가중치를 s.View화면에서 필요한 부분을 지정했습니다.다음 예제에서 Android는 다음과 같이 봅니다.TextView면도를 하다layout_weight0및 (으)로 됩니다.EditText면도를 하다layout_weight2에, 각에, 면반.Button의 무게가 있습니다.1는 Android를 표시할 수 '할당합니다.tvUsername그리고.tvPassword그리고 나서 화면 너비의 나머지를 5개의 동일한 부분으로 나누고, 그 중 2개는 다음에 할당됩니다.etUsername 개에서 두 개 사이의 양etPassword인 그고마부분은막지.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>

모양은 다음과 같습니다.
풍경 방향그리고.
초상화의 방향.

그렇게 생각하면 더 간단해질 것입니다.

만약 당신이 3개의 버튼을 가지고 있고 그것들의 무게가 1,3,1이라면, 그것은 HTML의 테이블처럼 작동할 것입니다.

해당 라인에 대해 5개의 부분을 제공합니다. 버튼 1에 대해 1개, 버튼 2에 대해 3개, 버튼 1에 대해 1개.

관심,

저에게 가장 좋은 설명 중 하나는 다음과 같습니다(안드로이드 튜토리얼에서 7단계를 찾습니다).

layout_weight는 선형 레이아웃에서 레이아웃 내의 뷰에 "중요도"를 할당하는 데 사용됩니다.모든 보기의 기본 layout_weight는 0입니다. 즉, 화면에서 표시해야 할 만큼의 공간만 차지합니다.0보다 큰 값을 할당하면 각 뷰의 layout_weight 값과 이 요소 및 다른 뷰 요소에 대해 현재 레이아웃에 지정된 전체 layout_weight에 대한 비율에 따라 상위 뷰에서 사용 가능한 나머지 공간이 분할됩니다.

예를 들어, 수평 행에 텍스트 레이블과 두 개의 텍스트 편집 요소가 있다고 가정해 보겠습니다.레이블에 layout_weight가 지정되지 않았으므로 렌더링에 필요한 최소 공간을 차지합니다.두 텍스트 편집 요소 각각의 layout_weight를 1로 설정하면 부모 레이아웃의 나머지 너비가 동일하게 분할됩니다.첫 번째 공간이 layout_weight가 1이고 두 번째 공간이 layout_weight가 2이면 나머지 공간의 3분의 1이 첫 번째 공간에 주어지고 두 번째 공간이 2/3가 두 번째 공간에 따라서 두 번째 공간이 더 중요합니다.

http://developer.android.com/guide/topics/ui/layout-objects.html#linearlayout

layout_weight는 컨트롤이 다른 컨트롤에 대해 각각 확보해야 하는 공간을 정의합니다.

추가적인 경우:

위해서vertical오리엔테이션, 잊지마 세트height0dp0dp(으)로

android:layout_height="0dp"

위해서horizontal오리엔테이션, 잊지마 세트width0dp0dp(으)로

android:layout_width="0dp"

선형 레이아웃의 가중치 합계와 각 보기의 레이아웃_가중치를 확인하십시오. 안드로이드:weightSum="4" 안드로이드:slot_weight="2" 안드로이드:slot_weight="2" 레이아웃_높이가 모두 0인치이지만 관련이 있는지는 잘 모르겠습니다.

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

의 두 답변을 모두 결합합니다.

플로트프스티와 로에츠,

변경하는 것을 기억하십시오.layout_width=0dp/px그렇지 않으면layout_weight행동은 가장 큰 수가 가장 작은 공간을 차지하고 가장 작은 수가 가장 큰 공간을 차지하는 역으로 작용합니다.

또한 일부 가중치 조합으로 인해 일부 레이아웃이 표시되지 않습니다(공간을 초과했기 때문에).

이것을 조심하세요.

추가하기android:autoSizeTextType="uniform"됩니다.

이름에서 알 수 있듯이 레이아웃 가중치는 특정 필드 또는 위젯이 화면 공간을 차지할 공간의 양 또는 백분율을 지정합니다.
수평 수평 방향으로 무게를 지정해야 .layout_width = 0px.
마찬가지로, 수직 방향으로 무게를 지정하면 다음과 같이 지정해야 합니다.layout_height = 0px.

언급URL : https://stackoverflow.com/questions/3995825/what-does-androidlayout-weight-mean

반응형