2015-10-12 42 views
12

Tôi đã cố gắng sử dụng layout_gravity theo chiều ngang linear layout. Nhưng nó dường như không hoạt động. Tôi không muốn sử dụng relative layout hoặc bất kỳ bố cục nào khác. Tôi muốn biết tại sao nó không hoạt động với linear layout. Tôi đã sử dụng trước đây layout_gravity trong bố cục tuyến tính vertical và nó đã hoạt động theo cách tôi mong đợi.layout_gravity không hoạt động trong bố cục tuyến tính ngang

<LinearLayout 
    android:id="@+id/shata" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    > 
    <TextView 
     android:id="@+id/title_textview" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:textColor="@color/black" 
     android:text="shata1" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     /> 
    <TextView 
     android:id="@+id/map_imageview" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="right" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="shata2"/>  
</LinearLayout> 

Như bạn có thể thấy cách bố trí các tuyến tính có một orientation=horizontalwidth=match_parent (nó chỉ là bên trong bố trí root). Nhưng cả hai TextViews được hiển thị gắn bó với bên trái của LinearLayout mặc dù tôi đã cho tương ứng của chúng layout_gravity=centerlayout_gravity=right.

+0

Nó sẽ không hoạt động vì bố cục của Textview bị ràng buộc với 'wrap_content' không' match_parent' – ImMathan

+0

Bố cục tuyến tính không hoạt động mà bạn muốn. Bạn nên sử dụng bố cục tương đối. Tại sao bạn không muốn sử dụng bố cục tương đối? – wisemann

+1

layout_gravity trong LinearLayout chỉ có thể thay đổi vị trí đối tượng vuông góc với hướng. Nếu hướng nằm ngang, bạn có thể chỉ định trên cùng và dưới cùng, không phải trái và phải. –

Trả lời

25

Câu trả lời ngắn: Nếu bạn có LinearLayout ngang, thì mỗi trẻ chỉ có thể có giá trị layout_gravity của top, bottomcenter.

Lý do là vì bạn đã nói với LinearLayout để căn chỉnh từng con theo chiều ngang, từ trái sang phải theo thứ tự bạn chỉ định, điều đó có nghĩa là nó chỉ cho phép bạn xác định căn chỉnh theo chiều dọc của mỗi trẻ trong Tham số layout_gravity và ngược lại áp dụng khi số LinearLayout của bạn là dọc.

Có liên kết tốt giải thích cách hoạt động của các trọng lượng khác nhau here.

+0

Ngay cả lúc đầu tôi cũng nghĩ thế. Nhưng theo logic đó, LinearLayout dọc sẽ chỉ lấy giá trị của trái, phải và trung tâm. Nhưng bố cục dọc cũng phản ứng với đáy thuộc tính. – Ashwin

+1

Tôi muốn được xem một ví dụ trong đó dọc phản hồi với 'bottom', bởi vì theo như sự hiểu biết của tôi, nó không nên, và nó có thể chỉ là một vật phẩm của trọng số được gán cho những đứa trẻ khác. –

0

bạn có thể chia bố cục thành 3 phần sau đó ở phần bên phải đặt "shata2" ở phần giữa đặt "shata1" và phần bên trái đặt chế độ xem trong suốt.

<LinearLayout 
    android:id="@+id/shata" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 

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

    <TextView 
     android:id="@+id/title_textview" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center|top" 
     android:layout_weight="1" 
     android:text="shata1" 
     android:gravity="center" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="#111" /> 

    <TextView 
     android:id="@+id/map_imageview" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:layout_gravity="right" 
     android:gravity="right" 
     android:text="shata2" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 



</LinearLayout> 

nhưng trong mã khi bạn sử dụng bố cục tuyến tính, nó chỉ đặt chế độ xem một lần khác và không quan tâm đến bố cục bố cục. hy vọng nó hữu ích.

2

Nếu bạn muốn con bạn được canh giữa thì bạn chỉ cần đặt trọng tâm bố trí tuyến tính cho trẻ em. Trên bố cục tuyến tính của bạn, hãy đặt như sau:

android:gravity="center" 

Tôi hy vọng tôi có câu hỏi đúng của bạn.

0
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="horizontal"> 
<TextView 
    style="@style/Base.TextAppearance.AppCompat.Headline" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Blankets &amp; Carpets" /> 

<ListView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/list_home_feature" 
    android:layout_marginLeft="10dp" 
    android:layout_marginTop="30dp" 
    android:layout_marginRight="10dp"> 

</ListView> 

</LinearLayout> 
2

Như một sự bổ sung để Matt Taylor's response, bạn có thể xác định tỷ lệ kích thước của các yếu tố bên trong bố trí sử dụng layout_weight tài sản. Xem chi tiết thread để biết thêm chi tiết.

Đoạn mã trên sẽ chia không gian ngang trong ba khu vực bằng nhau.

<LinearLayout 
    android:id="@+id/shata" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 
    <TextView 
     android:layout_width="0" 
     android:layout_height="match_parent" 
     android:layout_weight="1"/> 
    <TextView 
     android:layout_width="0" 
     android:layout_height="match_parent" 
     android:layout_weight="1"/> 
    <TextView 
     android:layout_width="0" 
     android:layout_height="match_parent" 
     android:layout_weight="1"/>  
</LinearLayout> 

Vì vậy, trong ví dụ này

  • phần tử đầu tiên trông giống như layout_gravity="left"
  • phần tử thứ hai trông giống như layout_gravity="center"
  • yếu tố thứ ba trông giống như layout_gravity="right"
+0

Thomas, layout_weight của TextView dưới cùng của bạn thiếu dấu ngoặc kép đóng (sau 1). Chỉ là fyi. – Alyoshak

0

Một cách cho tạo ra ba đứa trẻ trong woul linearlayout nằm ngang d được (thử nghiệm):

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

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

     <TextView 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:layout_gravity="center_horizontal" 
      android:layout_height="wrap_content"/> 

      <TextView 
       android:layout_weight="1" 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:text="" /> 
Các vấn đề liên quan