Văn bản TextView căn giữa theo chương trình


86

Tôi cầu xin một số sự khoan hồng ở đây, tôi chỉ mới bắt đầu với các hướng dẫn Android SDK và tôi đang cố gắng thực hiện một điều gì đó thú vị không có trong hướng dẫn, nhưng tôi hy vọng sẽ dễ dàng.

Tôi đang cố gắng căn giữa một TextViewmục thông qua mã theo chiều ngang và chiều dọc (tôi có thể làm điều đó bằng XML tốt). Tôi đã xem một số ví dụ về cách thực hiện điều này khi phụ huynh là một bảng hoặc một số đối tượng khác, nhưng tôi hy vọng điều này sẽ dễ dàng hơn cho tôi. (ps Hãy sửa lại thuật ngữ của tôi).

Đây là mã ví dụ từ hướng dẫn / mô hình làm việc của tôi:

package com.example.myfirstapp;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.ViewGroup.LayoutParams;
import android.widget.TextView;


public class DisplayMessageActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent intent = getIntent();
        String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

        TextView textView = new TextView(this);
        textView.setTextSize(40);
        textView.setText(message);
        textView.setGravity(View.TEXT_ALIGNMENT_GRAVITY);

        setContentView(textView);
    }
}

Tôi đã quản lý để xác định vị trí của setGravityphương thức và tôi đã cố gắng tìm setLayoutParamskiếm nó, nhưng tôi không chắc phạm vi của nó là gì vì tôi không thể xác định được những gì tôi nên nhập để có được WRAP_CONTENThằng số để giải quyết . Theo những gì tôi hiểu, căn giữa và nội dung_wrapping + trọng lực là hai thứ riêng biệt. Tôi muốn một ví dụ về cách thực hiện cả hai trong trường hợp này và có thể bằng cách nào / ở đâu tôi sẽ tìm thấy câu trả lời trong tài liệu API?


tại sao lại lấy textview làm bố cục gốc?
Kalpesh Lakhani

OK Hãy thử lại vì tôi không thể tìm thấy nút xóa hoặc chỉnh sửa ở đây. TÔI NGHĨ vùng chứa chính là một bố cục tương đối vì nó đang sử dụng (tôi nghĩ) my activity_display_message.xml Nguồn của hướng dẫn này là một bản copy / paste-ish một chút nhưng nó nằm ở: bit.ly/VDh9yS <RelativeLayout xmlns: android = " schemas.android.com/apk/res/android " xmlns: tools = " schemas.android.com/tools " android: layout_width = "match_parent" android: layout_height = "match_parent" tools: context = ". DisplayMessageActivity"> < / RelativeLayout>
Alex Summers

xem câu trả lời thay đổi nội dung của tôi nó có thể giúp bạn .. :)
Kalpesh Lakhani

Câu trả lời:


246
yourTextView.setGravity(Gravity.CENTER);

Hoàn hảo, ngắn và ngọt ngào! Làm việc như một sự quyến rũ! Tôi cũng thấy rằng có các thuộc tính CENTER_HORIZONTAL và CENTER_VERTICAL. Cảm ơn Steve!
Alex Summers

2
Xin lưu ý rằng điều này chỉ hoạt động nếu android:textAlignment="gravity"thuộc tính được đặt thành trọng lực. Nếu không, textAlignment sẽ ghi đè.
velis

1
để thiết lập textAlignment theo chương trình; yourTextView.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY);
Yusril Maulidan Raji

25

Đối với tâm động

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);

Phiên bản bị hỏng của textView.setGravity (Gravity.CENTER) ;, cũng là một câu trả lời hiệu quả và tuyệt vời. Xin cảm ơn Nirav!
Alex Summers

Ước gì tôi có thể, tôi là người mới và không đủ đại diện để bình chọn nó. Tôi sẽ cung cấp cho Hari nguyên nhân kiểm tra tốt, CẢ câu trả lời của bạn là đúng và người nghèo có thể sử dụng đại diện nhiều hơn;) điều đó không ngoại trừ thực tế là câu trả lời của bạn cũng hữu ích như nhau. (Nếu tôi có cơ hội khi đại diện của tôi đi lên, ốm hãy chắc chắn Answer cả hai bạn!)
Alex Summers

5
TextView text = new TextView(this);

text.setGravity(Gravity.CENTER);

text.setGravity(Gravity.TOP);

text.setGravity(Gravity.BOTTOM);

text.setGravity(Gravity.LEFT);

text.setGravity(Gravity.RIGHT);

text.setGravity(Gravity.CENTER_VERTICAL);

text.setGravity(Gravity.CENTER_HORIZONTAL);

Và nhiều hơn nữa có sẵn


5

điều này chắc chắn sẽ hoạt động ..

RelativeLayout layout = new RelativeLayout(R.layout.your_layour); 
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
params.addRule(LinearLayout.CENTER_IN_PARENT);
textView.setLayoutParams(params);
textView.setGravity(Gravity.CENTER);

layout.addView(textView);

setcontentView(layout);

2
LinearLayout dường như không có thuộc tính CENTER_IN_PARENT khi được kế thừa từ android.widget.LinearLayout; Tui bỏ lỡ điều gì vậy?
Alex Summers

2

Hãy thử thêm mã sau để áp dụng các tham số bố cục cho TextView

LayoutParams lp = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
lp.addRule(LinearLayout.CENTER_IN_PARENT);
textView.setLayoutParams(lp);

4
LinearLayout dường như không có thuộc tính CENTER_IN_PARENT.
Alex Summers

2

nếu kích thước văn bản của bạn nhỏ, bạn nên đặt chiều rộng của dạng xem văn bản là "fill_parent". Sau đó, bạn có thể đặt TextView Gravity của mình ở giữa:

TextView textView = new TextView(this);
textView.setText(message);
textView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
textView.setGravity(Gravity.CENTER);

1

Bạn có thể sử dụng những điều sau để căn giữa TextViewvăn bản theo chương trình trong Kotlin:

textview.gravity = Gravity.CENTER

1

thử phương pháp này

  public void centerTextView(LinearLayout linearLayout) {
    TextView textView = new TextView(context);
    textView.setText(context.getString(R.string.no_records));
    textView.setTypeface(Typeface.DEFAULT_BOLD);
    textView.setGravity(Gravity.CENTER);
    textView.setTextSize(18.0f);
    textView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
    linearLayout.addView(textView);
}

0

Hai điều này cần phải đi cùng nhau để nó hoạt động. Đã vò đầu bứt tai một lúc.

numberView.textAlignment = View.TEXT_ALIGNMENT_CENTER
 numberView.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT)
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.