Table Layout :
Pour répartir les colonnes de la même largeur :
android:stretchColumns="*"
Sinon, la colonne « prioritaire est indiquée par non n°
https://abhiandroid.com/ui/tablelayout
Constraint layout :
Utilisez le pour automatiquement ajouter les constraint
https://abhiandroid.com/ui/constraintlayout
Créez un répertoire res/drawable ou vous placerez n images.
1°) Création d’un Layout :
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/Black"
android:columnWidth="50dp"
android:gravity="center"
android:horizontalSpacing="10dp"
android:numColumns="auto_fit"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp" />
2°) Construction d’un adapter :
Pour afficher dans la GridView les images
package com.andrologiciels.androgridlayout;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
public class GridAdapter extends BaseAdapter {
private Context context;
// -- imageIds tableau dynamique stockant les images
private static List<Integer> imageIds = new ArrayList<Integer>();
public GridAdapter(Context c) {
context = c;
// -- Chargement des icônes
loadDrawables(R.drawable.class);
}
public int getCount() {
return imageIds.size();
}
public Object getItem(int position) {
return imageIds.get(position);
}
public long getItemId(int position) {
return 0;
}
public View getView(int position, View view, ViewGroup parent) {
ImageView iview;
if (view == null) {
iview = new ImageView(context);
iview.setLayoutParams(new GridView.LayoutParams(85, 85));
iview.setScaleType(ImageView.ScaleType.CENTER_CROP);
iview.setPadding(8, 8, 8, 8);
} else {
iview = (ImageView) view;
}
iview.setImageResource(imageIds.get(position));
return iview;
}
// -- Alimente le tableau avec l'ensemble des id des icones
public static void loadDrawables(Class<?> clz) {
final java.lang.reflect.Field[] fields = clz.getDeclaredFields();
for (java.lang.reflect.Field field : fields) {
final int drawableId;
try {
drawableId = field.getInt(clz);
imageIds.add(drawableId);
} catch (Exception e) {
continue;
}
}
}
}
3°) Affichage du grid et gestion du click :
package com.andrologiciels.androgridlayout;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.Toast;
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// -- Affichage de la liste des icones
setContentView(R.layout.ico_grid);
GridView gridview = (GridView) findViewById(R.id.gridview);
final GridAdapter gridadapter = new GridAdapter(this);
gridview.setAdapter(gridadapter);
// -- Gestion du click sur image
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
String sMsg = gridadapter.getItem(position).toString();
Toast.makeText(MainActivity.this, sMsg, Toast.LENGTH_SHORT)
.show();
}
});
}
}
Le code est ici
Mise à jour de la grid :
1°) ajouter les fonctions suivantes dans la classe de l’adapteur :
public void clearAdapter() {
imageIds.clear();
}
public void addNewValues(List<Integer> imageIds) {
this.imageIds = imageIds;
}
2°) lorsque l’on veut mettre à jour la grid (par exemple dans le click) :
//-- on met à jour la grid
gridadapter.clearAdapter(); //-- Efface les valeurs anciennes
gridadapter.addNewValues(DbHelper.getIconIdNotSelected(dbNumTel)); //-- recharge les nouvelles valeurs
gridadapter.notifyDataSetChanged(); //-- Affiche la Grid
Exemple complet ici montrant l’utilisation d’une GridView alimentée par une base de données.
Références :
http://wptrafficanalyzer.in/blog/listing-images-in-gridview-using-simple-adapter-in-android/
http://android-er.blogspot.fr/2013/02/implement-own-app-launcher.html
http://www.mkyong.com/android/android-gridview-example/
http://www.coderzheaven.com/tag/customgridviewexample/
http://www.javacodegeeks.com/2013/08/android-custom-grid-view-example-with-image-and-text.html