我正在使用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>
因此每个元素都是一个小图像,下面有一些文字。布局在第一次通过时效果很好。但是,如果项目的文本很长,它会换行到两行。这可以正常工作,直到您将其滚入和移出视图。默认情况下,一行中的所有图像都是顶部对齐的。当您在屏幕外滚动一行,然后返回屏幕时,您会看到该行以某种方式得到底部对齐。它看起来像:
第一个布局:
[image] [image] [image]
[text] [text] [text
wrap]
所以即使第三个元素有两行文字,顶部也是对齐的,这是完美的。如果我在屏幕上滚动此行,然后重新打开,它看起来像这样:
[image]
[image] [image] [text
[text] [text] wrap]
所以这行在底部对齐。我不确定这是否是GridView中的错误,或者是否有某种方法可以控制布局以始终对齐行。我已经尝试将元素布局的重力设置为“顶部”,没有好处。似乎GridView也没有任何独特的设置来控制它。有什么想法吗?
由于
答案 0 :(得分:14)
GridView中项目的高度必须相同。你有2或3个选择。
android:singleLine="true"
android:minLines="2"
答案 1 :(得分:0)
在android:layout_gravity="top"
中尝试LinearLayout
。
此外,如果您手动为单元格的布局充气,请务必使用inflate()
作为第二个参数的GridView
版本,并对第三个参数使用false。
答案 2 :(得分:0)
有些设备不适合风格。
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;
}
答案 3 :(得分:0)
如果您使用的是 getview 方法,则可以动态设置其高度/宽度,不需要采用相同大小的所有元素。它将自动从中心动态裁剪图像。
@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中设置所需的列数
<?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>