Programmieren Sie TextView-Text programmgesteuert


85

Ich bitte hier um Nachsicht, ich beginne gerade mit den Android SDK-Tutorials und versuche etwas aus Interesse, das nicht im Tutorial selbst enthalten ist, aber ich würde hoffen, dass es einfach ist.

Ich versuche, ein TextViewElement über Code horizontal und vertikal zu zentrieren (ich kann es in XML ganz gut tun). Ich habe mehrere Beispiele dafür gesehen, wenn das übergeordnete Element ein Tisch oder ein anderes Objekt ist, aber ich hoffe, dass dies für mich leichter zu verstehen ist. (ps Fühlen Sie sich frei, meine Terminologie zu korrigieren).

Hier ist der Beispielcode aus dem Tutorial / meinem Arbeitsmodell:

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

Ich habe es geschafft, die setGravityMethode zu finden, und ich habe versucht, mich daran zu versuchen setLayoutParams, aber ich bin mir nicht sicher, welchen Umfang sie hat, da ich nicht finden kann, was ich importieren soll, um die WRAP_CONTENTKonstante aufzulösen . Nach meinem Verständnis sind Zentrierung und Inhaltsverpackung + Schwerkraft zwei getrennte Dinge. Ich hätte gerne ein Beispiel, wie man beides in diesem Fall macht und wie / wo ich die Antwort in der API-Dokumentation gefunden hätte.


Warum überhaupt Textansicht als Root-Layout verwenden?
Kalpesh Lakhani

OK Versuchen wir es noch einmal, da ich hier keine Schaltfläche zum Löschen oder Bearbeiten finde. Ich denke, der Hauptcontainer ist ein relatives Layout, da er (glaube ich) meine activity_display_message.xml verwendet. Die Quelle dieses Tutorials ist ein bisschen kopieren / einfügen, aber es befindet sich unter: 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

siehe meine bearbeitete Antwort, es könnte dir helfen .. :)
Kalpesh Lakhani

Antworten:


245
yourTextView.setGravity(Gravity.CENTER);

Perfekt, kurz und süß! Arbeitete wie Charme! Ich sehe auch, dass es die Eigenschaften CENTER_HORIZONTAL und CENTER_VERTICAL gibt. Danke Steve!
Alex Summers

2
Bitte beachten Sie, dass dies nur funktioniert, wenn das android:textAlignment="gravity"Attribut auf Schwerkraft eingestellt ist. Andernfalls wird textAlignment überschrieben.
Velis

1
zum programmgesteuerten Einstellen von textAlignment; yourTextView.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY);
Yusril Maulidan Raji

25

Zum dynamischen Zentrieren

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

Aufgeschlüsselte Version von textView.setGravity (Gravity.CENTER); auch eine funktionierende und wunderbare Antwort. Danke Nirav!
Alex Summers

Ich wünschte, ich könnte, ich bin neu und nicht genug Repräsentant, um darüber abzustimmen. Ich werde Hari den Scheck gut geben, BEIDE deine Antworten sind genau richtig und der arme Kerl könnte den Repräsentanten mehr gebrauchen;) das zieht nicht von der Tatsache ab, dass deine Antwort ebenso hilfreich war. (Wenn ich die Chance bekomme, wenn mein Repräsentant steigt, bin ich sicher, dass Sie beide abstimmen!)
Alex Summers

5
TextView text = new TextView(this);

text.setGravity(Gravity.CENTER);

und

text.setGravity(Gravity.TOP);

und

text.setGravity(Gravity.BOTTOM);

und

text.setGravity(Gravity.LEFT);

und

text.setGravity(Gravity.RIGHT);

und

text.setGravity(Gravity.CENTER_VERTICAL);

und

text.setGravity(Gravity.CENTER_HORIZONTAL);

Und mehr auch verfügbar


5

das wird sicher funktionieren ..

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 scheint keine CENTER_IN_PARENT-Eigenschaft zu haben, wenn es von android.widget.LinearLayout geerbt wird. Vermisse ich etwas
Alex Summers

2

Fügen Sie den folgenden Code hinzu, um die Layoutparameter auf die Textansicht anzuwenden

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

4
LinearLayout scheint keine CENTER_IN_PARENT-Eigenschaft zu haben.
Alex Summers

2

Wenn Ihre Textgröße klein ist, sollten Sie die Breite Ihrer Textansicht auf "fill_parent" einstellen. Danach können Sie Ihre TextView-Schwerkraft auf Mitte einstellen:

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

1

Sie können Folgendes verwenden, um TextViewText in Kotlin programmgesteuert zu zentrieren:

textview.gravity = Gravity.CENTER

1

Versuchen Sie diese Methode

  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

Diese beiden müssen zusammenpassen, damit es funktioniert. Ich kratzte mir schon eine Weile am Kopf.

numberView.textAlignment = View.TEXT_ALIGNMENT_CENTER
 numberView.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.