我在这个论坛上下搜索并找到了不同的解决方案,但没有一个能按预期工作。我什至尝试查看开源的 Shelves 项目,这对于我在这里想要实现的目标来说似乎过于复杂。
我有一个带有书柜/书架背景的屏幕,并使用下面的代码让它根据需要滚动。我的 RelativeLayout 高度似乎没有得到尊重,将其从 100dp 更改为 200dp 没有任何区别。我基本上需要 GridView 中的每一行具有完全相同的高度,并垂直对齐缩略图图像底部,以便图像位于书架上。我通过硬编码 ImageView 本身的布局宽度/高度来实现这一点。我尝试使用背景颜色,以便我可以看到发生了什么,但我仍然无法获得一致的外观。我还尝试将图像缩小到一致的大小,比如说 100x100,即使图像的形状不同(有些是正方形,有些是矩形)。我也可以
谁能告诉我我做错了什么?我想我已经接近了,尽管我想出的可能是一个彻底的黑客:-/
这是我现在工作的屏幕截图的链接,蓝色背景颜色用于调试/测试目的。
/res/layout/titles.xml
<com.alex.android.view.BookShelfView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_titles_grid_view"
android:cacheColorHint="@android:color/transparent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:verticalSpacing="25dp"
android:gravity="bottom"/>
ImageAdapter
class ImageAdapter extends BaseAdapter {
private Context mContext;
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
return borrowedAssets.size();
}
public Object getItem(int position) {
return borrowedAssets.get(position);
}
public long getItemId(int position) {
return borrowedAssets.get(position).getContentId();
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
View cellView;
if (convertView == null) { // if it's not recycled, initialize some attributes
cellView = getLayoutInflater().inflate(R.layout.title_cell, null);
ImageView image = (ImageView) cellView.findViewById(R.id.title_thumbnail);
new DownloadImageTask(image).execute(getString(R.string.thumbnails_server_url)+borrowedAssets.get(position).getThumbnail());
} else {
cellView = convertView;
}
return cellView;
}
}
/res/layout/title_cell.xml
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="100dp"
android:layout_height="100dp">
<ImageView android:id="@+id/title_thumbnail"
android:layout_width="100dp"
android:layout_height="140dp"
android:paddingTop="25dp"
android:scaleType="fitStart"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:background="@color/blue_color"
android:contentDescription="thumbnail"/>
</RelativeLayout>