2013-01-14 66 views
7

Tôi đã tạo lập trình GridView hình ảnh được sử dụng bên trong Hộp thoại. Nếu tôi đặt các cột thành tự động, tôi luôn nhận được chính xác hai cột, bất kể kích thước của hình ảnh là gì và kích thước màn hình là bao nhiêu. Nếu tôi buộc các cột vào một số cố định thì nó sẽ hoạt động, nhưng tôi không thể tránh hình ảnh chồng lên nhau trên các kích thước màn hình nhất định, do đó việc quản lý tự động số cột sẽ tốt hơn nhiều. Thậm chí nhiều hơn, khi tôi cố gắng thiết lập streching, nó chỉ đơn giản là không hiển thị bất cứ điều gì!GridView chỉ hiển thị hai cột

ImageAdapter của tôi:

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

Và chức năng mà tạo Dialog (được gọi là các nơi khác với một .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); 
} 

bất cứ ai có thể nhận ra lý do tại sao điều này xảy ra? Cảm ơn bạn!!

Sau đây là cách nó xuất hiện với 4 cột cố định: i50.tinypic.com/2ebdfec.png

Dưới đây là cách nó là với AutoFit: i50.tinypic.com/25jxo9s.png

Đây là bố cục với tính năng tự động trên tab ngang: i49.tinypic.com/23r7qj5.png

Trả lời

0

Thực tế nó phụ thuộc vào kích thước thiết bị. . Như bạn lần đầu tiên thử nghiệm ứng dụng của bạn với làm cho không có các cột cố định, lưới chỉ hiển thị 2 cột vì không gian cho 3 hình ảnh là không đủ lớn để nó có thể phù hợp trong

+1

Đó là vấn đề chính xác của tôi: 4 cột ở lại rất tốt trên màn hình thử nghiệm của tôi, hai cột tạo ra rất nhiều không gian trống giữa các hình ảnh. Vì vậy, có vẻ như autofit không hoạt động. Dưới đây là cách nó xuất hiện với 4 cột cố định: http://i50.tinypic.com/2ebdfec.png Đây là cách thực hiện với autofit: http://i50.tinypic.com/25jxo9s.png –

+0

autofit nên làm việc tốt. bởi vì nếu bạn sửa chữa không có cột, nó sẽ trông rất khó xử trên các tab. Vì vậy, đi với autofit. cố gắng thay đổi kích thước hình ảnh của bạn. nó sẽ giúp bạn. – Rohit

+1

Vấn đề của tôi là chính xác những gì bạn đề xuất tôi: Tôi muốn * để sử dụng tự động sửa, nhưng mặc dù hình ảnh đã nhỏ (đã được thay đổi kích thước) nó không hoạt động. Phải có một số lỗ hổng trong mã. –

Các vấn đề liên quan