2014-09-29 23 views
5

Trong LinearLayout ngang của tôi, tôi đặt trọng lực trong một chế độ là center_vertical và sau đó tôi đã cố gắng đặt layout_gravity cho chế độ xem thứ hai, nhưng chế độ xem đó được xếp hàng với văn bản được căn giữa trong chế độ xem đầu tiên!Trọng tâm thiết lập trọng tâm của sự sắp xếp bố cục thay đổi chế độ xem con của chế độ xem con khác trong bố cục ngang?

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" > 
    <TextView 
     android:layout_width="100dp" 
     android:layout_height="200dp" 
     android:layout_gravity="top" 
     android:background="@drawable/border" 
     android:gravity="center_vertical" 
     android:text="layout_gravity=top gravity=center_vertical" > 
    </TextView>    
    <TextView 
     android:layout_width="100dp" 
     android:layout_height="200dp" 
     android:layout_gravity="top" 
     android:background="@drawable/border" 
     android:gravity="top" 
     android:text="layout_gravity=top gravity=top" > 
    </TextView> 
</LinearLayout> 

enter image description here

Và đây là đoạn code giống nhau nhưng đối với một bố cục dọc. Lưu ý rằng hành vi mong muốn hoạt động chính xác trong bố cục dọc.

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 
    <TextView 
     android:layout_width="200dp" 
     android:layout_height="100dp" 
     android:layout_gravity="left" 
     android:background="@drawable/border" 
     android:gravity="center_horizontal" 
     android:text="layout_gravity=left gravity=center_horizontal" > 
    </TextView>    
    <TextView 
     android:layout_width="200dp" 
     android:layout_height="100dp" 
     android:layout_gravity="right" 
     android:background="@drawable/border" 
     android:gravity="right" 
     android:text="layout_gravity=right gravity=right" > 
    </TextView> 
</LinearLayout> 

enter image description here

Tôi chỉ có thể sử dụng một RelativeLayout hoặc có thể một LinearLayout lồng nhau để khắc phục vấn đề. Nhưng tôi hỏi câu hỏi này bởi vì tôi muốn biết nếu tôi không hiểu trọng lực và layout_gravity hoạt động như thế nào !! Điều quan trọng với tôi là tôi hiểu các thuộc tính cơ bản này hoạt động như thế nào. Cảm ơn

Trả lời

7

Nếu bạn muốn một trung tâm và một đầu sau đó bạn cần phải thêm một lá cờ cơ sở liên kết vào LinearLayout

android:baselineAligned="false" 

Mặc định bố cục để căn chỉnh đường cơ sở của trẻ em. Điều này có thể gây ra các vấn đề như thế này khi trẻ em sử dụng các giá trị hấp dẫn khác nhau.

Sự khác biệt với ngành dọc là các đường cơ sở không thể căn chỉnh được vì chúng có thể nằm ngang.

Xem:

http://developer.android.com/reference/android/widget/LinearLayout.html#attr_android:baselineAligned

thông tin bổ sung - Điều này dường như để giải thích vấn đề này tốt hơn tôi có thể:

http://www.doubleencore.com/2013/10/shifty-baseline-alignment/

+0

thật tuyệt vời. cảm ơn!! tôi đã phát điên. –

+0

+1. Đã không nhận thức được nó. –

+0

Thú vị. Đã học được điều gì đó mới :) – Karakuri

0

gravity là cách chế độ xem tự định vị nội dung của nó trong khu vực được xác định theo chiều rộng và chiều cao của nó. layout_gravity là cách bố trí của cha mẹ vị trí của trẻ trong khu vực của cha mẹ. Thông thường, bạn có thể chỉ cần đặt gravity trên LinearLayout thay vì đặt layout_gravity trên tất cả các con của nó.

Lưu ý rằng đối với LinearLayouts, gravity chỉ có tác dụng trên trục không phải là hướng, ví dụ: đầu và cuối sẽ liên quan đến LinearLayout ngang, nhưng trái và phải (hoặc bắt đầu và kết thúc) sẽ không liên quan.

+0

Các TextView thứ hai trong ví dụ đầu tiên có layout_gravity = "top" . Đó là cha mẹ là LinearLayout ngang. Tại sao phần đầu của TextView con không được căn chỉnh với đỉnh của LinearLayout cha mẹ? –

0

nếu bạn đang cố gắng một cái gì đó không phải là "kết nối với nhau" tức là bạn muốn có một số khoảng trống giữa hai vật dụng sau đó sử dụng một widget và sử dụng trống trọng

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="horizontal" 
android:weightSum="100" > 

<TextView 
    android:layout_width="100dp" 
    android:layout_height="200dp" 

    android:layout_weight="40" 
    android:gravity="center_vertical" 
    android:text="layout_gravity=top gravity=center_vertical" > 
</TextView> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="20" /> 

<TextView 
    android:layout_width="100dp" 
    android:layout_height="200dp" 

    android:layout_weight="40" 
    android:gravity="right" 
    android:text="layout_gravity=top gravity=top" > 
</TextView> 

</LinearLayout> 

Main Answer Image

Bạn werent rõ ràng về sản lượng mà bạn muốn, đây là những gì tôi có thể giải thích như đầu ra yêu cầu của bạn .. Nhưng tôi sẽ giải thích cho bạn cách hoạt động này .. Để biết thêm về trọng lượng, bạn có thể truy cập http://developer.android.com/reference/android/widget/package-summary.html

Có i được gọi là "tiện ích" và "nội dung của tiện ích con" Khi nói về linearlayout với layout_gravity, bạn đặt trọng lực của nó là "tiện ích" trong Chế độ xem chính và với trọng số bạn đặt trọng tâm cho nội dung trong đó linearlayout

Tương tự như khi nói văn bản, nếu bạn sử dụng layout_gravity (nói bằng trung tâm) thì văn bản sẽ được căn giữa trong không gian của nó (ví dụ:nó sẽ được tập trung trong chiều rộng của nó nếu layoutorientation là thẳng đứng, và nó sẽ được tập trung về chiều cao của mình nếu layout_orientation là ngang)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="horizontal"> 

<TextView 
    android:layout_width="200dp" 
    android:layout_height="200dp" 
    android:layout_gravity="center" 
    android:text="Second Activity" /> 



</LinearLayout> 

Horizontal linear_layout

Xem như nhau trong định hướng thẳng đứng

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<TextView 
    android:layout_width="200dp" 
    android:layout_height="200dp" 
    android:layout_gravity="center" 
    android:text="Second Activity" /> 

</LinearLayout> 

Vertical Linear Layout

Hiện tại, hãy xem về lực hấp dẫn khi bạn áp dụng trọng lực để TextView, các "TEXT" trong TextView tập trung (nếu trọng lực = center)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<TextView 
    android:layout_width="200dp" 
    android:layout_height="200dp" 
    android:layout_gravity="center" 
    **android:gravity="center"** 
    android:text="Second Activity" /> 

</LinearLayout> 

centerTextVertical

Bây giờ bạn có thể nhận ra rằng trọng lực đặt mức độ nghiêm trọng đến nội dung bên trong widget .. "nội dung" của một widget có thể là các widget .. LinearLayout là một widget, và trong layout tuyến tính bạn thêm các loại widget khác (nút và xem văn bản) Vì vậy, áp dụng gravity = center to textview đặt nội dung của nó (I E văn bản) tại trung tâm và áp dụng trọng lực để LinearLayout sẽ tập trung nội dung của nó (tức là TextView) tại trung tâm

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:gravity="center"> 

<TextView 
    android:layout_width="200dp" 
    android:layout_height="200dp" 
    android:layout_gravity="center" 
    android:gravity="center" 
    android:text="Second Activity" /> 

</LinearLayout> 

layout_gravity_center

Các vấn đề liên quan