2013-01-14 1 views
7

Ho creato a livello di programmazione un GridView di immagini da utilizzare all'interno di una finestra di dialogo. Se imposto le colonne su autofit, ottengo sempre esattamente due colonne, qualunque sia la dimensione delle immagini e qualunque sia la dimensione dello schermo. Se imposto le colonne su un numero fisso, allora funziona, ma non posso evitare che le immagini si sovrappongano a certe dimensioni dello schermo, quindi una gestione automatica del numero di colonne sarebbe molto meglio. Ancora di più, quando provo a impostare lo streching, semplicemente non mostra nulla!GridView mostra solo due colonne

mio ImageAdapter:

public class ImageAdapter extends BaseAdapter { 
private Context mContext; 

// Constructor 
public ImageAdapter(Context c){ 
    mContext = c; 
} 

public int getCount() { 
    return (IconC.Res.length); 
} 

public Object getItem(int position) { 
    return (IconC.Res[position]); 
} 

public long getItemId(int position) { 
    return position; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView imageView; 
    if (convertView == null) { 
     imageView = new ImageView(mContext); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageView.setLayoutParams(new GridView.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
    } else { 
     imageView = (ImageView) convertView; 
    } 
    imageView.setImageResource(IconC.Res[position]); 
    return (imageView); 
} 
} 

E la funzione che crea la finestra di dialogo (che si chiama altrove con un .Show())

private void createPopUp() { 
    d_icons = new Dialog(this); 
    GridView gv_icons = new GridView(this); 

// gv_icons.setNumColumns(GridView.AUTO_FIT); // autofit disabled, shows ONLY TWO COLUMNS 
    gv_icons.setNumColumns(4); // instead, autofit forced, now it works, but I don't want it fixed! 
    gv_icons.setGravity(Gravity.CENTER); 
    gv_icons.setHorizontalSpacing(3); 
    gv_icons.setVerticalSpacing(1); 
// gv_icons.setStretchMode(GridView.STRETCH_SPACING); // stretching disabled, shows ZERO COLUMNS 
    gv_icons.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
    gv_icons.setAdapter(new ImageAdapter(this)); 
    gv_icons.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick (AdapterView<?> parent, View view, int position, long id) { 
      eventIcons.set(selectedItem, position); 
      updateEventView(); 
      d_icons.dismiss(); 
     } 
    }); 

    d_icons.setTitle(R.string.text_chooseicon); 
    d_icons.addContentView(gv_icons, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
    d_icons.setCancelable(true); 
} 

chiunque può individuare il motivo per cui questo accade? Grazie!!

Ecco come appare con le 4 colonne fisse: i50.tinypic.com/2ebdfec.png

Ecco come è con l'adattamento automatico: i50.tinypic.com/25jxo9s.png

Ecco il layout con autofit su una scheda orizzontale: i49.tinypic.com/23r7qj5.png

risposta

0

In realtà dipende dalla dimensione del dispositivo. . Come prima testato l'applicazione con rendendo il no di colonne fisse, griglia visualizza solo 2 colonne perché lo spazio per l'immagine del 3 non è abbastanza grande in modo che possa andare bene in

+1

Questo è esattamente il mio problema: 4 colonne restano molto bene sullo schermo di test, due creano molto spazio vuoto tra le immagini. Quindi sembra che l'autofit non funzioni. Ecco come appare con le 4 colonne fisse: http://i50.tinypic.com/2ebdfec.png Ecco come funziona con l'autofit: http://i50.tinypic.com/25jxo9s.png –

+0

autofit dovrebbe funzionare bene perché se non aggiusti la colonna, sembrerà molto imbarazzante nelle schede. Quindi vai con autofit. prova a ridimensionare le tue immagini. ti aiuterà. – Rohit

+1

Il mio problema è esattamente quello che mi suggerisci: io * voglio * usare autofix, ma sebbene le immagini siano già piccole (già ridimensionate) non funziona. Ci deve essere qualche difetto nel codice. –