GridView只显示两列

7
我通过编程创建了一个图片网格视图,用于在对话框中使用。如果我将列设置为自适应大小,则无论图片的大小和屏幕尺寸如何,都只会得到两列。 如果我强制将列数固定,那么它会工作,但我无法避免某些屏幕尺寸上的图片重叠,因此自动管理列数会更好。 此外,当我尝试设置拉伸时,它根本不显示任何内容!
我的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

2个回答

11

0

实际上这取决于设备的尺寸。当您首次测试应用程序时,如果将列数固定,则网格仅显示2列,因为3张图片的空间不够大,无法适应其中。


1
这正是我的问题: 4列在我的测试屏幕上呈现非常好,但2列之间会产生很多空白。因此,似乎自适应调整不起作用。 以下是具有4个固定列的外观: http://i50.tinypic.com/2ebdfec.png 以下是自适应调整的外观: http://i50.tinypic.com/25jxo9s.png - Beppi's
自适应应该可以正常工作。因为如果你固定列数,它会在选项卡上看起来非常尴尬。所以使用自适应。尝试调整图片大小,这将有所帮助。 - Rohit
1
我的问题正是你建议我的:我使用自动修复,但尽管图像已经很小(已经调整大小),它仍然无法工作。代码中必须有一些缺陷。 - Beppi's
这是水平选项卡上自适应布局的示意图: http://i49.tinypic.com/23r7qj5.png - Beppi's
图片的尺寸是多少?因为您没有设置图片的尺寸,所以它默认采用fill_parent。为什么不尝试使用XML呢?这样会更容易处理。 - Rohit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接