Comment puis-je obtenir un Android TableLayout pour remplir le parent en mode paysage?
Je suis à l'aide d'un TableLayout dans mon application. Il contient quatre TableRows contenant chacun quatre ImageViews. Le comportement que je veux c'est à l'échelle de la mise en page pour l'adapter à la dimension la plus courte.
Il fonctionne très bien en mode portrait, mais échoue lamentablement en mode paysage.
De la la documentation il semble que ce est parce que le TableRow layout_height est toujours WRAP_CONTENT. Bien que je ne peux définir les dimensions de chacun des points de Vue, la TableLayout ne sont pas rendues à tous si j'ai mis la Vue layout_height à FILL_PARENT.
Je se sentir comme il ya quelque chose de simple, je suis absent. Est-il possible d'obtenir le TableLayout avec TableRows à l'échelle pour s'adapter à la hauteur en mode paysage?
XML Mise en page:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/table"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:shrinkColumns="*">
</TableLayout>
Java:
public class Example extends Activity {
private TableLayout mTable;
private int[] mDrawableIds = { R.drawable.draw01, R.drawable.draw02, R.drawable.draw03, R.drawable.draw04, R.drawable.draw05, R.drawable.draw06, R.drawable.draw07, R.drawable.draw08, R.drawable.draw09, R.drawable.draw10, R.drawable.draw11, R.drawable.draw12, R.drawable.draw13, R.drawable.draw14, R.drawable.draw15, R.drawable.draw16 };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTable = (TableLayout)findViewById(R.id.table);
for (int j=0; j<4; j++) {
TableRow tr = new TableRow(this);
tr.setLayoutParams(new ViewGroup.LayoutParams( LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
for (int i=0; i<4; i++) {
ImageView iv = new ImageView(this);
iv.setImageResource(mDrawableIds[j*4+i]);
iv.setScaleType(ImageView.ScaleType.FIT_CENTER);
iv.setAdjustViewBounds(true);
tr.addView(iv);
}
mTable.addView(tr);
}
}
}
GridView semble vouloir faire défiler plutôt que de redimensionner la ImageViews pour le plan paysager. Peut-être que si j'ai fait l'image des ressources les plus petites qui pourraient travailler. J'espérais éviter le redimensionnement des images.
OriginalL'auteur Brian Cooley | 2009-12-27
Vous devez vous connecter pour publier un commentaire.
Changer votre XML en page:
Qui devrait en faire prendre tout l'écran en hauteur, indépendamment de l'orientation. Voir la densité de pixels indépendants
OriginalL'auteur Dinedal
Je n'ai trouver comment faire. En gros, la partie qui n'était pas le même chemin que je voulais, c'était la TableRows. Quand j'ai changé de paysage, les deux premiers TableRows n'étaient pas le redimensionnement et le troisième était en train de consommer le reste de l'espace. La quatrième ligne n'affiche pas du tout.
J'ai compris que j'avais besoin de définir le layout_weight de la TableRows à l'égalité des valeurs. Mais, il n'y a pas de méthode pour le faire au moment de l'exécution, alors j'ai construit la disposition suivante du fichier, que j'ai appelé row.xml:
Ensuite, j'ai utilisé un LayoutInflater pour construire la ligne au moment de l'exécution avec les propriétés que je voulais:
Maintenant la TableRows redimensionnée correctement sur la rotation. J'ai changé le ImageViews à ImageButtons parce que j'ai décidé d'ajouter quelques onClick comportement et je suis à la construction de ces boutons via un fichier xml distinct, mais je ne pense pas que ces informations sont pertinentes pour le problème de redimensionnement.
android:layout_weight="1"
pour chaque colonne dans la table ligne d'en-tête résolu mon problème, niceOriginalL'auteur Brian Cooley
J'ai essayé la solution retenue ici, mais il n'a pas de travail. Ce qui a fonctionné est comme ci-dessous:
OriginalL'auteur user846316