2016-07-21 7 views
0

Ich versuche, ImageViews innerhalb einer GridView passen. Ich habe ein benutzerdefiniertes XML für die ImageViews geschrieben, eine benutzerdefinierte Java-Klasse, die ArrayAdapter für das GridView erweitert.ImageViews in GridView nehmen wahnsinnig viel Platz in Anspruch

Es folgt meine Aktivität mein GridView initialisiert

private GridView gridView; 
private CustomGridViewImage customGridViewImage; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_checkout2); 

     init(); 
     handleClick(); 

     gridView = (GridView) findViewById(R.id.gridView); 
     gridView.setAdapter(customGridViewImage); 

Es folgt der benutzerdefinierte Adapter

package in.juspay.ec.sdk.activities; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 

import in.juspay.ec.sdk.*; 

/** 
* Created by stpl on 21/7/16. 
*/ 
public class CustomGridViewImage extends ArrayAdapter<Integer>{ 

    private Context context; 
    private Integer[] imageArray; 

    public CustomGridViewImage(Context context, int resource, Integer[] imageArray) 
    { 
     super(context, resource, imageArray); 
     this.context = context; 
     this.imageArray = imageArray; 
    } 

    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent) { 
     return getCustomView(position, convertView, parent); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     return getCustomView(position, convertView, parent); 
    } 

    public View getCustomView(int position, View convertView, ViewGroup parent) 
    { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View cell = inflater.inflate(R.layout.custom_gridview_image, parent,false); 


     ImageView imageView = (ImageView) cell.findViewById(R.id.custom_gridview_imageView); 
     imageView.setImageResource(imageArray[position]); 

     return cell; 
    } 
} 

im benutzerdefinierte XML Nach für Image

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="50dp" 
    android:layout_height="50dp" 
    android:padding="5dp" 
    android:gravity="center_horizontal"> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/custom_gridview_imageView" 
     android:scaleType="fitCenter" /> 

</LinearLayout> 

Und schließlich die XML für Grid

<GridView 
     android:background="#e8bc9e" 
     android:id="@+id/gridView" 
     android:layout_marginTop="30dp" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:numColumns="2" 
     android:columnWidth="50dp" 
     android:horizontalSpacing="5dp" 
     android:stretchMode="spacingWidthUniform"> 
    </GridView> 

Ich versuche, so etwas wie dieses

this

Aber ich am Ende immer diese

enter image description here

zu erhalten Wie Sie sehen können, nimmt jede Rasterzelle wahnsinnig viel davon in Anspruch Platz nach der ImageView. Also, wo gehe ich falsch?

Vielen Dank für Ihre Zeit !!

+0

Für den ScaleType von ImageView auf Centacrop setzen. Oder fixieren Sie Zellenabmessungen in der Adapterklasse programmatic –

Antwort

0

Weil Sie 50dp x 50dp für den ImageView-Container (LinearLayout) im benutzerdefinierten Layout zuweisen. Und sagen Sie GridView, dass es 2 Spalten hat. Ihre Bilder sind also klein und der Rest des Bereichs ist mit der Hintergrundfarbe ausgefüllt. Sie können den Abschnitt LinearLayout im benutzerdefinierten Layout löschen und nur Image View mit der Breite: match_parent, height: match_parent. Oder ändern Sie die Breite der LinearLayout-Breite & Höhe als "match_parent".

0

Versuchen Sie Folgendes:

Ersetzen Sie Ihre benutzerdefinierte XML für Image mit nur diese (die Linearlayout entfernen)

<ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/custom_gridview_imageView" 
     android:scaleType="fitCenter" /> 

Fortan, passen die Größe des Imageview mit Polsterung, diesen Willen Passe das ImageView an seinen Container an.