Android中的Listview在某些行的顶部和底部添加了额外的空间

时间:2013-02-01 20:38:53

标签: android android-layout

我的应用程序的一个屏幕显示一个包含6列的列表视图,第六个是包含用户创建的图片或草图的imageView。这是listView行的代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:paddingTop="2dp"
    android:paddingBottom="2dp" >

    <TextView android:id="@+id/surveyColumn1"
        android:textSize="13sp"
        android:layout_width="0dip"
        android:layout_weight="0.105"
        android:layout_height="wrap_content"/>

    <TextView android:id="@+id/surveyColumn2"
        android:textSize="13sp"
        android:layout_width="0dip"
        android:layout_weight="0.137"
        android:layout_height="wrap_content"/>

    <TextView android:id="@+id/surveyColumn3"
        android:textSize="12sp"
        android:layout_width="0dip"
        android:layout_weight="0.25"
        android:layout_height="wrap_content"/>

    <TextView android:id="@+id/surveyColumn4"
       android:textSize="13sp"
        android:layout_width="0dip"
        android:layout_weight="0.153"
        android:layout_height="wrap_content"/>

    <TextView android:id="@+id/surveyColumn5"
        android:textSize="13sp"
        android:layout_width="0dip"
        android:layout_weight="0.153"
        android:layout_height="wrap_content"/>

    <ImageView android:id="@+id/surveyColumn6"
        android:layout_width="0dip"
        android:layout_weight="0.202"
        android:layout_height="wrap_content"
        android:paddingTop="0dp"
        android:paddingBottom="0dp"
        android:scaleType="centerInside"
        android:layout_gravity="center"
        android:contentDescription="@string/pictureHeader"/>

</LinearLayout>

除了一种情况外,此设置效果很好:显示的图像是相机拍摄的垂直方向图像。在这种情况下,listview会在行内的图像上方和下方抛出一堆空白区域。在活动中我使用custumViewBinder使用我从这里获得的代码将图像显示为位图:http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

我发现摆脱空间的唯一方法是为imageView设置静态高度,我宁愿不这样做,因为有些行没有图像。任何可以弄清楚发生了什么的人都是我的英雄。

编辑:这是我调用的类,用于将图像显示为位图:

public class customBitmap {

    public customBitmap(String pathName, int width, int height, ImageView view) {
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(pathName, options);

        options.inSampleSize = calculateInSampleSize(options, width, height);

        options.inJustDecodeBounds = false;
        Bitmap bitmap = BitmapFactory.decodeFile(pathName, options);

        //Check if bitmap was created; if so, display it in the imageView
        if(bitmap == null)
            Log.w("UI Thread", "Null bitmap at moto.sitesurvey.customBitmap:35");
        else
            view.setImageBitmap(bitmap);
    }

    public int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight){
        final int height = options.outHeight;
        final int width = options.outWidth;
        int inSampleSize = 1;

        if(height > reqHeight || width > reqWidth) {
            if(width > height)
                inSampleSize = Math.round((float)height / (float)reqHeight);
            else
                inSampleSize = Math.round((float)width / (float)reqWidth);
        }

        return inSampleSize;
    }

}

在活动中,我传递的宽度和高度值为200和150。我的问题似乎是,几个月前我最初编写这段代码时,我只是将它设计成适用于面向风景的图片,现在它也需要为肖像工作。

2 个答案:

答案 0 :(得分:2)

根据r / androiddev post中stoney80的建议,我添加了一行

android:adjustViewBounds="true"

到imageVew,这让我完全按照我的意愿去做。

答案 1 :(得分:0)

您是否在将图像放入视图之前调整图像大小?如果是这样,请检查并查看图像的最佳尺寸,并尝试将从垂直方向相机拍摄的位图调整为此大小。

如果这对您没有帮助,我可以查看您的imageview和位图代码吗?