2013-01-14 91 views
7

我以編程的方式創建了一個GridView的圖像在一個對話框中使用。如果我將列設置爲自動調整,那麼無論圖像的大小和屏幕大小如何,我總是會得到兩列。 如果我強制列的數量是固定的,那麼它可以工作,但我無法避免圖像在特定的屏幕尺寸上重疊,所以自動管理列數會更好。 甚至更​​多,當我嘗試設置streching時,它根本不顯示任何東西!GridView只顯示兩列

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

以及創建該對話的功能(即與.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); 
} 

任何人都可以找出爲什麼出現這種情況?謝謝!!

下面是它的出現與4個固定欄目:i50.tinypic.com/2ebdfec.png

這裏的它是如何與自動調整:i50.tinypic.com/25jxo9s.png

這裏在水平選項卡上自動安裝的佈局:i49.tinypic.com/23r7qj5.png

回答

0

實際上它取決於設備大小。正如你先用使無固定列的測試您的應用程序,網格顯示只有2列,因爲在3圖像的空間是不是足夠大,以便它可以適應

+1

這正是我的問題:4列在我的測試屏幕上保持得很好,兩個在圖像之間創建了很多空白區域。所以看起來autofit不起作用。 下面是它在4個固定列中的顯示方式: http://i50.tinypic.com/2ebdfec.png 以下是自動調整的方式: http://i50.tinypic.com/25jxo9s.png –

+0

autofit應該工作正常。因爲如果你修正了沒有列,它會在選項卡上看起來很尷尬。所以請使用autofit。嘗試調整圖像大小。它會幫助你。 – Rohit

+1

我的問題正是你建議我的:我*希望*使用autofix,但儘管圖像已經很小(已調整大小),但它不起作用。代碼中必須存在一些缺陷。 –