TextView metnini programlı olarak ortala


87

Burada biraz hoşgörü diliyorum, Android SDK öğreticileriyle yeni başlıyorum ve öğreticinin kendisinde olmayan ilgi dışı bir şey yapmaya çalışıyorum, ancak umarım kolay olur.

Bir TextViewöğeyi kod aracılığıyla yatay ve dikey olarak ortalamaya çalışıyorum (XML'de gayet iyi yapabilirim). Ebeveyn bir masa veya başka bir nesne olduğunda bunun nasıl yapılacağına dair birkaç örnek gördüm, ancak umarım bunu benim için daha kolay kavrayabilir. (ps Terminolojimi düzeltmekten çekinmeyin).

İşte eğiticiden / çalışma modelimden örnek kod:

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

setGravityYöntemi bulmayı başardım ve bunun için uğraşmaya çalıştım setLayoutParams, ancak bunun için kapsamın ne olduğundan emin değilim, çünkü WRAP_CONTENTsabitini çözmek için neyi içe aktarmam gerektiğini bulamıyorum . Anladığım kadarıyla, merkezleme ve içerik sarmalama + yerçekimi iki ayrı şey. Bu durumda her ikisinin de nasıl yapılacağına dair bir örnek istiyorum ve belki yanıtı API belgelerinde nasıl / nerede bulabilirdim?


metin görünümünü neden kök düzen olarak alalım?
Kalpesh Lakhani

Tamam Burada bir sil veya düzenle düğmesi bulamadığım için tekrar deneyelim. Ana kapsayıcının göreceli bir düzen olduğunu düşünüyorum çünkü (sanırım) activity_display_message.xml my Activity_display_message.xml Bu öğreticinin kaynağı biraz kopyala / yapıştırma ama şu adreste bulunuyor: 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" araçlar: context = ". DisplayMessageActivity"> < / RelativeLayout>
Alex Summers

düzenlenmiş cevabımı görün, size yardımcı olabilir .. :)
Kalpesh Lakhani

Yanıtlar:


249
yourTextView.setGravity(Gravity.CENTER);

Mükemmel, kısa ve tatlı! Cazibe gibi çalıştı! Ayrıca CENTER_HORIZONTAL ve CENTER_VERTICAL özelliklerinin olduğunu da görüyorum. Teşekkür ederim Steve!
Alex Summers

2
Lütfen bunun yalnızca android:textAlignment="gravity"öznitelik yerçekimine ayarlanmışsa çalıştığını unutmayın . Aksi takdirde textAlignment geçersiz kılınır.
velis

1
textAlignment'ı programlı olarak ayarlamak için; yourTextView.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY);
Yusril Maulidan Raji

25

Dinamik olarak merkezlemek için

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

TextView.setGravity'nin (Gravity.CENTER) parçalanmış sürümü; ayrıca çalışan ve harika bir cevap. Teşekkürler Nirav!
Alex Summers

Keşke yapabilseydim, yeniyim ve oy vermek için yeterli sayım yok. Hari'ye çek nedenini vereceğim, iyi, HİÇBİR cevaplarınız yerinde ve fakir arkadaş temsilcisi daha fazla kullanabilir;) bu, cevabınızın eşit derecede yardımcı olduğu gerçeğinden çıkarılmaz. (Temsilcim yükseldiğinde şansım olursa, ikinize de oy vermeyi unutmayın!)
Alex Summers

6

bu kesinlikle işe yarayacak ..

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, android.widget.LinearLayout'tan devralındığında CENTER_IN_PARENT özelliğine sahip görünmüyor; Bir şey mi kaçırıyorum?
Alex Summers

5
TextView text = new TextView(this);

text.setGravity(Gravity.CENTER);

ve

text.setGravity(Gravity.TOP);

ve

text.setGravity(Gravity.BOTTOM);

ve

text.setGravity(Gravity.LEFT);

ve

text.setGravity(Gravity.RIGHT);

ve

text.setGravity(Gravity.CENTER_VERTICAL);

ve

text.setGravity(Gravity.CENTER_HORIZONTAL);

Ve Daha Fazlası da DAİREMİZ


2

Düzen parametrelerini TextView'a uygulamak için aşağıdaki kodu eklemeyi deneyin

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

4
LinearLayout, CENTER_IN_PARENT özelliğine sahip görünmüyor.
Alex Summers

2

metin boyutunuz küçükse, metin görünümünüzün genişliğini "fill_parent" yapmalısınız. Bundan sonra, TextView Yerçekimini merkeze ayarlayabilirsiniz:

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

1

TextViewMetni Kotlin'de programlı olarak ortalamak için aşağıdakileri kullanabilirsiniz :

textview.gravity = Gravity.CENTER

1

bu yöntemi dene

  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

İşe yaraması için bu ikisinin birlikte gitmesi gerekiyor. Bir süredir kafamı kaşıyordum.

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