Come impostare Android: gravity su TextView dal lato Java in Android


227

Posso usare android:gravity="bottom|center_horizontal"in xml su una visualizzazione di testo per ottenere i risultati desiderati, ma devo farlo a livello di codice. La mia visualizzazione di testo è all'interno di un tablerowif che conta in un file relativelayout.

Ho provato:

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

Ma se capisco correttamente, questo lo applicherebbe alla tablerow, non alla visualizzazione di testo?

Risposte:


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

Versione Kotlin (grazie a Thommy)

labelTV.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM

Inoltre, stai parlando di gravità o di layout_gravity? Quest'ultimo non funzionerà in un RelativeLayout .


Grazie che ha funzionato. Mi sento un po 'sciocco ora per averlo perso. In origine il problema era impostare i margini su un campo di testo. Immagino di aver pensato perché non riuscivo a trovare un metodo setMargin () che nemmeno setGravity esistesse.
Nate

7
Grazie +1, ho trovato la documentazione, ma come al solito va solo a metà, non indicando chiaramente da dove ottengo le costanti di gravità (Gravity.CENTER ecc.).
Hein du Plessis

2
Per chiunque venga qui da Google, come me, il metodo Kotlin è:it.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM
Thommy

Per me il modo kotlin è confuso, perché lo è ore no and?! ??!
ZooMagic

1
@ZooMagic Non è un Logicaloperatore ( ||) ma un Bitwiseoperatore ( |). L'OR bit a bit prende i bit dei due valori e verifica se uno (o entrambi) dei bit sulla stessa posizione è 1, e se è così stamperà questo come un 1. Ad esempio: 0010 | 1000 = 1010, 1010 | 0101 = 1111,1100 | 1101 = 1101
Sven van Zoelen

40

Questo centrerà il testo in una visualizzazione di testo:

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

5
Non ha funzionato. "lp.gravity non può essere risolto o non è un campo"
Nate

È strano perché questo codice funziona e si compila bene per me. Come imposteresti il ​​peso di una visualizzazione di testo poiché il loro metodo non è setWeight ()?
radiofrequenza

4
Ho trovato il problema. Nate sta importando android.view.ViewGroup. Quella classe ha diversi tipi di metodi e non si compila. Dovresti invece importare android.view.WindowManager.
Finnboy11

È meglio importare android.widget.LinearLayout.LayoutParams quando la visualizzazione del testo è all'interno del layout lineare. Altrimenti, ottieni ClassCastException
domani

Grazie, funziona. Ma non è una soluzione completa perché un tipo di LayoutParamsnon è definito qui e può variare, quindi non verrà compilato. Dovresti conoscere un layout genitore (ad esempio LinearLayout) e scriverlo qui.
CoolMind

8

Possiamo impostare la gravità del layout su qualsiasi vista come di seguito:

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

Questo è equivalente al codice xml sottostante

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

2
La gravità del layout non è uguale alla gravità
Zvonimir Peran

3

Dovresti usare textView.setGravity(Gravity.CENTER_HORIZONTAL);.

Ricorda che usando

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

non funzionerà. Questo imposterà la gravità per il widget e non per il suo testo.


2

Usa questo codice

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

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

Questo imposterà la gravità della tua visualizzazione del testo.


0

Ho risolto il problema facendo alcune cose, prima ottenendo il heightdi my TextViewe immergendolo nel testo sizeper ottenere il numero totale di righe possibili con il TextView.

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

Dopo aver ottenuto questo valore, è necessario impostarlo TextView maxLinessu questo nuovo valore.

TextView.setMaxLines(maxLines);

Impostare il Gravitysu Bottomuna volta superato il numero massimo di righe e scorrerà automaticamente verso il basso.

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

Affinché funzioni correttamente, è necessario utilizzare append()il TextView, Se setText()non funzionerà.

TextView.append("Your Text");

Il vantaggio di questo metodo è che può essere utilizzato dinamicamente indipendentemente dal heighttuo TextViewe dal testo size. Se decidi di apportare modifiche al tuo layout, questo codice funzionerà comunque.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.