안드로이드:layout_weight는 무엇을 의미합니까?
이 속성을 사용하는 방법을 이해할 수 없습니다.그것에 대해 더 말해줄 수 있는 사람?
와 함께layout_weight
여러 뷰 간의 크기 비율을 지정할 수 있습니다.예: 예:MapView
a 리고a.table
지도에 대한 추가 정보를 표시해야 합니다.지도는 화면의 3/4을 사용하고 테이블은 화면의 1/4을 사용해야 합니다.은 그다음설다니합정런을 할 입니다.layout_weight
의 시대의map
3까지 그리고.layout_weight
의 시대의table
1대 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_weight
1, 그리고 두 번째 텍스트 상자에는layout_weight
2의 나머지 공간의 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%의 가치가 있는 대학 수업과 같습니다.해당 부분에 대한 점수를 합산하여 가중치를 부여하면 총점이 부여됩니다.
레이아웃 무게도 동일합니다. 그Views
LinearLayout
전체 너비의할 수 ()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_weight
0
및 (으)로 됩니다.EditText
면도를 하다layout_weight
2
에, 각에, 면반.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
오리엔테이션, 잊지마 세트height
0dp0dp(으)로
android:layout_height="0dp"
위해서horizontal
오리엔테이션, 잊지마 세트width
0dp0dp(으)로
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
'programing' 카테고리의 다른 글
가상 시스템 클래식과 zure의 가상 시스템의 차이점은 무엇입니까? (0) | 2023.06.05 |
---|---|
벡터에서 요소의 인덱스를 찾는 R 함수가 있습니까? (0) | 2023.06.05 |
R 마크다운, Knitr, Pandoc 및 북다운의 관계 (0) | 2023.06.05 |
Firebase 기능을 배포하는 동안 ESLint 오류가 발생했습니다. (0) | 2023.06.05 |
위치: iPad 및 iPhone에서 fixed가 작동하지 않습니다. (0) | 2023.06.05 |