Ограничения пользовательского макета повторного просмотра меняются для каждого раздутого представления, вызывая проблемы - PullRequest
0 голосов
/ 28 мая 2019

У меня есть просмотрщик, который раздувает данные, извлеченные из json.

Проблема, с которой я сталкиваюсь, связана с дизайном - иногда текст выравнивается правильно, изображение отображается, а иногда текст слишком длинный, что приводит к тому, чтоЯ думаю, что изображение не будет показано.

вот мой 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.support.constraint.ConstraintLayout
        android:layout_width="395dp"
        android:layout_height="170dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:background="#335634"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <de.hdodenhof.circleimageview.CircleImageView
            android:id="@+id/heroImage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:src="@mipmap/ic_launcher"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/heroTitle"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:layout_marginEnd="16dp"
            android:autoSizeMaxTextSize="25dp"
            android:autoSizeMinTextSize="15dp"
            android:text="Hero Title"
            android:textSize="25dp"
            android:textStyle="bold"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/heroDescription"
            android:layout_width="200dp"
            android:breakStrategy="simple"
            android:layout_height="wrap_content"
            android:layout_marginStart="36dp"
            android:layout_marginTop="24dp"
            android:layout_marginEnd="16dp"
            android:autoSizeMaxTextSize="25dp"
            android:autoSizeMinTextSize="15dp"
            android:text="TextView"
            android:textAlignment="center"
            android:textSize="18dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/heroImage"
            app:layout_constraintTop_toBottomOf="@+id/heroTitle" />

    </android.support.constraint.ConstraintLayout>
</android.support.constraint.ConstraintLayout>

и вот мой адаптер:

public class HeroesAdapter extends RecyclerView.Adapter<HeroesAdapter.HeroesViewHolder> {

    private List<Hero> heroList;

    public HeroesAdapter(List<Hero> heroList) {
        this.heroList = heroList;
    }


    @NonNull
    @Override
    public HeroesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View rowView = LayoutInflater.from(parent.getContext()).inflate(R.layout.hero_cell, parent, false);
        return new HeroesViewHolder(rowView);
    }

    @Override
    public void onBindViewHolder(@NonNull HeroesViewHolder holder, int position) {

        Hero currentHero = heroList.get(position);
        String str = String.join(",", currentHero.abilities);

        holder.heroTitle.setText(currentHero.title);
        holder.heroAbilties.setText(str);
        Picasso.get().load(currentHero.image).resize(500,500).into(holder.heroesImage);

    }

    @Override
    public int getItemCount() {
        return heroList.size();
    }

    public static class HeroesViewHolder extends RecyclerView.ViewHolder {

        ImageView heroesImage;
        TextView heroTitle;
        TextView heroAbilties;


        public HeroesViewHolder(@NonNull View itemView) {
            super(itemView);
            heroesImage = itemView.findViewById(R.id.heroImage);
            heroTitle = itemView.findViewById(R.id.heroTitle);
            heroAbilties = itemView.findViewById(R.id.heroDescription);
        }
    }
}

Это результат, который я получаю и это желаемый результат.

проблемы, с которыми я сталкиваюсь:

  1. , чтобы каждая строка имела чистый дизайн и действовала одинаково для всех.

  2. изображения иногда отображаются, иногда нет.

  3. вид снизу - «наполовину на экране» и наполовину вне экрана.

Ответы [ 2 ]

2 голосов
/ 28 мая 2019

Используя LinearLayout, вы можете создать свою ячейку hero_cell, которая даст вам желаемый результат. как я это делаю сейчас.

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="horizontal"
    android:padding="10dp"
    android:background="#335634"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">


    <de.hdodenhof.circleimageview.CircleImageView
        android:id="@+id/heroImage"
        android:layout_width="80dp"
        android:layout_height="wrap_content"
        android:src="@drawable/logo"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <LinearLayout
        android:background="#335634"
        android:layout_marginLeft="20dp"
        android:orientation="vertical"
        android:layout_gravity="center_vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/heroTitle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:autoSizeMaxTextSize="25dp"
            android:autoSizeMinTextSize="15dp"
            android:text="Hero Title"
            android:textSize="25dp"
            android:textStyle="bold"
            />

        <TextView
            android:id="@+id/heroDescription"
            android:layout_width="match_parent"
            android:breakStrategy="simple"
            android:layout_height="wrap_content"
            android:autoSizeMaxTextSize="25dp"
            android:autoSizeMinTextSize="15dp"
            android:text="TextView"
            android:textSize="18dp" />
    </LinearLayout>

1 голос
/ 28 мая 2019

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

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_margin="10dp"
    app:cardCornerRadius="10dp"
    android:elevation="10dp"
    android:layout_height="wrap_content">

    <android.support.constraint.ConstraintLayout
        android:layout_width="395dp"
        android:layout_height="170dp"
        android:background="#fff"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <de.hdodenhof.circleimageview.CircleImageView
            android:id="@+id/heroImage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:src="@mipmap/ic_launcher"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/heroTitle"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginTop="20dp"
            android:layout_marginEnd="16dp"
            android:autoSizeMaxTextSize="25dp"
            android:autoSizeMinTextSize="15dp"
            android:text="Hero Title"
            android:textColor="#000"
            android:textSize="25dp"
            android:textStyle="bold"
            app:layout_constraintBottom_toTopOf="@+id/heroDescription"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/heroImage"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/heroDescription"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginTop="16dp"
            android:layout_marginEnd="16dp"
            android:autoSizeMaxTextSize="25dp"
            android:autoSizeMinTextSize="15dp"
            android:breakStrategy="simple"
            android:text="TextView"
            android:textColor="#444"
            android:textSize="18dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/heroImage"
            app:layout_constraintTop_toBottomOf="@+id/heroTitle" />

    </android.support.constraint.ConstraintLayout>
</android.support.v7.widget.CardView>
...