如何以编程方式对齐 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 中应用 horizontalSpacing 和 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);
我正在显示一个对话框来显示图像列表并选择其中之一。我创建了一个适配器来在网格视图中设置图像。
我按照这个 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 中应用 horizontalSpacing 和 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);