当ListView上的布局时,ImageView不会显示

时间:2013-12-24 15:40:50

标签: android android-layout android-listview

我有以下布局文件:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_alignParentTop="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/second_grey">

<RelativeLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:id="@+id/categoryName"
        android:text="@string/sport"
        android:textSize="24sp"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginRight="12dp"
        android:padding="2dp"
        android:id="@+id/button"
        android:text="@string/see_more"
        android:textSize="12sp"
        android:background="@drawable/blue"
        android:textColor="@android:color/white" />
</RelativeLayout>

<LinearLayout
    android:orientation="horizontal"
    android:baselineAligned="false"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="0.99">

    <RelativeLayout
        android:layout_height="wrap_content"
        android:background="@drawable/card"
        android:layout_width="0dp"
        android:layout_weight="0.33">
        <com.favega.groups.SquareLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/imgContainer1">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="8dp"
                android:id="@+id/img1"
                android:src="@drawable/img_football" />
        </com.favega.groups.SquareLayout>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/football"
            android:padding="8dp"
            android:id="@+id/tv1"
            android:layout_below="@+id/imgContainer1"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />
    </RelativeLayout>

    <RelativeLayout
        android:layout_height="wrap_content"
        android:background="@drawable/card"
        android:layout_width="0dp"
        android:layout_weight="0.33">
        <com.favega.groups.SquareLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/imgContainer2">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="8dp"
                android:id="@+id/img2"
                android:src="@drawable/img_football" />
        </com.favega.groups.SquareLayout>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/basketball"
            android:padding="8dp"
            android:id="@+id/tv2"
            android:layout_below="@+id/imgContainer2"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />
    </RelativeLayout>

    <RelativeLayout
        android:layout_height="wrap_content"
        android:background="@drawable/card"
        android:layout_width="0dp"
        android:layout_weight="0.33">
        <com.favega.groups.SquareLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/imgContainer3">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="8dp"
                android:id="@+id/img3"
                android:src="@drawable/img_football" />
        </com.favega.groups.SquareLayout>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/tennis"
            android:padding="8dp"
            android:id="@+id/tv3"
            android:layout_below="@+id/imgContainer3"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />
    </RelativeLayout>
</LinearLayout>

我把它放在这个布局的ListView中:

<ListView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/categories"></ListView>

然后,使用一个简单的适配器,我只需将每个元素的布局设置为布局文件。

看起来像这样:

enter image description here

但是,如果我只是代替ListView,它看起来像这样

enter image description here

编辑:注意Fútbol运动的变化,这只是我的错误,它与实际布局无关。

EDIT2:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    Category category = mList.get(position);
    if (convertView == null)
        convertView = ((Activity) mContext).getLayoutInflater().inflate(R.layout.category, parent, false);
    TextView categoryName = (TextView) convertView.findViewById(R.id.categoryName);
    categoryName.setText(category.name);
    categoryName.setTypeface(Typeface.createFromAsset(mContext.getAssets(), "fonts/Roboto-Italic.ttf"));
    return convertView;
}

EDIT3:

package com.favega.groups;

import android.annotation.TargetApi;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.LinearLayout;

public class SquareLayout extends LinearLayout {

public SquareLayout(Context context) {
    super(context);
}

@TargetApi(11)
public SquareLayout(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

public SquareLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
}


@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, widthMeasureSpec);
    int width = MeasureSpec.getSize(widthMeasureSpec);
    int height = MeasureSpec.getSize(heightMeasureSpec);
    int size = width > height ? height : width;
    setMeasuredDimension(size, size);
}

}

2 个答案:

答案 0 :(得分:0)

 int size = width > height ? height : width;
setMeasuredDimension(size, size);

显然,您将测量尺寸设置为最小宽度和高度!
由于您将宽度和高度设为match_parent,因此我们可以假设其中一个值从父级获得为零。由于您的目的是制作正方形图像,我更倾向于将此SquareLayout与子(图像)本身相关联而不是父本。使用wrap_content

答案 1 :(得分:0)

在返回covertView之前,在converView.setTag(viewName);中设置每个视图标记。

尝试可能有所帮助。谢谢!!