Căn lề phải trong TextView của android


215

Tôi có một TextViewtrong ứng dụng của tôi. Tôi muốn căn chỉnh văn bản trong đó bên phải. Tôi đã thử thêm:

android:gravity="right"

Nhưng điều này không làm việc cho tôi.

Tôi có thể làm gì sai?

Câu trả lời:


193

Tôi nghĩ rằng bạn đang làm điều này: android:layout_width = "wrap_content"
Nếu đây là trường hợp, hãy làm điều này:android:layout_width = "match_parent"


2
@Bishan điền sẽ lấp đầy phần còn lại của không gian, trận đấu sẽ đặt nó bằng với chiều rộng của cha mẹ
Troy Cosentino

11
Trên thực tế, fill_parent và match_parent là cùng một thứ. Tên đã được đổi thành match_parent vì rõ ràng fill_parent đã gây nhầm lẫn cho mọi người.
Edward Falk

158

Nói chung, android:gravity="right"khác với android:layout_gravity="right".

Cái đầu tiên ảnh hưởng đến vị trí của chính văn bản trong Chế độ xem, vì vậy nếu bạn muốn nó được căn phải, thì layout_width=nên "fill_parent"hoặc "match_parent".

Cái thứ hai ảnh hưởng đến vị trí của Chế độ xem bên trong cha mẹ của nó, nói cách khác - căn chỉnh chính đối tượng (hộp chỉnh sửa hoặc chế độ xem văn bản) bên trong chế độ xem chính.


83

Giải pháp tốt hơn là giải pháp đơn giản nhất và giải pháp ít sửa đổi hơn trong hành vi mã của bạn .

Điều gì nếu bạn có thể giải quyết vấn đề này chỉ với 2 Thuộc tính trên TextView?

Thay vì cần thay đổi LinearLayoutThuộc tính của bạn mà có thể thay đổi hành vi của LinearLayouttrẻ em?

Sử dụng cách này, bạn không cần thay đổi LinearLayoutthuộc tính và hành vi, bạn chỉ cần thêm hai thuộc tính sau vào mục tiêu của mình TextView:

android:gravity="right"
android:textAlignment="gravity"

Điều gì sẽ tốt hơn để chỉ thay đổi mục tiêu của bạn để giải quyết giải pháp của bạn thay vì có cơ hội gây ra một vấn đề khác trong tương lai, sửa đổi cha mục tiêu của bạn? nghĩ về nó :)


Tôi gặp lỗi khi không tìm thấy mã định danh tài nguyên cho tài nguyên 'textAlocate' trong gói android.
anu

Bạn có chắc chắn rằng bạn đang nhận được một TextViewtài sản? - Bạn có thể kiểm tra tài sản từ tài liệu tham khảo tại đây: developer.android.com/reference/android/view/iêu
Paulo Roberto Rosa

4
textAlocation đã được thêm vào trong API cấp 17 (Android 4.2). Trình giả lập / thiết bị của bạn sẽ cần phải chạy 4.2+ để hoạt động này.
thanhtd

Tôi đã thử sử dụng thuộc tính textAlocation này trong Android 4.1.2 và gặp lỗi "Không tìm thấy định danh tài nguyên cho thuộc tính 'textAlocate'". Tôi đã tìm thấy câu trả lời cho lỗi này tại đây stackoverflow.com/a/20176191/723507 . Làm thế nào bạn có thể sử dụng nó trong 4.0.3?
thanhtd

20

android:layout_gravityđược sử dụng để căn chỉnh chế độ xem văn bản theo bố cục cha. android:gravityđược sử dụng để căn chỉnh văn bản bên trong chế độ xem văn bản.

Bạn có chắc chắn rằng bạn đang cố gắng căn chỉnh văn bản bên trong chế độ xem văn bản sang bên phải hay bạn muốn di chuyển chế độ xem văn bản sang bên phải đối với bố cục cha mẹ hay bạn đang cố gắng đạt được cả hai


Tôi đang cố gắng căn chỉnh văn bản bên trong chế độ xem văn bản sang phải
Bishan

11

Đoạn mã sau:

android:textAlignment="textEnd"
android:layout_gravity="end"

làm việc tuyệt vời cho tôi


11

Trong trường hợp ai đó vẫn cần

android:gravity="end"

cái đó để làm gì
gumuruh

Trong LTR, điều này sẽ căn chỉnh văn bản sang phải và trong RTL, bên trái
npk

8

Hãy chắc chắn rằng bạn không sử dụng android:layout_width="wrap_content"nếu vậy thì nó sẽ không thể đặt trọng lực vì bạn không có đủ không gian để văn bản căn chỉnh. Thay vào đó hãy sử dụngandroid:layout_width="fill_parent"


7
android:gravity="right"

Về cơ bản, nó được sử dụng trong Bố cục tuyến tính, do đó bạn phải đặt chiều rộng của TextView hoặc EditText là

android:layout_width = "match_parent"

Khi bạn đang làm việc trong Bố cục tương đối, hãy sử dụng

android:layout_alignParentRight="true"


5

Nếu nó ở trong RelativeLayoutbạn có thể sử dụngandroid:layout_toRightOf="@id/<id_of_desired_item>"

Hoặc là

Nếu bạn muốn căn chỉnh vào rightgóc của thiết bịandroid:layout_alignParentRight="true"


4

Hãy để tôi giải thích khái niệm trọng lực bằng cách sử dụng WEB bởi vì rất nhiều nhà phát triển nhận thức được nó.

android_layout_gravity cư xử float:left|right|top|bottom

Trong khi đó android_gravitylàm việc nhưtext_align:centre|left|right

Trong Android float là android_layout_gravity và text_align: là android_gravity.

Và android_layout_gravity áp dụng liên quan đến cha mẹ. trong đó như android_gravity áp dụng cho nội dung con hoặc bên trong của nó.

Lưu ý android_gravity chỉ hoạt động khi Chế độ xem của nó là match_parent (khi nó có không gian ở giữa).


3

Dưới đây làm việc cho tôi:

<TextView
    android:id="@+id/tv_username"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Sarah" />

<TextView
    android:id="@+id/tv_distance"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/tv_username"
    android:layout_alignParentEnd="true"
    android:layout_toEndOf="@+id/tv_username"
    android:text="San Marco"
    android:textAlignment="viewEnd" />

Vui lòng lưu ý android:layout_alignParentEndandroid:textAlignmentcài đặt của TextView thứ hai.


2

Bạn có thể dùng:

    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"

2

điều này sẽ phục vụ mục đích

android:textAlignment="textStart"


2

Trong trường hợp của tôi, tôi đã sử dụng Relative Layoutcho mộtemptyString

Sau khi vật lộn về điều này trong một giờ. Chỉ điều này làm việc cho tôi:

android:layout_toRightOf="@id/welcome"
android:layout_toEndOf="@id/welcome"
android:layout_alignBaseline="@id/welcome"

layout_toRightOfhoặc layout_toEndOfcả hai hoạt động, nhưng để hỗ trợ nó tốt hơn, tôi đã sử dụng cả hai.

Để làm cho nó rõ ràng hơn:

Đây là những gì tôi đã cố gắng làm:

nhập mô tả hình ảnh ở đây

Và đây là đầu ra của trình giả lập

nhập mô tả hình ảnh ở đây

Bố trí:

<TextView
    android:id="@+id/welcome"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="16dp"
    android:layout_marginTop="16dp"
    android:text="Welcome "
    android:textSize="16sp" />
<TextView
    android:id="@+id/username"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@id/welcome"
    android:layout_toRightOf="@id/welcome"
    android:text="@string/emptyString"
    android:textSize="16sp" />

Thông báo rằng:

  1. android:layout_width="wrap_content" làm
  2. Gravity Không được sử dụng

1

Tôi cũng gặp phải vấn đề tương tự và nhận ra vấn đề đang xảy ra khi layout_ thong của TextView đang có quấn_content. Bạn cần phải có layout_creen là match_parent và android: vity = "vity"


1
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent">

  <TextView
    android:id="@+id/tct_postpone_hour"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:layout_gravity="center"
    android:gravity="center_vertical|center_horizontal"
    android:text="1"
    android:textSize="24dp" />
</RelativeLayout>

làm cho số một thẳng hàng ở trung tâm cả ngang và dọc.



0

Tôi đã sử dụng thuộc tính "layout_alignRight" trong trường hợp của mình, trong văn bản của nó:

android:layout_alignRight="@+id/myComponentId"

Nếu bạn muốn thêm một số lề phải, chỉ cần đặt thuộc tính "Layout_Margin Right" thành "20dp" cho ví dụ, trong văn bản của nó:

android:layout_marginRight="20dp"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.