web-dev-qa-db-fra.com

Android gridview s'ajustant à la taille de l'écran

La vue en grille de mon application comporte 3 lignes et 3 colonnes. Je veux que cela remplisse l'écran, quelle que soit la taille d'écran de l'appareil.

J'ai essayé d'obtenir la taille de la fenêtre et de définir les paramètres de mise en page en conséquence. Mais cela ne donne pas un alignement parfait car cela fonctionne avec la somme de poids dans la disposition linéaire.

Alors, pouvons-nous utiliser la somme de poids pour la vue de la grille ou existe-t-il une autre propriété Android qui peut être utilisée. Merci beaucoup pour le temps et la réponse.

<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:layout_below="@+id/text1view"
                Android:background="@drawable/home_bg"
                Android:gravity="center"
                Android:horizontalSpacing="10dip"
                Android:numColumns="3"
                Android:stretchMode="columnWidth" />

chaque élément de la grille est

<?xml version="1.0" encoding="utf-8"?>
<ImageView
    Android:id="@+id/grid_item_image"
    Android:layout_width="wrap_content"
    Android:layout_height="75dip"
    Android:layout_margin="0dip"
    Android:padding="0dip" >
</ImageView>

<TextView
    Android:id="@+id/grid_item_text"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_alignParentBottom="true"
    Android:layout_below="@+id/grid_item_image"
    Android:gravity="center_horizontal"
    Android:padding="0dip"
    Android:textColor="#000000"
    Android:textSize="10sp" >
</TextView>

code de l'adaptateur:

    @Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder;

    if (convertView == null) {
        LayoutInflater mInflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = mInflater.inflate(R.layout.griditems, null);
        holder = new ViewHolder();
        holder.text1 = (TextView) convertView
                .findViewById(R.id.grid_item_text);

        holder.image = (ImageView) convertView
                .findViewById(R.id.grid_item_image);

        // if it's not recycled, initialize some attributes
        holder.image.setImageResource(gridItemIds[position]);
        holder.text1.setText(gridTitles[position]);
        int h = mContext.getResources().getDisplayMetrics().densityDpi;

        // holder.image.setLayoutParams(new LayoutParams(h-50,h-50));
        convertView.setLayoutParams(new GridView.LayoutParams(h - 45,
                h - 39));
        // holder.image.setScaleType(ImageView.ScaleType.CENTER_CROP);
        // holder.image.setScaleType(ImageView.ScaleType.FIT_XY);
        // holder.image.setPadding(20, 20, 20, 20);

        // convertView.setLayoutParams(new GridView.LayoutParams(Utils
        // .getLayoutParameter(), Utils.getLayoutParameter()+50));

        holder.image.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                new ModuleManager().startModuleACtivity(position, mContext);
            }
        });
        convertView.setTag(holder);
    } else {

        holder = (ViewHolder) convertView.getTag();

    }

    return convertView;
}

static class ViewHolder {
    TextView text1;
    ImageView image;

}

pls voir la ligne

convertView.setLayoutParams(new GridView.LayoutParams(h-45, h-39));

je suis arrivé à cette valeur avec quelques essais sur un émulateur de taille différente. Mais je ne pense pas que ce soit une bonne façon de définir la hauteur et la largeur.

21
png

Pour autant que j'ai compris votre question, comme vous n'avez posté aucun code, ce que vous essayez de faire est que vous voulez que gridview apparaisse en plein écran.

Tout d'abord, vous devez utiliser une disposition pour insérer votre vue de grille. Procédez comme suit:

Faites la hauteur et la largeur du layout pour remplir le parent:

Android:layout_width="fill_parent"
Android:layout_height="fill_parent"

définissez ensuite la hauteur et la largeur de votre grille sur fill_parent également.

Eh bien, c'est juste une supposée solution que vous auriez pu travailler de cette façon. mettre du code serait bien mieux. J'espère que cela fonctionne pour toi.

pdate: Eh bien, le problème peut résider ici:

 convertView.setLayoutParams(new GridView.LayoutParams(h-45, h-39));

changer en:

 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT);
 convertView.setLayoutParams(new GridView.LayoutParams(params));

J'espère que cela fonctionne pour toi.

15
Usama Sarwar

@preetha: tout d'abord regardez cet exemple que j'ai utilisé et ma disposition n'a pas affecté indépendamment de la hauteur et de la largeur du dispositif ....

http://developer.Android.com/resources/tutorials/views/hello-gridview.html

définir ce qui suit en xml

Android:id="@+id/gridview"
    Android:layout_width="fill_parent" 
    Android:layout_height="fill_parent"
    Android:columnWidth="90dp"
    Android:numColumns="auto_fit"
    Android:verticalSpacing="10dp"
    Android:horizontalSpacing="10dp"
    Android:stretchMode="columnWidth"
    Android:gravity="center"

j'espère que cela t'aides...

11
optimus