Cách đặt android: lực hấp dẫn thành TextView từ phía Java trong Android


218

Tôi có thể sử dụng android:gravity="bottom|center_horizontal"trong xml trên chế độ xem văn bản để có kết quả mong muốn, nhưng tôi cần thực hiện việc này theo chương trình. Xem văn bản của tôi là trong một tablerownếu điều đó quan trọng trong một relativelayout.

Tôi đã thử:

LayoutParams layoutParams = new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);
labelTV.setLayoutParams(layoutParams);

Nhưng nếu tôi hiểu chính xác, điều đó sẽ áp dụng nó cho tablerow, chứ không phải là textview?

Câu trả lời:


522
labelTV.setGravity(Gravity.CENTER | Gravity.BOTTOM);

Phiên bản Kotlin (cảm ơn Mẹ)

labelTV.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM

Ngoài ra, bạn đang nói về trọng lực hay về layout_gravity? Cái sau sẽ không hoạt động trong RelativeLayout .


Cảm ơn đã làm việc. Tôi cảm thấy một chút ngớ ngẩn bây giờ vì đã bỏ lỡ điều đó. Ban đầu vấn đề là đặt lề trên một trường văn bản. Tôi đoán tôi đã giả sử vì tôi không thể tìm thấy phương thức setMargin () mà setGravity cũng sẽ không tồn tại.
Nate

7
Cảm ơn +1, tôi đã tìm thấy tài liệu này, nhưng như thường lệ, nó chỉ đi được một nửa, không nói rõ tôi lấy hằng số trọng lực từ đâu (Gravity.CENTER, v.v.).
Hein du Plessis

1
Đối với bất kỳ ai đến từ Google, như tôi, cách của Kotlin là:it.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM
Mẹ ơi

Đối với tôi cách kotlin thật khó hiểu, tại sao lại như vậy orvà không and?! ??!
ZooMagic

38

Điều này sẽ căn giữa văn bản trong chế độ xem văn bản:

TextView ta = (TextView) findViewById(R.layout.text_view);
LayoutParams lp = new LayoutParams();
lp.gravity = Gravity.CENTER_HORIZONTAL;
ta.setLayoutParams(lp);

5
Điều đó đã không làm việc. "lp.gravity không thể được giải quyết hoặc không phải là một trường"
Nate

Đó là lạ bởi vì mã này hoạt động và biên dịch tốt cho tôi. Làm thế nào bạn có thể đặt trọng số của một textview vì chúng không phải là phương thức setweight ()?
tần số vô tuyến

4
Tôi tìm thấy vấn đề. Nate đang nhập android.view.Viewgroup. Lớp đó có các loại phương thức khác nhau và không biên dịch. Bạn nên nhập android.view.WindowManager thay thế.
Finnboy11

Nên nhập android.widget.LinearLayout.LayoutParams tốt hơn khi chế độ xem văn bản nằm trong bố cục tuyến tính. Othervise bạn nhận được ClassCastException
TOMM

Cảm ơn, nó hoạt động. Nhưng nó không phải là một giải pháp hoàn chỉnh vì một loại LayoutParamskhông được xác định ở đây và có thể thay đổi, vì vậy nó sẽ không được biên dịch. Bạn nên biết một bố trí cha mẹ (ví dụ, LinearLayout) và viết nó ở đây.
CoolMind

7

Chúng ta có thể đặt trọng lực bố trí trên bất kỳ chế độ xem nào như dưới đây

myView = findViewById(R.id.myView);
myView.setGravity(Gravity.CENTER_VERTICAL|Gravity.RIGHT);
 or
myView.setGravity(Gravity.BOTTOM);

Điều này tương đương với mã xml dưới đây

<...
 android:gravity="center_vertical|right"
 ...
 .../>

Trọng lực bố trí không giống như trọng lực
Zvonimir Peran

3

Bạn nên sử dụng textView.setGravity(Gravity.CENTER_HORIZONTAL);.

Hãy nhớ rằng sử dụng

LinearLayout.LayoutParams layoutParams =new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
layoutParams2.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;

sẽ không làm việc Điều này sẽ đặt trọng lực cho widget chứ không phải cho văn bản của nó.


2

Sử dụng mã này

        TextView textView = new TextView(YourActivity.this);
        textView.setGravity(Gravity.CENTER | Gravity.TOP);
        textView.setText("some text");

2
textView.setGravity(Gravity.CENTER | Gravity.BOTTOM);

Điều này sẽ thiết lập trọng lực của văn bản của bạn.


0

Giải quyết điều này bằng cách làm một vài điều, trước tiên hãy lấy heightcủa tôi TextViewvà lặn nó bằng văn bản sizeđể có được tổng số dòng có thể với TextView.

int maxLines = (int) TextView.getHeight() / (int) TextView.getTextSize();

Sau khi bạn nhận được giá trị này, bạn cần đặt TextView maxLinesgiá trị mới này.

TextView.setMaxLines(maxLines);

Đặt Gravitythành Bottommột khi số lượng dòng tối đa đã bị vượt quá và nó sẽ tự động cuộn xuống.

if (TextView.getLineCount() >= maxLines) {
    TextView.setGravity(Gravity.BOTTOM);
}

Để cho tiện làm việc một cách chính xác, bạn phải sử dụng append()đến TextView, Nếu bạn setText()điều này sẽ không làm việc.

TextView.append("Your Text");

Lợi ích của phương pháp này là nó có thể được sử dụng một cách linh hoạt bất kể nội dung heightcủa bạn TextViewvà văn bản size. Nếu bạn quyết định sửa đổi bố cục của mình, mã này sẽ vẫn hoạt động.

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.