Изображения маленькие в GridView - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь показать список книг в GridView, и изображения меньше ожидаемого.Я искал эту проблему и нашел некоторые ответы на stackoverflow, которые говорят, что нужно использовать imageView.setLayoutParams(new GridView.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); в моем адаптере, но это не помогло мне, как бы я ни пытался.

вот мой экран проблемы

Вот мой 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>

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Если вы передадите значение "wrap_content" ширине и высоте, оно займет минимально необходимое пространство.в вашем случае вы дали

 android:minHeight="200dp"

элементу gridView.Поэтому попробуйте изменить значения ширины и высоты ImageView, которые вы используете внутри one_book.xml , например: -

 android:layout_width="80dp" 
 android:layout_height="100dp" 

, чтобы подогнать его под ваш элемент gridView.

Также помните, что изображения будут размытыми, если вы увеличите размер ImageView больше, чем размер изображений, которые вы помещаете в них, поэтому попробуйте изменить размер изображений после фиксирования размера ImageView.

0 голосов
/ 22 октября 2018

Решение:

Для этого вы можете использовать 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>

Demo Image

Надеюсь, это поможет.Пожалуйста, прокомментируйте, если возникнут проблемы.

0 голосов
/ 22 октября 2018

Вы установили ширину и высоту в значение wrap_content .Это означает, что изображения предполагают наименьший возможный размер.Вместо этого в вашем ресурсе макета вместо тега height и width укажите " 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>
...