Câu hỏi Sự khác biệt giữa trọng lực và layout_gravity trên Android


Tôi biết chúng tôi có thể đặt các giá trị sau cho android:gravity và android:layout_gravity tính chất:

  1. center
  2. center_vertical
  3. center_horizontal, v.v.

Nhưng tôi bối rối về cả hai.

Sự khác biệt giữa việc sử dụng android:gravity và android:layout_gravity?


1149
2017-08-14 09:28


gốc


Bí quyết dễ nhớ: Hãy "bố cục trọng lực" là "Nằm ngoài trọng lực" - Vishnu Haridas
center == center_vertical | center_horizontal - Yousha Aleayoub
Những video này đã giúp tôi rất nhiều để hiểu sự khác biệt: youtube.com/watch?v=DxfYeAUd238  youtube.com/watch?v=1FyAIWLVcTc - Roni Castro
ImageViewdường như cư xử khác với TextView'S. - samsara


Các câu trả lời:


Tên của họ sẽ giúp bạn:

  • android:gravity đặt trọng lực của nội dung (nghĩa là các bản xem trước) của View nó được sử dụng trên.
  • android:layout_gravity đặt trọng lực của View hoặc là Layout liên quan đến cha mẹ của nó.

Và một ví dụ là đây.


1197
2017-08-14 09:31



bên trong bên ngoài :) cảm ơn sephy - Ben Sewards
Về cơ bản, mọi thứ với layout_ xác định một cái gì đó mà tác động các yếu tố bên ngoài. - Triang3l
Thấy không, tôi thấy điều này thật buồn cười, bởi vì nếu tôi chỉ cần tắt tên, trực giác của tôi là một cách khác. Mỗi lần, tôi nghĩ rằng "layout_gravity" có nghĩa là "trọng lực cho cách ViewGroup này đưa ra nội dung của nó", và "gravity" là "nơi View này hấp dẫn". - Ogre
Vậy điều gì sẽ xảy ra nếu android:gravity được đặt ở bên trái và con của nó android:layout_gravity được đặt sang phải không? bên nào sẽ các trẻ em sắp xếp? - Thupten
Như @Suragch đã nhận xét về câu trả lời của mình, layout_gravity chỉ hoạt động trong LinearLayout và FrameLayout. LinearLayout có những ràng buộc với nó mặc dù. - Marco Luglio


Sự khác biệt

android:layout_gravity là Ở ngoài trọng lực của View. Chỉ định hướng mà Chế độ xem sẽ chạm vào đường viền của bố mẹ.

android:gravity là Phía trong trọng lực của Chế độ xem đó. Chỉ định theo hướng nào nội dung của nó sẽ căn chỉnh.

HTML / CSS tương đương

Android                 | CSS
————————————————————————+————————————
android:layout_gravity  | float
android:gravity         | text-align

Thủ thuật dễ dàng giúp bạn nhớ

Lấy layout-gravity như "Lay-bên ngoài trọng lực".


446
2017-07-25 17:07





Bên trong bên ngoài

  • gravity sắp xếp nội dung phía trong chế độ xem.
  • layngoài_gravity sắp xếp vị trí của chế độ xem ở ngoài Của chính nó.

Đôi khi nó cũng giúp bạn nhìn thấy một bức tranh. Màu xanh lá cây và màu xanh là TextViews và hai màu nền khác là LinearLayouts.

enter image description here

Ghi chú

  • Các layout_gravity không hoạt động cho các lượt xem trong RelativeLayout. Sử dụng nó cho các lượt xem trong một LinearLayout hoặc là FrameLayout. Xem của tôi câu trả lời bổ sung để biết thêm chi tiết.
  • Chiều rộng (hoặc chiều cao) của khung nhìn phải lớn hơn nội dung của khung nhìn. Nếu không thì gravity sẽ không có hiệu lực. Như vậy, wrap_content và gravity vô nghĩa với nhau.
  • Chiều rộng (hoặc chiều cao) của khung nhìn phải nhỏ hơn giá trị gốc. Nếu không thì layout_gravity sẽ không có hiệu lực. Như vậy, match_parent và layout_gravity vô nghĩa với nhau.
  • Các layout_gravity=center trông giống như layout_gravity=center_horizontal ở đây vì chúng nằm trong bố cục tuyến tính thẳng đứng. Bạn không thể tập trung theo chiều dọc trong trường hợp này, vì vậy layout_gravity=center chỉ trung tâm theo chiều ngang.
  • Câu trả lời này chỉ được xử lý với cài đặt gravity và layout_gravity trên các chế độ xem trong bố cục. Để xem điều gì xảy ra khi bạn đặt gravity của bố cục chính, hãy xem câu trả lời bổ sung mà tôi đã đề cập ở trên. (Tóm lược: gravity không hoạt động tốt trên RelativeLayout nhưng có thể hữu ích với LinearLayout.)

Hãy nhớ, bố trí_gravity sắp xếp một cái nhìn trong bố trí. Gravity sắp xếp nội dung bên trong khung nhìn. 

xml

Dưới đây là xml cho hình ảnh trên để bạn tham khảo:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#e3e2ad"
        android:orientation="vertical" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textSize="24sp"
            android:text="gravity=" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#bcf5b1"
            android:gravity="left"
            android:text="left" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#aacaff"
            android:gravity="center_horizontal"
            android:text="center_horizontal" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#bcf5b1"
            android:gravity="right"
            android:text="right" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#aacaff"
            android:gravity="center"
            android:text="center" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#d6c6cd"
        android:orientation="vertical" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textSize="24sp"
            android:text="layout_gravity=" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="left"
            android:background="#bcf5b1"
            android:text="left" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="center_horizontal"
            android:background="#aacaff"
            android:text="center_horizontal" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="right"
            android:background="#bcf5b1"
            android:text="right" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="center"
            android:background="#aacaff"
            android:text="center" />

    </LinearLayout>

</LinearLayout>

Liên quan


433
2017-10-04 05:43





Trả lời ngắn gọn: sử dụng android:gravity hoặc là setGravity() để kiểm soát lực hấp dẫn của tất cả các chế độ xem con của một vùng chứa; sử dụng android:layout_gravity hoặc là setLayoutParams() để kiểm soát trọng lực của một chế độ xem riêng lẻ trong một vùng chứa.

Câu chuyện dài: để kiểm soát trọng lực trong một container bố trí tuyến tính như LinearLayout hoặc là RadioGroup, có hai cách tiếp cận:

1) Để kiểm soát trọng lực của tất cả các lượt xem con của một LinearLayout container (như bạn đã làm trong cuốn sách của bạn), sử dụng android:gravity (không phải android:layout_gravity) trong tệp XML bố cục hoặc setGravity() phương pháp trong mã.

2) Để kiểm soát trọng lực của chế độ xem con trong vùng chứa, hãy sử dụng android:layout_gravity Thuộc tính XML. Trong mã, người ta cần lấy LinearLayout.LayoutParams của khung cảnh và đặt trọng lực của nó. Dưới đây là ví dụ về mã đặt nút ở dưới cùng trong vùng chứa theo chiều ngang:

import android.widget.LinearLayout.LayoutParams;
import android.view.Gravity;
...

Button button = (Button) findViewById(R.id.MyButtonId);
// need to cast to LinearLayout.LayoutParams to access the gravity field
LayoutParams params = (LayoutParams)button.getLayoutParams(); 
params.gravity = Gravity.BOTTOM;
button.setLayoutParams(params);

Cho ngang LinearLayout thùng chứa, trọng lực ngang của chế độ xem con của nó được canh trái theo hướng khác và không thể thay đổi. Cài đặt android:layout_gravity đến center_horizontal không có hiệu lực. Lực hấp dẫn dọc mặc định là trung tâm (hoặc center_vertical) và có thể được thay đổi thành trên cùng hoặc dưới cùng. Trên thực tế, mặc định layout_gravity giá trị là -1 nhưng Android đặt trung tâm theo chiều dọc.

Để thay đổi vị trí nằm ngang của chế độ xem con trong vùng chứa tuyến tính ngang, người ta có thể sử dụng layout_weight, lề và đệm của chế độ xem con.

Tương tự, đối với vùng chứa Nhóm Chế độ xem theo chiều dọc, trọng lực theo chiều dọc của chế độ xem con của nó được căn chỉnh trên cùng bên dưới và không thể thay đổi. Lực hấp dẫn ngang mặc định là trung tâm (hoặc center_horizontal) và có thể được thay đổi sang trái hoặc phải.

Trên thực tế, chế độ xem con như nút cũng có android:gravity Thuộc tính XML và setGravity() để kiểm soát chế độ xem con của nó - văn bản trong đó. Các Button.setGravity(int) được liên kết với điều này mục developer.android.com.


35
2017-07-30 20:01





Từ những gì tôi có thể thu thập layout_gravity là trọng lực của chế độ xem đó bên trong bố cục của nó và nghiêm trọng là trọng lực của trẻ em bên trong quan điểm đó.

Tôi nghĩ điều này đúng nhưng cách tốt nhất để tìm ra là chơi xung quanh.


32
2017-08-14 09:37





Nhìn vào hình ảnh rõ ràng về lực hấp dẫn


23
2018-02-04 07:17





Mặc dù câu hỏi đã được trả lời Tôi có một số mẫu chứng minh việc sử dụng trọng lực, layout_gravity và layout_weight.

Bạn có thể tìm thấy các ví dụ tại http://juanpickselov.com/LayoutExamples.zip 

Tôi đã tạo các tệp trong Eclipse, đã xóa các thư mục con .svn và đã bao gồm các kiểu, chuỗi, màu sắc, vv Các tệp bố cục là điểm chính của bản trình diễn. Vì tôi là một người phát triển Java và Android Newbie, người ta có thể thấy Java không hiệu quả. Các tập tin có thể được sao chép vào một dự án Eclipse hoặc tôi cũng đã sử dụng chúng trong Netbeans với các plugin phát triển Android có sẵn cho IDE đó.


10
2017-11-23 05:43



Bằng cách nào đó, hai năm rưỡi sau đó, liên kết ví dụ dẫn đến 404. - Tony Adams


Nếu chúng ta muốn đặt trọng lực của nội dung bên trong một khung nhìn thì chúng ta sẽ sử dụng "android: gravity", và nếu chúng ta muốn đặt trọng lực của view này (nhìn chung) trong view cha thì ta sẽ sử dụng "android: layout_gravity ".


9
2018-04-09 21:21