2011-10-19 4 views
0

J'ai regardé autour de moi et j'ai trouvé de nombreuses solutions possibles pour centrer une textview dans une mise en page. Mais aucun n'a travaillé pour moi. Mon textview est dans un TableLayout qui est décrit par le code XML suivant:TextView layout_gravity ne fonctionne pas par programme

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/schedule_main_holder"> 
    <TableLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:stretchColumns="0" 
     android:id="@+id/schedule_table_entry"> 
    </TableLayout> 
</LinearLayout> 

Ce que je fais est de faire une nouvelle TableRow, puis en ajoutant un TextView et un ListView ... mais le textview doit être centré verticalement. Pour que je fais:

TableRow row = new TableRow(this); 

     TextView tview = new TextView(this); 
     tview.setText("Wednesday"); 
     TableRow.LayoutParams layoutParams = new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER_VERTICAL); 
     tview.setLayoutParams(layoutParams); 
     row.addView(tview); 

Le problème est que le TextView est toujours au-dessus de la cellule et non au milieu comme il se doit. J'ai essayé un mélange de combinaisons (même la méthode FrameLayout décrit dans une autre réponse) et je n'arrive pas à centrer le textview dans la cellule du tableau.

Merci à l'avance

Répondre

1

Tout d'abord, il y a deux types de gravity.I pense que votre utilisation de gravité régulière et non la mise en page un. seconde, vous pouvez également créer la vue en XML puis utiliser inflatrer, puis ajouter. Cela donne beaucoup plus de code propre.

Edit: Alors votre trop paresseux pour essayer EFFECTIVEMENT mise en page gonfleur et écouter les conseils, voici le code:

main.xml

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:stretchColumns="0" 
android:id="@+id/schedule_table_entry"> 
</TableLayout> 

myrow.xml

<?xml version="1.0" encoding="utf-8"?> 
<TableRow xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="vertical"> 
<TextView 
    android:id="@+id/text" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:layout_gravity="center" /> 
</TableRow> 

TestActivity

public class TestActivity extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    LayoutInflater inflater = getLayoutInflater(); 
    TableRow row = (TableRow) inflater.inflate(R.layout.myrow, null); 
    TextView text = (TextView) row.findViewById(R.id.text); 
    text.setText("I did all your work... smart even"); 

    TableLayout table = (TableLayout) findViewById(R.id.schedule_table_entry); 
    table.addView(row); 
} 
+0

Merci pour la réponse mais j'ai déjà essayé la méthode inflatable et la layout_gravity était simple ignorée. Je veux le layout_gravity parce que je veux que le textview soit centré sur la cellule et non sur le texte lui-même. Au moins, j'ai essayé setGravity et cela n'a pas fonctionné et quand la textview a été définie en xml, layout_gravity a fonctionné. –

+0

Réponse mise à jour pour faire la suggestion .. suggéré. – Warpzit

+0

Merci pour la réponse que je viens d'essayer et cela fonctionne. J'ai essayé l'approche de gonflement mais pas dans le a TableRow, à la place j'ai gonflé le TextView directement et cela a pu être le problème. –

Questions connexes