2015-01-14 16 views
13

Vì vậy, tôi cảm thấy thoải mái khi sử dụng bố cục tương đối, nhưng trong khi làm quen với Android Studio, tôi nhận thấy rằng trong bố cục tương đối của con, nó tạo ra cả hai điều sau đây.Bố cục tương đối alignParentLeft vs alignParentStart

android:layout_alignParentLeft="true" 
android:layout_alignParentStart="true 

Tôi đã xem tài liệu Android here, nhưng không thể thấy sự khác biệt giữa hai tài liệu này. Chắc chắn trao đổi một cái khác trong Android Studio cho thấy không có sự khác biệt rõ ràng. Có cái nào không?

+0

Tôi không bao giờ tìm thấy bất kỳ sự khác biệt rõ ràng nào. – Rohit5k2

+2

có, thay đổi ngôn ngữ thành bất kỳ ngôn ngữ RTL nào và bạn sẽ thấy – Selvin

+0

@selvin: Ý của bạn là gì? Tôi cũng muốn biết điều này. – Rohit5k2

Trả lời

9

Tùy thuộc vào hướng bố cục. Hướng bố trí có thể là từ trái sang phải (bắt đầu = trái, cuối = phải) hoặc từ phải sang trái (ngược lại). Theo mặc định, hướng bố trí dựa trên ngôn ngữ (từ trái sang phải cho các ngôn ngữ như tiếng Anh, từ phải sang trái cho các ngôn ngữ như tiếng Ả Rập), nhưng bạn có thể ghi đè nó bằng thuộc tính layoutDirection XML hoặc setLayoutDirection chức năng . ví dụ:

android:layoutDirection="ltr" 

^sẽ làm cho alignParentStart tương đương với alignParentLeft trên tất cả các thiết bị.

android:layoutDirection="rtl" 

^sẽ làm cho alignParentStart tương đương với alignParentRight trên tất cả các thiết bị. Bạn cũng có thể đặt thành "ngôn ngữ" để sử dụng ngôn ngữ hoặc "kế thừa" để kế thừa hướng bố cục từ chế độ xem gốc.

Bạn cần thêm android:supportsRtl="true" vào tệp AndroidManifest.xml để hỗ trợ bố cục từ phải sang trái.

cũng liên quan: android:textDirection

+0

Hữu ích cho thử nghiệm mà tôi cho là vậy. –

1

Những "xxxStart", "xxxEnd" thuộc tính là hỗ trợ RTL (phải sang trái) bố trí ở một số vùng. Chẳng hạn như

android:paddingStart 
android:paddingEnd 
android:layout_marginStart 
android:layout_marginEnd 
... 

Bạn có thể thấy more here về nó.

Bố cục bình thường (từ trái sang phải), "xxxStart" có nghĩa là "xxxLeft" và "xxxEnd" có nghĩa là "xxxRight". Trong bố cục phải sang trái, "xxxStart" có nghĩa là "xxxRight" và "xxxEnd" có nghĩa là "xxxLeft ".

Nhưng RTL chỉ được hỗ trợ trên sdk 17 trở lên.

Để hỗ trợ sdk thấp hơn, bạn có thể sử dụng "android: layout_marginStart" cùng với "android: layout_marginLeft". Tại các thiết bị sdk thấp hơn, "android: layout_marginLeft" sẽ được sử dụng.

+0

Điểm tốt về hỗ trợ trên Android 17 trở lên, đó là loại thông tin hữu ích mà tôi thích. –

4
android:layout_alignParentStart="true" 

Canh lề bắt đầu mép này xem đến bắt đầu cạnh của mẹ. Đây là trái cạnh cho LTR (trái sang phải) miền địa phương và đúng một trên RTL (phải sang trái) ngôn ngữ bản địa như tiếng Ả Rập, tiếng Hebrew, Persian, vv

Lý do Android Studio cũng cho biết thêm

android:layout_alignParentLeft="true" 

với quan điểm của bạn là hỗ trợ các nền tảng cũ hơn trước phiên bản 4.2.x Jelly Bean.Các thuộc tính Bắt đầu/Kết thúc như layout_alignParentStart chỉ khả dụng từ API 17 trở đi. Các nền tảng mới hơn dự phòng thành các thuộc tính Trái/Phải chỉ khi không tìm thấy thuộc tính Bắt đầu/Kết thúc tương ứng.

Trong trường hợp này, ứng dụng của bạn hỗ trợ các nền tảng di sản bằng android:minSdkVersion dưới mực nước 17 bạn phải luôn cung cấp Trái/Phải thuộc tính cho quan điểm của bạn. Nếu không dự án sẽ không biên dịch với một thông báo lỗi như

Để hỗ trợ các phiên bản cũ hơn API 17 (dự án quy định cụ thể 7) bạn cũng nên thêm android: layout_alignParentLeft = "true"

Cũng lưu ý rằng ứng dụng Android của bạn cũng cần khai báo hỗ trợ cho các ngôn ngữ RTL trong số AndroidManifest.xml của bạn.

<application 
    ... 
    android:supportsRtl="true" 
/> 
+0

Điều này hữu ích hơn nhiều so với câu trả lời được chấp nhận. –

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