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?


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

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

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

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


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

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

1

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

textview.gravity = Gravity.CENTER

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

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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.