web-dev-qa-db-fra.com

android Comment étirer les lignes dans le gridview pour remplir l'écran?

J'ai simple GridView (avec une colonne et six lignes), qui affiche ImageView avec TextView dans la cellule (je crée un adaptateur). Comment étirer les lignes pour remplir toute la hauteur de l'écran? Maintenant, j'ai un peu d'espace sous les cellules ...

main.xml

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent" 
Android:layout_height="fill_parent"
Android:orientation="horizontal">
<LinearLayout Android:layout_height="fill_parent"
    Android:layout_width="150dp" 
    Android:orientation="vertical"
    Android:id="@+id/left">
    <include layout="@layout/menu_grid"></include>
</LinearLayout>
<LinearLayout Android:layout_height="fill_parent"
    Android:layout_width="fill_parent" 
    Android:orientation="vertical"
    Android:id="@+id/right">
    <ImageView Android:src="@drawable/image"
        Android:layout_height="wrap_content" 
        Android:layout_width="wrap_content"
        Android:id="@+id/imageMain" 
        Android:layout_gravity="center">
    </ImageView>
</LinearLayout>

menu_grid.xml

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent" Android:layout_height="fill_parent">
<GridView Android:layout_height="wrap_content"
    Android:layout_width="fill_parent" 
    Android:id="@+id/gridView"
    Android:padding="10dp" 
    Android:verticalSpacing="10dp"
    Android:horizontalSpacing="10dp" 
    Android:numColumns="1"
    Android:columnWidth="100dp" 
    Android:stretchMode="columnWidth"
    Android:gravity="center"></GridView>

item.xml

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content" Android:layout_height="wrap_content"
Android:orientation="vertical" Android:gravity="fill_horizontal">
<ImageView Android:src="@drawable/icon"
    Android:layout_height="70dp" Android:id="@+id/imageIcon"
    Android:layout_width="70dp" Android:layout_gravity="center_horizontal"></ImageView>
<TextView Android:id="@+id/textIcon" Android:text="TextView"
    Android:layout_gravity="center" Android:layout_height="wrap_content"
    Android:layout_width="wrap_content"></TextView>

ImageAdapter.Java

public class ImageAdapter extends BaseAdapter {
//....some code
//....

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view;
    if (convertView == null) {  
        LayoutInflater inflater = (LayoutInflater)_context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.item, null);

        TextView text = (TextView) view.findViewById(R.id.textIcon);
        text.setText(labels[position]);

        ImageView image = (ImageView) view.findViewById(R.id.imageIcon);
        image.setImageResource(icons[position]);        

    } else {
        view = convertView;
    }

    return view;
}

}

17
snil

D'après ce que j'ai compris, la question est de savoir si j'ai 6 rangées de données à renseigner dans gridView, comment puis-je faire en sorte que ces 6 rangées remplissent tout l'écran, au lieu d'afficher 6 rangées et un espace vide sous la dernière rangée.

Pour ce faire, vous devez définir la hauteur minimale de la présentation de l’élément gridView (dans votre cas, son item.xml) sur (hauteur de l’écran)/6, où 6 représente le (nombre de lignes à remplir). Cette hauteur minimale peut être définie dans l'adaptateur que vous utilisez.

Pour trouver la hauteur de l'écran de l'appareil:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

int width = metrics.widthPixels;
int height = metrics.heightPixels;

trouver ces valeurs dans l'activité et les rendre publiques statiques et les utiliser dans l'adaptateur, j'ai eu un problème pour trouver ces valeurs dans la classe d'adaptateur

puis pour régler la hauteur minimale:

view = inflater.inflate(R.layout.item, null);
view.setMinimumHeight(GridViewActivity.height/6);

J'ai essayé après avoir vu le message et cela a parfaitement fonctionné.

29
Archie.bpgc

Si vous souhaitez simplement augmenter l’espace entre les lignes. Vous pouvez utiliser le remplissage, cela devrait fonctionner. Vous pouvez définir le remplissage via XML ou par programme en fonction de vos besoins.

// this you can set inside your view.
Android:paddingLeft="5px"
Android:paddingRight="5px"
Android:paddingTop="10px"
Android:paddingBottom="10px"

// this you can set to your any widgets like TextView/Layouts/Buttons etc..
setPadding(top, left, bottom, right);
3
Daud Arfin

Étendez une mise en page en spécifiant Framelayout, puis substituez la méthode onMeasure

public class CameraView extends FrameLayout 

public TextView titleView;

public CameraView(Context context,AttributeSet attrs) {
    super(context, attrs)
    titleView = rootView.findViewById(R.id.titleView);
}


@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}
}

Vous pouvez ensuite utiliser cette vue dans votre BaseAdapter et définir les layout_width et layout_height sur match_parent.

0
Edu