GridView – 有时行是顶部alignment的,有时它们是底部alignment的!

我正在使用一个GridView。 一列四个项目。 每个元素由以下布局组成:

<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:layout_width="32dip" android:layout_height="32dip"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="11dip" android:paddingTop="2dip" /> </LinearLayout> 

所以每个元素都是一个小图像,下面有一些文字。 第一遍的布局效果很好。 但是,如果一个项目的文本很长,则会包装成两行。 这工作正常,直到你滚动进出视图。 默认情况下,一行中的所有图像都是顶部alignment的。 当你在屏幕上滚动一行,然后回到屏幕上时,你会看到该行以某种方式得到底部alignment。 看起来像:

第一个布局:

 [image] [image] [image] [text] [text] [text wrap] 

所以即使第三个元素有两行文字,顶部alignment也是完美的。 如果我从屏幕上滚动这一行,然后回来,它看起来像这样:

  [image] [image] [image] [text [text] [text] wrap] 

所以行在这里得到底部alignment。 我不确定这是否是GridView中的错误,或者是否有某种方法可以控制布局始终使行alignment。 我已经尝试将元素布局的重力设置为“顶”,没有好处。 也没有任何独特的设置来控制GridView。 有任何想法吗?

谢谢

Solutions Collecting From Web of "GridView – 有时行是顶部alignment的,有时它们是底部alignment的!"

GridView中的项目高度必须相同。 你有2或3个选项。

  1. 给TextView一个高度
  2. 使用android:singleLine="true" TextView单行
  3. 如果您在某些项目中必须有2行,请使所有项目都有2行。 你可以做的android:minLines="2"

在你的LinearLayout试试android:layout_gravity="top"

此外,如果您手动为单元格填充布局,请务必使用将GridView作为第二个参数的inflate()版本,并将第三个参数的值设置为false。

有些设备不适合风格。

  grid.setColumnWidth(90); grid.setNumColumns(GridView.AUTO_FIT); grid.setVerticalSpacing(10); grid.setHorizontalSpacing(10); grid.setStretchMode(GridView.STRETCH_COLUMN_WIDTH); grid.setGravity(Gravity.CENTER); grid.setOnItemClickListener(this); <style name="GridViewStyle" parent="@android:style/Widget.GridView"> <item name="android:layout_width">fill_parent</item> <item name="android:layout_height">fill_parent</item> <item name="android:columnWidth">90dp</item> <item name="android:numColumns">auto_fit</item> <item name="android:verticalSpacing">10dp</item> <item name="android:horizontalSpacing">10dp</item> <item name="android:stretchMode">columnWidth</item> <item name="android:gravity">center</item> </style> 

//看看我的适配器如何返回textview
/ /我有麻烦的命令你只需刷新适配器(onResume或方向更改)

 public View getView(final int position, View convertView, ViewGroup parent) { if (convertView!=null) return convertView; Intent intent = (Intent) getItem(position); TextView tv = new TextView(mContext); tv.setGravity(Gravity.CENTER_HORIZONTAL); tv.setText(intent.getStringExtra("text")); try { tv.setCompoundDrawablesWithIntrinsicBounds(null, mContext.getPackageManager().getActivityIcon(intent), null, null); } catch (NameNotFoundException e) { tv.setCompoundDrawablesWithIntrinsicBounds(0, android.R.drawable.ic_secure, 0, 0); } return tv; } 

如果您正在使用getview方法,则可以dynamic设置其高度/宽度,而不需要取所有相同大小的元素。 它会自动从中心自动裁剪图像。

  @Override public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView = new ImageView(mContext); imageView.setImageResource(mThumbIds[position]); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); //it will crop the image from center imageView.setLayoutParams(new GridView.LayoutParams(70, 70)); return imageView; } 

还要在你的xml中设置你想要的colums的数量

 <?xml version="1.0" encoding="utf-8"?> <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/grid_view" android:layout_width="fill_parent" android:layout_height="fill_parent" android:numColumns="2" // set the number of coloums android:columnWidth="90dp" android:horizontalSpacing="10dp" android:verticalSpacing="10dp" android:gravity="center" android:stretchMode="columnWidth" > </GridView>