Android: Android'de Java tarafından yerçekimi TextView için nasıl ayarlanır


220

android:gravity="bottom|center_horizontal"İstediğim sonuçları almak için bir metin görünümünde xml olarak kullanabilirim , ancak bunu programlı olarak yapmam gerekiyor. Metin görünümüm tablerowbir relativelayout.

Denedim:

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

Ama doğru tablerowanlarsam, metin görünümüne değil , bu geçerli olur ?

Yanıtlar:


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

Kotlin versiyonu (Thommy sayesinde)

labelTV.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM

Ayrıca, yerçekimi veya düzen_gravitesi hakkında mı konuşuyorsunuz ? İkincisi bir RelativeLayout'ta çalışmaz .


Teşekkürler işe yaradı. Bunu özlediğim için şimdi biraz aptal hissediyorum. Başlangıçta sorun bir metin alanındaki kenar boşluklarını ayarlamaktı. Sanırım ben setGravity ya da var olmaz bir setMargin () yöntemi bulamadım kabul.
Nate

7
Teşekkürler +1, belgeleri buldum, ama her zamanki gibi sadece yerçekimi sabitlerini (Gravity.CENTER vb.) Nereden aldığımı açıkça belirtmiyorum.
Hein du Plessis

1
Buraya Google'dan gelen herkes gibi, Kotlin yolu:it.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM
Thommy

Bana göre kotlin yolu kafa karıştırıcı, neden öyle orve değil and?! ??!
ZooMagic

38

Bu, metni bir metin görünümünde ortalar:

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

5
Bu işe yaramadı. "lp.gravity çözülemiyor veya bir alan değil"
Nate

Bu garip çünkü bu kod çalışıyor ve benim için iyi derler. Metin görünümünün ağırlığını setWeight () yöntemi olmadığı için nasıl ayarlarsınız?
radyofrekans

4
Sorunu buldum. Nate android.view.ViewGroup'u içe aktarıyor. Bu sınıfın farklı yöntemleri vardır ve derlenmez. Bunun yerine android.view.WindowManager'ı içe aktarmalısınız.
Finnboy11

Metin görünümü doğrusal düzen içinde olduğunda android.widget.LinearLayout.LayoutParams'ı içe aktarmanız daha iyi olur. Aksi takdirde ClassCastException
'12

Teşekkürler, işe yarıyor. Ancak bu tam bir çözüm değildir, çünkü burada bir tür LayoutParamstanımlanmamıştır ve değişebilir, bu yüzden derlenmez. Bir üst düzen (örneğin LinearLayout) bilmeli ve buraya yazmalısınız.
CoolMind

7

Düzen yerçekimini aşağıdaki gibi herhangi bir görünümde ayarlayabiliriz.

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

Bu, xml kodunun altına eşittir

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

Yerçekimi yerçekimi ile aynı değildir
Zvonimir Peran

3

Kullanmalısınız textView.setGravity(Gravity.CENTER_HORIZONTAL);.

Unutmayın ki

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

çalışmaz. Bu, metin için değil, widget için yerçekimini ayarlar.


2

Bu kodu kullan

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

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

Bu, metin görünümünüzün yerçekimini ayarlayacaktır.


0

Birkaç şey yaparak bunu çözdüm, önce heightbenim almak ve mümkün olan toplam satır miktarını almak için TextViewmetin tarafından dalış .sizeTextView

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

Bu değeri aldıktan sonra TextView maxLines, bu yeni değere ayarlamanız gerekir .

TextView.setMaxLines(maxLines);

Set Gravityiçin Bottomhatların maksimum tutar aşıldı kez ve otomatik olarak aşağı kayar.

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

Bunu doğru şekilde çalışması için, kullanmak gerekir append()etmek TextViewEğer, setText()bu iş olmaz.

TextView.append("Your Text");

Bu yöntemin yararı, heightsizin TextViewve metninizden bağımsız olarak dinamik olarak kullanılabilmesidir size. Düzeninizde değişiklik yapmaya karar verirseniz, bu kod yine de çalışır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.