GridView行高度不正确

6
我正在使用GridView,其中显示了带有背景图像和文本的LinearLayout,就像这个例子一样:http://www.curious-creature.org/2012/12/11/android-recipe-1-image-with-rounded-corners/。就像那个例子一样,我使用那段代码使图像具有圆角。问题是,如果我不使用圆角,所有我的网格项都是相同的高度,无论它们内部有什么文本,即使所有的图像大小都相同。但是,如果我使用它,项目的高度会根据内容自动调整。我尝试将我的线性布局定义为wrap_content、fill_parent、match_parent甚至固定高度,但系统完全忽略了我。这是我的网格布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFDDDDDD"
    android:orientation="vertical"
    tools:context=".RouteListActivity" >

    <GridView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/gridview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_margin="20dp"
        android:layout_weight="2"
        android:animateLayoutChanges="false"
        android:clipChildren="false"
        android:clipToPadding="false"
        android:drawSelectorOnTop="true"
        android:gravity="center"
        android:horizontalSpacing="10dp"
        android:numColumns="2"
        android:scrollingCache="false"
        android:stretchMode="columnWidth"
        android:verticalSpacing="10dp" />

</LinearLayout>

这是我的网格项:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearlayoutGridLabel"
    android:layout_width="wrap_content"
    android:layout_height="150dp"
    android:layout_weight="1"
    android:gravity="bottom|left"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/id_ruta"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:visibility="gone" />

    <TextView
        android:id="@+id/routenameGridLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:background="#77000000"
        android:gravity="bottom"
        android:padding="5dp"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

在适配器中添加我的getView方法:

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

        View vi=convertView;
        if(convertView==null)
            vi = inflater.inflate(R.layout.grid_item, null);

        LinearLayout linLayout = (LinearLayout) vi.findViewById(R.id.linearlayoutGridLabel);
        Typeface yanone = Typeface.createFromAsset(mContext.getAssets(), "YanoneKaffeesatz-Regular.ttf");
        TextView id_ruta = (TextView) vi.findViewById(R.id.id_ruta);
        TextView nombre=(TextView)vi.findViewById(R.id.routenameGridLabel);
        nombre.setTypeface(yanone);
        nombre.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 38);
        Ruta current = routeList.get(position);
        try {
//          Drawable d;
//          d = Drawable.createFromStream(mContext.getAssets().open("ruta" + (position+1) + "/title.jpg"), null);
            Bitmap b = BitmapFactory.decodeStream(mContext.getAssets().open("ruta" + (position+1) + "/title.jpg"));
            StreamDrawable d = new StreamDrawable(b, 10, 0);
            linLayout.setBackgroundDrawable(d);
        } catch (IOException e) {
            linLayout.setBackgroundResource(R.drawable.noimage);
        }
        nombre.setText("" + current.getNombre());
        id_ruta.setText(current.getId().toString());

        return vi;
    }

坦白说,我不太理解网格视图的行为。之前,我将不同大小的图片设置为背景图片,所有元素都会重叠在一起。即使在网格项布局上固定高度,我也无法使行具有相同的大小。

请问我能否得到一些指引?

2个回答

36

我终于解决了它,原来问题出在我使用的地方

vi = inflater.inflate(R.layout.grid_item, null);

取而代之

vi = inflater.inflate(R.layout.grid_item, parent, false);

布局参数被忽略了。

总之,让 GridView 均匀分配空间很麻烦。我想我会转换到 TableView。


1
哦,天啊!你救了我3小时33分钟42秒的时间,谢谢:D - SRB Bans

1
您可以使用setLayoutParams来设置布局高度:
vi.setLayoutParams(new GridView.LayoutParams(<width_in_pixels>, <height_in_pixels>));

您需要以像素为单位传递宽度和高度。因此,您可能希望将150dp转换为像素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接