GridView 中的图像很小
Images are small in GridView
我试图在 GridView 中显示图书列表,但图像比预期的要小。我搜索了这个问题,并在 Whosebug 上找到了一些答案,这些答案告诉我们要使用
imageView.setLayoutParams(new GridView.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
在我的适配器中,但无论我如何尝试都没有帮助我。
here's my problem screen
这是我的 BookAdapter.java
`
package com.example.android.slavabooks;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
public class BookAdapter extends ArrayAdapter<Book> {
public BookAdapter(@NonNull Context context, ArrayList<Book> books) {
super(context, 0, books);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View gridView = convertView;
if (gridView == null) {
gridView = LayoutInflater.from(getContext()).inflate(R.layout.one_book, parent, false);
}
Book currentBook = getItem(position);
TextView title = (TextView) gridView.findViewById(R.id.title_text_view);
TextView author = (TextView) gridView.findViewById(R.id.author_text_view);
ImageView imageView = (ImageView) gridView.findViewById(R.id.book_image);
imageView.setImageDrawable(currentBook.getBookImage());
title.setText(currentBook.getTitle());
author.setText(currentBook.getAuthor());
return gridView;
}
}`
这是我的 activity_search_results.xml 和 GridView
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SearchResults">
<GridView
android:divider="@null"
android:dividerHeight="10dp"
android:padding="10dp"
android:id="@+id/grid_view"
android:numColumns="2"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<ProgressBar
android:id="@+id/progress_bar"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
one_book.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:padding="12sp"
android:layout_margin="5dp"
android:minHeight="200dp"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/book_image"
android:src="@drawable/book"
android:layout_centerHorizontal="true"
android:adjustViewBounds="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/title_text_view"
android:fontFamily="sans-serif-medium"
android:maxLines="1"
tools:text="Title"
android:gravity="center"
android:textSize="15sp"
android:layout_below="@id/book_image"
android:layout_centerHorizontal="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/author_text_view"
android:maxLines="1"
android:gravity="center"
tools:text="Author"
android:textSize="10sp"
android:layout_below="@id/title_text_view"
android:layout_width="wrap_content"
android:layout_centerHorizontal="true"
android:layout_height="wrap_content" />
</RelativeLayout>
您已将宽度和高度设置为“wrap_content”值。这意味着图像假定其尽可能小的尺寸。在布局资源中将具有高度和宽度的标签更改为“match_parent”。
在one_book.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
...
android:layout_height="wrap_content">
<ImageView
android:id="@+id/book_image"
android:src="@drawable/book"
...
android:layout_width="match_parent"
android:layout_height="match_parent" /> <!-- THESE width and height -->
...
</RelativeLayout>
如果您将值 "wrap_content" 赋给宽度和高度,它将采用所需的最小值 space。在你的情况下你给了
android:minHeight="200dp"
到 gridView 项。因此,请尝试更改您在 one_book.xml 中使用的 ImageView 的宽度和高度值,例如:-
android:layout_width="80dp"
android:layout_height="100dp"
根据您的 gridView 项目进行调整。
另请记住,如果您将 ImageView 的大小增加到大于您放入其中的图像的大小,图像会变得模糊,因此请尝试在固定 ImageView 大小后调整图像的大小。
解法:
您可以为此使用 ConstraintLayout
和 scaleType
。整个one_book.xml如下图:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:minHeight="200dp"
android:padding="12sp">
<ImageView
android:id="@+id/book_image"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:src="@drawable/book"
android:scaleType="fitCenter"
app:layout_constraintBottom_toTopOf="@+id/title_text_view"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/title_text_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_below="@id/book_image"
android:layout_centerHorizontal="true"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:fontFamily="sans-serif-medium"
android:gravity="center"
android:maxLines="1"
android:textSize="15sp"
app:layout_constraintBottom_toTopOf="@+id/author_text_view"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/book_image"
tools:text="Title" />
<TextView
android:id="@+id/author_text_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_below="@id/title_text_view"
android:layout_centerHorizontal="true"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:gravity="center"
android:maxLines="1"
android:textSize="10sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/title_text_view"
tools:text="Author" />
</android.support.constraint.ConstraintLayout>
希望这对您有所帮助。有问题请评论。
我试图在 GridView 中显示图书列表,但图像比预期的要小。我搜索了这个问题,并在 Whosebug 上找到了一些答案,这些答案告诉我们要使用
imageView.setLayoutParams(new GridView.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
在我的适配器中,但无论我如何尝试都没有帮助我。
here's my problem screen
这是我的 BookAdapter.java `
package com.example.android.slavabooks;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
public class BookAdapter extends ArrayAdapter<Book> {
public BookAdapter(@NonNull Context context, ArrayList<Book> books) {
super(context, 0, books);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View gridView = convertView;
if (gridView == null) {
gridView = LayoutInflater.from(getContext()).inflate(R.layout.one_book, parent, false);
}
Book currentBook = getItem(position);
TextView title = (TextView) gridView.findViewById(R.id.title_text_view);
TextView author = (TextView) gridView.findViewById(R.id.author_text_view);
ImageView imageView = (ImageView) gridView.findViewById(R.id.book_image);
imageView.setImageDrawable(currentBook.getBookImage());
title.setText(currentBook.getTitle());
author.setText(currentBook.getAuthor());
return gridView;
}
}`
这是我的 activity_search_results.xml 和 GridView
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SearchResults">
<GridView
android:divider="@null"
android:dividerHeight="10dp"
android:padding="10dp"
android:id="@+id/grid_view"
android:numColumns="2"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<ProgressBar
android:id="@+id/progress_bar"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
one_book.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:padding="12sp"
android:layout_margin="5dp"
android:minHeight="200dp"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/book_image"
android:src="@drawable/book"
android:layout_centerHorizontal="true"
android:adjustViewBounds="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/title_text_view"
android:fontFamily="sans-serif-medium"
android:maxLines="1"
tools:text="Title"
android:gravity="center"
android:textSize="15sp"
android:layout_below="@id/book_image"
android:layout_centerHorizontal="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/author_text_view"
android:maxLines="1"
android:gravity="center"
tools:text="Author"
android:textSize="10sp"
android:layout_below="@id/title_text_view"
android:layout_width="wrap_content"
android:layout_centerHorizontal="true"
android:layout_height="wrap_content" />
</RelativeLayout>
您已将宽度和高度设置为“wrap_content”值。这意味着图像假定其尽可能小的尺寸。在布局资源中将具有高度和宽度的标签更改为“match_parent”。
在one_book.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
...
android:layout_height="wrap_content">
<ImageView
android:id="@+id/book_image"
android:src="@drawable/book"
...
android:layout_width="match_parent"
android:layout_height="match_parent" /> <!-- THESE width and height -->
...
</RelativeLayout>
如果您将值 "wrap_content" 赋给宽度和高度,它将采用所需的最小值 space。在你的情况下你给了
android:minHeight="200dp"
到 gridView 项。因此,请尝试更改您在 one_book.xml 中使用的 ImageView 的宽度和高度值,例如:-
android:layout_width="80dp"
android:layout_height="100dp"
根据您的 gridView 项目进行调整。
另请记住,如果您将 ImageView 的大小增加到大于您放入其中的图像的大小,图像会变得模糊,因此请尝试在固定 ImageView 大小后调整图像的大小。
解法:
您可以为此使用 ConstraintLayout
和 scaleType
。整个one_book.xml如下图:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:minHeight="200dp"
android:padding="12sp">
<ImageView
android:id="@+id/book_image"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:src="@drawable/book"
android:scaleType="fitCenter"
app:layout_constraintBottom_toTopOf="@+id/title_text_view"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/title_text_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_below="@id/book_image"
android:layout_centerHorizontal="true"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:fontFamily="sans-serif-medium"
android:gravity="center"
android:maxLines="1"
android:textSize="15sp"
app:layout_constraintBottom_toTopOf="@+id/author_text_view"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/book_image"
tools:text="Title" />
<TextView
android:id="@+id/author_text_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_below="@id/title_text_view"
android:layout_centerHorizontal="true"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:gravity="center"
android:maxLines="1"
android:textSize="10sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/title_text_view"
tools:text="Author" />
</android.support.constraint.ConstraintLayout>
希望这对您有所帮助。有问题请评论。