2013-09-26 6 views
9

Cosa c'è di sbagliato con il mio codice, sto cercando di visualizzare il mio TextView chiamato "invalid", in diverse posizioni (sinistra, destra, centro), ma la gravità (sinistra, destra, centro) ha vinto ' lavoro! enter image description hereTextview Gravity non funziona correttamente su Android

mio text.xml è

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:padding="20dp" > 

    <EditText 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/etext" 
     android:hint="@string/comment" 
     android:inputType="textPassword"/> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:weightSum="100"> 
     <Button 
      android:id="@+id/button1" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/button" 
      android:layout_weight="25"/> 

     <ToggleButton 
      android:id="@+id/toggleButton1" 
      android:layout_width="fill_parent" 
      android:layout_height="40dp" 
      android:text="ToggleButton" 
      android:layout_weight="75" 
      android:checked="true" 
      android:paddingLeft="15dp"/> 
    </LinearLayout> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/invalid" 
     android:layout_gravity="center" 
     android:gravity="center" /> 
</LinearLayout> 

mio TextPlay.java è

public class TextPlay extends Activity { 
    Button button; 
    ToggleButton tbutton; 
    TextView tview; 
    EditText et; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.text); 
     button = (Button) findViewById(R.id.button1); 
     tbutton = (ToggleButton) findViewById(R.id.toggleButton1); 
     tview = (TextView) findViewById(R.id.textView1); 
     et = (EditText) findViewById(R.id.etext); 
     tbutton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       if (tbutton.isChecked()) { 
        et.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); 
       } else { 
        et.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD); 
       } 
      } 
     }); 
     button.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       String input = et.getText().toString(); 
       System.out.println(input); 
       if (input.contentEquals("left")) { 
        tview.setGravity(Gravity.LEFT); 
       } else if (input.contentEquals("right")) { 
        System.out.println("inside right"); 
        tview.setGravity(Gravity.RIGHT); 
       } else if (input.contentEquals("right")) { 
        tview.setGravity(Gravity.CENTER); 
       } 
      } 
     }); 
    } 
} 
+0

rimuovere android: layout_gravity = "center" Android: la gravità = "center" da il tuo layout per @ + id/textView1 e prova ... – Vamshi

+0

Cambia la larghezza di 'TextView' in' match_parent' o usa 'android: layout_gravity' al posto. –

+0

Dai un'occhiata anche a queste domande: [link] (http://stackoverflow.com/questions/3482742/android-gravity-and-layout-gravity) – andysando

risposta

20

si imposta questo testo visualizzare una larghezza di "wrap_content" significa, che cosa sempre che il testo sia, la vista prende la dimensione del testo.

e nel LinearLayout, la gravità di default (usato qui) è 'centro'

si dovrebbe provare questo:

<TextView 
android:id="@+id/textView1" 
android:layout_width="match_parent" <= change this 
android:layout_height="wrap_content" 
android:text="@string/invalid" 
android:gravity="center" <= then this gravity will be taken into account 
/> 
26

99% del tempo, not working properly == not used properly.

Si sta sbagliando gravity e layout_gravity.

gravity è il modo in cui il testo si allinea automaticamente nello TextView. Lo TextView che si trova in wrap_content non fa nulla, poiché lo TextView corrisponde esattamente alle dimensioni del testo.

layout_gravity è il modo in cui il TextView si allinea nel suo genitore, nel tuo caso in verticale LinearLayout

+0

@Harmen 'gravità 'è un attributo definito solo per' TextView'. – njzk2

1

Hai dato la larghezza TextView wrap_content, e questo è il problema, Controlla qui sotto il codice e sostituirlo al vostro codice.

<TextView 
android:id="@+id/txtInvalid" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:text="@string/invalid" 
android:gravity="center" 
/> 
0

impostare android:layout_width="fill_parent" per textView1

0

Assicurarsi che non si dispone di una cosa del genere in giro

app:layout_box="left|top"