android : layout_weight는 무엇을 의미합니까?
이 속성을 사용하는 방법을 이해하지 못합니다. 누구든지 그것에 대해 더 말할 수 있습니까?
함께 layout_weight
사용하면 여러보기 사이의 크기 비율을 지정할 수 있습니다. 예 : 당신은이 MapView
와 table
지도에 몇 가지 추가 정보를 표시해야하는가. 지도는 화면의 3/4를 사용하고 테이블은 화면의 1/4을 사용해야합니다. 그런 다음 layout_weight
의 map
를 3으로 설정 하고 layout_weight
의의 table
를 1로 설정합니다.
작동하려면 높이 또는 너비 (방향에 따라 다름)를 0px로 설정해야합니다.
간단히 말해서, layout_weight
레이아웃에서 뷰에 할당 할 추가 공간의 양을 지정합니다.
LinearLayout은 개별 자식에게 가중치 할당을 지원합니다. 이 속성은보기에 "중요도"값을 지정하고 상위보기의 나머지 공간을 채우도록 확장 할 수 있습니다. 뷰의 기본 가중치는 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)
대신 첫 번째 텍스트 상자의 a layout_weight
가 1이고 두 번째 텍스트 상자의 a layout_weight
가 2이면 나머지 공간의 1/3이 첫 번째 공간에, 2/3가 두 번째 공간에 주어집니다 (우리가 두 번째 하나가 더 중요합니다).
계산:
첫 번째 레이블 = 0 / (0 + 1 + 2)
두 번째 텍스트 상자 = 1 / (0 + 1 + 2)
세 번째 텍스트 상자 = 2 / (0 + 1 + 2)
다른 답변에 추가하면이 작업을 수행하는 가장 중요한 것은 레이아웃 너비 (또는 높이)를 0px로 설정하는 것입니다.
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
RelativeLayouts의 뷰에서는 작동하지 않습니다 ( 이 문제를 다루는 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
tells Android how to distribute your View
s in a LinearLayout
. Android then first calculates the total proportion required for all View
s that have a weight specified and places each View
according to what fraction of the screen it has specified it needs. In the following example, Android sees that the TextView
s have a layout_weight
of 0
(this is the default) and the EditText
s have a layout_weight
of 2
each, while the Button
has a weight of 1
. So Android allocates 'just enough' space to display tvUsername
and tvPassword
and then divides the remainder of the screen width into 5 equal parts, two of which are allocated to etUsername
, two to etPassword
and the last part to 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>
It looks like:
and
Think it that way, will be simpler
If you have 3 buttons and their weights are 1,3,1 accordingly, it will work like table in HTML
Provide 5 portions for that line: 1 portion for button 1, 3 portion for button 2 and 1 portion for button 1
Regard,
one of the best explanations for me was this one (from the Android tutorial, look for step 7):
layout_weight is used in LinearLayouts to assign "importance" to Views within the layout. All Views have a default layout_weight of zero, meaning they take up only as much room on the screen as they need to be displayed. Assigning a value higher than zero will split up the rest of the available space in the parent View, according to the value of each View's layout_weight and its ratio to the overall layout_weight specified in the current layout for this and other View elements.
To give an example: let's say we have a text label and two text edit elements in a horizontal row. The label has no layout_weight specified, so it takes up the minimum space required to render. If the layout_weight of each of the two text edit elements is set to 1, the remaining width in the parent layout will be split equally between them (because we claim they are equally important). If the first one has a layout_weight of 1 and the second has a layout_weight of 2, then one third of the remaining space will be given to the first, and two thirds to the second (because we claim the second one is more important).
http://developer.android.com/guide/topics/ui/layout-objects.html#linearlayout
layout_weight defines how much space the control must obtain respectively to other controls.
Please look at the weightSum of LinearLayout and the layout_weight of each View. android:weightSum="4" android:layout_weight="2" android:layout_weight="2" Their layout_height are both 0px, but I am not sure it is relevan
<?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>
For additional:
For vertical
orientation, don't forget set height
to 0dp
android:layout_height="0dp"
For horizontal
orientation, don't forget set width
to 0dp
android:layout_width="0dp"
Combining both answers from
Flo & rptwsthi and roetzi,
Do remember to change your layout_width=0dp/px
, else the layout_weight
behaviour will act reversely with biggest number occupied the smallest space and lowest number occupied the biggest space.
Besides, some weights combination will caused some layout cannot be shown (since it over occupied the space).
Beware of this.
Adding android:autoSizeTextType="uniform"
will resize the text for you automatically
이름에서 알 수 있듯이 레이아웃 가중치는 특정 필드 또는 위젯이 화면 공간을 차지해야하는 공간의 양 또는 백분율을 지정합니다.
수평 방향으로 가중치를 지정하는 경우를 지정해야합니다 layout_width = 0px
.
마찬가지로 수직 방향으로 가중치를 지정하면 layout_height = 0px
.
참고 URL : https://stackoverflow.com/questions/3995825/what-does-androidlayout-weight-mean
'code' 카테고리의 다른 글
REST API-실제 사례가 포함 된 PUT 대 PATCH (0) | 2020.10.03 |
---|---|
grep -R에서 디렉토리를 제외하려면 어떻게해야합니까? (0) | 2020.10.03 |
바이트 배열을 문자열로 변환하는 방법 (0) | 2020.10.02 |
PuTTy 세션 목록을 내보내거나 가져 오는 방법은 무엇입니까? (0) | 2020.10.02 |
컨트롤러에서 필터를 사용하는 방법은 무엇입니까? (0) | 2020.10.02 |