android – GridView只显示两列

我以编程方式创建了一个要在Dialog中使用的图像的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);
}
 }

以及创建Dialog的函数(在其他地方使用.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

解决方法

这篇文章回答了你的问题:
Android: How does GridView auto_fit find the number of columns?

要使auto_fit工作,您需要指定列宽:gridView.setColumnWidth(width);

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...