2013-01-14 22 views
7

Programowo utworzono GridView obrazów, które będą używane wewnątrz okna dialogowego. Jeśli ustawię kolumny na autofit, zawsze otrzymam dokładnie dwie kolumny, niezależnie od rozmiaru obrazów i niezależnie od rozmiaru ekranu. Jeśli wymuszam kolumny na ustaloną liczbę, to działa, ale nie mogę uniknąć nakładania się obrazów na niektórych rozmiarach ekranu, więc automatyczne zarządzanie liczbą kolumn byłoby znacznie lepsze. Co więcej, gdy próbuję ustawić streching, po prostu nic nie pokazuje!GridView wyświetla tylko dwie kolumny

Moja 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); 
} 
} 

a funkcja, która tworzy Dialog (który nazywa się gdzie indziej z .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); 
} 

ktoś może dostrzec, dlaczego tak się dzieje? Dziękuję Ci!!

Oto jak wydaje się z nieruchomych kolumn 4: i50.tinypic.com/2ebdfec.png

Oto jak to jest z AutoFit: i50.tinypic.com/25jxo9s.png

Oto układ z autofitem na poziomej karcie: i49.tinypic.com/23r7qj5.png

Odpowiedz

0

W rzeczywistości zależy to od wielkości urządzenia. . Jak pierwszy przetestowaniu aplikacji z podejmowania bez kolumn stałych, siatka wyświetla tylko 2 kolumny, ponieważ przestrzeń dla 3 obrazek nie jest wystarczająco duży, aby mógł zmieścić się w

+1

To jest dokładnie mój problem: 4 kolumny pozostają bardzo dobrze na moim ekranie testowym, dwa tworzą dużo pustej przestrzeni między obrazami. Wygląda więc na to, że autofit nie działa. Oto, jak wygląda z 4 stałymi kolumnami: http://i50.tinypic.com/2ebdfec.png Oto, jak to jest z autofitem: http://i50.tinypic.com/25jxo9s.png –

+0

autofit powinien działać dobrze. ponieważ jeśli nie poprawisz kolumny, będzie wyglądać bardzo niezręcznie na kartach. Więc idź z autofitem. spróbuj zmienić rozmiar swoich zdjęć. to ci pomoże. – Rohit

+1

Mój problem jest dokładnie taki, jak mi sugerujesz: * chcę * używać autofix, ale chociaż zdjęcia są już małe (już skalowane) to nie działa. W kodzie musi być pewna wada. –

Powiązane problemy