Pusatkan teks TextView secara terprogram

87

Saya mohon kelonggaran di sini, saya baru memulai dengan tutorial Android SDK dan saya mencoba sesuatu yang tidak menarik yang tidak ada dalam tutorial itu sendiri, tapi saya harap itu mudah.

Saya mencoba untuk memusatkan TextViewitem melalui kode secara horizontal dan vertikal (saya bisa melakukannya dalam XML dengan baik). Saya telah melihat beberapa contoh bagaimana melakukan ini ketika induknya adalah tabel atau objek lain, tapi saya harap ini akan lebih mudah untuk saya pahami. (ps Jangan ragu untuk mengoreksi terminologi saya).

Berikut adalah contoh kode dari tutorial / model kerja saya:

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);
    }
}

Saya telah berhasil menemukan setGravitymetode tersebut, dan saya telah mencoba mencoba-coba setLayoutParamsuntuk itu, tetapi saya tidak yakin apa cakupannya karena saya tidak dapat menemukan apa yang harus saya impor untuk mendapatkan WRAP_CONTENTkonstanta untuk diselesaikan . Dari apa yang saya pahami, pemusatan dan content_wrapping + gravitasi adalah dua hal yang terpisah. Saya ingin contoh bagaimana melakukan keduanya dalam kasus ini dan mungkin bagaimana / di mana saya bisa menemukan jawabannya dalam dokumentasi API?

Alex Summers
sumber
mengapa menggunakan textview sebagai tata letak root?
Kalpesh Lakhani
OK Mari kita coba lagi karena saya tidak dapat menemukan tombol hapus atau edit di sini. SAYA BERPIKIR wadah utama adalah tata letak relatif karena menggunakan (menurut saya) activity_display_message.xml Sumber tutorial ini sedikit salin / tempel-ish tetapi terletak di: 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
lihat jawaban saya yang telah diedit ini mungkin membantu Anda .. :)
Kalpesh Lakhani

Jawaban:

249
yourTextView.setGravity(Gravity.CENTER);
Syn3sthete
sumber
Sempurna, pendek, dan manis! Bekerja seperti pesona! Saya juga melihat bahwa ada properti CENTER_HORIZONTAL dan CENTER_VERTICAL. Terima kasih Steve!
Alex Summers
2
Harap dicatat bahwa ini hanya berfungsi jika android:textAlignment="gravity"atribut disetel ke gravitasi. Jika tidak, textAlignment akan menimpa.
velis
1
untuk menyetel textAlignment secara terprogram; yourTextView.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY);
Yusril Maulidan Raji
25

Untuk pusat secara dinamis

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
Nirav Ranpara
sumber
Versi rusak textView.setGravity (Gravity.CENTER) ;, juga merupakan jawaban yang bekerja dan luar biasa. Terima kasih Nirav!
Alex Summers
Seandainya saya bisa, saya baru dan tidak cukup perwakilan untuk memilihnya. Saya akan memberi Hari pemeriksaan penyebabnya dengan baik, KEDUA jawaban Anda tepat dan orang miskin dapat menggunakan rep lebih banyak;) yang tidak mengurangi fakta bahwa jawaban Anda sama membantu. (Jika saya mendapat kesempatan ketika perwakilan saya naik, saya akan pastikan untuk memilih kalian berdua!)
Alex Summers
6

ini pasti akan berhasil ..

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);
Kalpesh Lakhani
sumber
2
LinearLayout tampaknya tidak memiliki properti CENTER_IN_PARENT saat diwarisi dari android.widget.LinearLayout; Apakah saya melewatkan sesuatu?
Alex Summers
5
TextView text = new TextView(this);

text.setGravity(Gravity.CENTER);

dan

text.setGravity(Gravity.TOP);

dan

text.setGravity(Gravity.BOTTOM);

dan

text.setGravity(Gravity.LEFT);

dan

text.setGravity(Gravity.RIGHT);

dan

text.setGravity(Gravity.CENTER_VERTICAL);

dan

text.setGravity(Gravity.CENTER_HORIZONTAL);

Dan Lebih Banyak Juga Tersedia

Naveen Tamrakar
sumber
2

Coba tambahkan kode berikut untuk menerapkan parameter tata letak ke TextView

LayoutParams lp = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
lp.addRule(LinearLayout.CENTER_IN_PARENT);
textView.setLayoutParams(lp);
Antrromet
sumber
4
LinearLayout tampaknya tidak memiliki properti CENTER_IN_PARENT.
Alex Summers
2

jika ukuran teks Anda kecil, Anda harus membuat lebar tampilan teks Anda menjadi "fill_parent". Setelah itu, Anda dapat mengatur TextView Gravity ke tengah:

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

Anda dapat menggunakan berikut ini untuk memusatkan TextViewteks secara terprogram di Kotlin:

textview.gravity = Gravity.CENTER
Iklan
sumber
1

coba metode ini

  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);
}
Sai Gopi Me
sumber
0

Keduanya harus bekerja sama agar berhasil. Telah menggaruk kepalaku untuk sementara waktu.

numberView.textAlignment = View.TEXT_ALIGNMENT_CENTER
 numberView.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT)
thesamoanppprogrammer
sumber