我按照以下主题中接受的答案(来自@kcoppock)中的步骤进行操作。 https://stackoverflow.com/a/15264039/3296263 要么 Gridview with two columns and auto resized images
编辑: 这是代码。 Gridview代码:
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<GridView
android:id="@+id/main_category_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:verticalSpacing="0dp"
android:horizontalSpacing="0dp"
android:stretchMode="columnWidth"
android:numColumns="2"/>
</FrameLayout>
网格项布局:main_category_list_content.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.praz.notespal.model.SquareImageView
android:id="@+id/picture"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"/>
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="15dp"
android:paddingBottom="15dp"
android:layout_gravity="bottom"
android:textColor="@android:color/white"
android:background="#55000000"/>
</FrameLayout>
自定义SquareImageView类:
public class SquareImageView extends ImageView {
public SquareImageView(Context context) {
super(context);
}
public SquareImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SquareImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth());
}
}
适配器代码:
private final class MyAdapter extends BaseAdapter {
private final List<Item> mItems = new ArrayList<Item>();
private final LayoutInflater mInflater;
public MyAdapter(Context context) {
mInflater = LayoutInflater.from(context);
mItems.add(new Item("Red", R.drawable.tile_alevel));
mItems.add(new Item("Magenta", R.drawable.tile_grade10));
mItems.add(new Item("Dark Gray", R.drawable.tile_grade11));
mItems.add(new Item("Gray", R.drawable.tile_grade9));
mItems.add(new Item("Green", R.drawable.tile_alevel));
mItems.add(new Item("Cyan", R.drawable.tile_grade11));
}
@Override
public int getCount() {
return mItems.size();
}
@Override
public Item getItem(int i) {
return mItems.get(i);
}
@Override
public long getItemId(int i) {
return mItems.get(i).drawableId;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View v = view;
ImageView picture;
TextView name;
System.out.println("viewing "+ i);
if (v == null) {
v = mInflater.inflate(R.layout.main_category_list_content, viewGroup, false);
v.setTag(R.id.picture, v.findViewById(R.id.picture));
v.setTag(R.id.text, v.findViewById(R.id.text));
}
picture = (ImageView) v.getTag(R.id.picture);
name = (TextView) v.getTag(R.id.text);
Item item = getItem(i);
picture.setImageResource(item.drawableId);
name.setText(item.name);
return v;
}
private class Item {
public final String name;
public final int drawableId;
Item(String name, int drawableId) {
this.name = name;
this.drawableId = drawableId;
}
}
}
我设置适配器的活动代码
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
GridView gridView = (GridView)findViewById(R.id.main_category_list);
gridView.setAdapter(new MyAdapter(this));
}
而不是显示所有6个项目,我只看到2.如果我增加&#39; numColumns&#39;属性为3,然后显示3.所以它只显示第一行。我在适配器的getView()方法内放置了一个控制台,以查看正在调用的网格的位置。令我惊讶的是,我看到的是以下输出。
I/System.out: viewing item 0
I/System.out: viewing item 1
I/System.out: viewing item 0
I/System.out: viewing item 0
I/System.out: viewing item 0
I/System.out: viewing item 0
如您所见,它重复第0个位置而不是第3个位置。经过大量的搜索,我仍然无法弄清楚发生了什么。任何帮助都非常感谢。
请注意我已经创建了一个新问题,因为由于声誉不足而无法回复他的答案。
答案 0 :(得分:0)
我弄清楚出了什么问题(当然是偶然的)。问题是My GridView在NestedScrolView中。出于某种原因,这两个不能很好地协同工作。当我将GridView从NestedScrolView中取出时,它就像一个魅力。我做了一些进一步的搜索导致这种行为的原因,但我找不到任何线索。无论如何,我真的不想要一个NestedScrolView,所以它现在都很好。感谢所有回复的人。如果antyone知道上述行为的原因,请解释。