如何以编程方式对齐 gridview 中的图像?

How to align images in grid view programatically?

我正在显示一个对话框来显示图像列表并选择其中之一。我创建了一个适配器来在网格视图中设置图像。

我按照这个 link :http://www.tutorialspoint.com/android/android_grid_view.htm 来理解这个想法。

但是现在对话框显示的图像彼此相距很远并且没有正确对齐。

现在的对话框如下:

适配器:

 public class ImageAdapter extends BaseAdapter {
    Context Context;
    int [] imageId;

    public ImageAdapter(Context context, int[] prgmImages) {
        // TODO Auto-generated constructor stub
        Context = context;
        imageId = prgmImages;

    }

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {
            // if it's not recycled, initialize some attributes
            imageView = new ImageView(Context);
            imageView.setLayoutParams(new GridView.LayoutParams(85,85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(2,2,2,2);
        } else {
            imageView = (ImageView) convertView;
        }

        imageView.setImageResource(imageId[position]);
        return imageView;
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return imageId.length;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }
    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

}

显示对话框代码:

 private void showAlertDialog() {

    GridView gridView = new GridView(this);

    int[] mThumbIds = {
            R.drawable.roundicons05,R.drawable.roundicons08,
            R.drawable.roundicons16,R.drawable.roundicons37,
    };

    gridView.setAdapter(new ImageAdapter(CheckListActivity.this,mThumbIds));
    gridView.setNumColumns(3);
    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            // do something here
        }
    });

    // Set grid view to alertDialog
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setView(gridView);
    builder.setTitle("Select icon");
    builder.show();

}

我怎样才能正确对齐它,例如居中,一行 4 张图片等。谢谢。

尝试

imageView.setLayoutParams(new GridView.LayoutParams(48,48));

我建议您尝试使用 setAdjustViewBounds true。它将对齐 imageview

要显示正确的 ImageView,制作 xml 布局文件并应用正确的填充和边距以及 在适配器的 getView 方法中膨胀这个 xml 像这样:

您的 xml 布局 grid_item.xml :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:orientation="vertical">

<ImageView
    android:id="@+id/image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

</LinearLayout>

适配器的 getView 方法:

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    ImageView imageView;

    if (convertView == null)
    {
        LayoutInflater infalInflater = (LayoutInflater)    context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.grid_item, null);
      imageView = (ImageView) convertView.findViewById(R.id.imgDoc);
        convertView.setTag(viewHolder);
    }
    else
    {
       imageView = (ImageView) convertView;
    }

 imageView.setImageResource(imageId[position]);      
 return convertView;
    }

为了更合适的布局,在 Gridview 中应用 horizo​​ntalSpacing 和 verticalSpacing。

    android:horizontalSpacing="10dp"
    android:verticalSpacing="10dp"
<GridView

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnWidth="150dp"
    android:gravity="center"
    android:horizontalSpacing="10dp"
    android:verticalSpacing="10dp"
    android:listSelector="#fff"
    android:numColumns="3"
    android:scrollbars="none"
    android:stretchMode="spacingWidthUniform"
    android:paddingTop="10dp"
    android:layout_margin="5dp">

</GridView>

要动态设置这些属性,因为你说你正在动态添加网格视图,那么这就是你可以通过 java

设置这些属性的方法
mGridView.setGravity(Gravity.CENTER);
    mGridView.setColumnWidth(150);
    mGridView.setHorizontalSpacing(20);
    mGridView.setVerticalSpacing(20);
    mGridView.setNumColumns(3);
    mGridView.setStretchMode(GridView.STRETCH_SPACING_UNIFORM);