Bagaimana mengatur android: gravitasi ke TextView dari sisi Java di Android

219

Saya dapat menggunakan android:gravity="bottom|center_horizontal"dalam xml pada tampilan teks untuk mendapatkan hasil yang diinginkan, tetapi saya harus melakukan ini secara terprogram. Tampilan teks saya ada di dalam a tablerowjika itu penting dalam relativelayout.

Saya telah mencoba:

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

Tetapi jika saya mengerti dengan benar, itu akan berlaku untuk tablerow, bukan tampilan teks?

Nate
sumber

Jawaban:

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

Versi Kotlin (terima kasih kepada Thommy)

labelTV.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM

Juga, apakah Anda berbicara tentang gravitasi atau tentang layout_gravity? Yang terakhir tidak akan bekerja di RelativeLayout .

Maragues
sumber
Terima kasih, itu berhasil. Saya merasa sedikit konyol sekarang karena melewatkan itu. Awalnya masalahnya adalah mengatur margin pada bidang teks. Saya kira saya berasumsi karena saya tidak bisa menemukan metode setMargin () yang tidak ada setGravity juga.
Nate
7
Terima kasih +1, saya menemukan dokumentasinya, tetapi seperti biasa hanya berjalan setengah jalan, tidak dengan jelas menyatakan dari mana saya mendapatkan konstanta gravitasi dari (Gravity.CENTER dll).
Hein du Plessis
1
Bagi siapa pun yang datang ke sini dari Google, seperti saya, cara Kotlin adalah:it.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM
Thommy
Bagi saya cara kotlin membingungkan, mengapa ordan tidak and?! ??!
ZooMagic
38

Ini akan memusatkan teks dalam tampilan teks:

TextView ta = (TextView) findViewById(R.layout.text_view);
LayoutParams lp = new LayoutParams();
lp.gravity = Gravity.CENTER_HORIZONTAL;
ta.setLayoutParams(lp);
frekuensi radio
sumber
5
Itu tidak berhasil. "lp.gravity tidak dapat diselesaikan atau bukan bidang"
Nate
Itu aneh karena kode ini berfungsi dan mengkompilasi dengan baik untuk saya. Bagaimana Anda mengatur bobot tampilan teks sebagai metode tanpa setWeight ()?
frekuensi radio
4
Saya menemukan masalahnya. Nate mengimpor android.view.ViewGroup. Kelas itu memiliki berbagai metode dan tidak dikompilasi. Anda harus mengimpor android.view.WindowManager sebagai gantinya.
Finnboy11
Seharusnya lebih baik mengimpor android.widget.LinearLayout.LayoutParams ketika tampilan teks di dalam tata letak linier. Othervise Anda mendapatkan ClassCastException
tomm
Terima kasih, ini berhasil. Tapi ini bukan solusi lengkap karena jenisnya LayoutParamstidak didefinisikan di sini dan dapat bervariasi, sehingga tidak akan dikompilasi. Anda harus mengetahui tata letak induk (misalnya, LinearLayout) dan menulisnya di sini.
CoolMind
7

Kita dapat mengatur gravitasi tata letak pada tampilan seperti di bawah ini-

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

Ini sama dengan kode xml di bawah ini

<...
 android:gravity="center_vertical|right"
 ...
 .../>
Bajrang Hudda
sumber
Tata letak gravitasi tidak sama dengan gravitasi
Zvonimir Peran
3

Anda harus menggunakan textView.setGravity(Gravity.CENTER_HORIZONTAL);.

Ingat itu menggunakan

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

tidak akan bekerja Ini akan mengatur gravitasi untuk widget dan bukan untuk teksnya.

Irshu
sumber
2

Gunakan kode ini

        TextView textView = new TextView(YourActivity.this);
        textView.setGravity(Gravity.CENTER | Gravity.TOP);
        textView.setText("some text");
Faxriddin Abdullayev
sumber
2
textView.setGravity(Gravity.CENTER | Gravity.BOTTOM);

Ini akan mengatur gravitasi tampilan teks Anda.

DAS
sumber
0

Selesaikan ini dengan melakukan beberapa hal, pertama dapatkan heightdari saya TextViewdan selami dengan teks sizeuntuk mendapatkan jumlah total garis yang mungkin dengan TextView.

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

Setelah Anda mendapatkan nilai ini, Anda perlu mengatur nilai Anda TextView maxLinesuntuk ini.

TextView.setMaxLines(maxLines);

Atur Gravityuntuk Bottomsetelah jumlah maksimum garis telah terlampaui dan itu akan gulir ke bawah secara otomatis.

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

Agar ini berfungsi dengan benar, Anda harus menggunakan append()untuk TextView, Jika Anda setText()ini tidak akan berfungsi.

TextView.append("Your Text");

Manfaat dari metode ini adalah bahwa ini dapat digunakan secara dinamis terlepas heightdari Anda TextViewdan teksnya size. Jika Anda memutuskan untuk melakukan modifikasi pada tata letak Anda, kode ini akan tetap berfungsi.

Roman Fernandez
sumber