设置卧式RecyclerView

时间:2018-11-16 14:23:20

标签: android-studio android-recyclerview padding android-cardview horizontal-scrolling

我想为Recycler View中的第一个图块添加10dp填充。

就像在Book My show应用中一样,第一个应用具有10dp填充(假设),然后是两个图块之间的填充(假设为5dp)。

enter image description here

类似地,最后一个图块的末尾也有10dp(假定)填充

enter image description here

我要添加回收者视图的代码如果有人想在其中添加一些内容 RecyclerMetroAdapter.java

package com.example.android.indianmetro;

import android.content.Context;
import android.graphics.Bitmap;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;

import java.util.ArrayList;

public class RecyclerViewAdapter extends 
RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {

private static final String TAG = "RecyclerViewAdapter";

private ArrayList<String> mPlaceNames = new ArrayList<>();
private ArrayList<String> mPlaceImageUrl = new ArrayList<>();
private ArrayList<String> mPlaceMetroDistance = new ArrayList<>();
private ArrayList<String> mClosestMetro = new ArrayList<>();
private Context mContext;

public RecyclerViewAdapter(Context context, ArrayList<String> placeNames, ArrayList<String> placeImageUrl,
                           ArrayList<String> placeMetroDistance, ArrayList<String> closestMetro    ) {
    mPlaceNames = placeNames;
    mPlaceImageUrl = placeImageUrl;
    mPlaceMetroDistance = placeMetroDistance;
    mClosestMetro = closestMetro;
    mContext = context;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.horizontal_item, viewGroup, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
    Log.d(TAG, "onCreateViewHolder: called");

    Glide.with(mContext)
            .asBitmap()
            .load(mPlaceImageUrl.get(i))
            .into(viewHolder.placeImage);

    viewHolder.placeName.setText(mPlaceNames.get(i));
    viewHolder.placeMetroDistance.setText(mPlaceMetroDistance.get(i));
    viewHolder.closestMetro.setText(mClosestMetro.get(i));

}

@Override
public int getItemCount() {
    if (mPlaceNames.size() < 8){
        return mPlaceNames.size();
    } else return 8;
}

public class ViewHolder extends RecyclerView.ViewHolder{

    ImageView placeImage;
    TextView placeName;
    TextView placeMetroDistance;
    TextView closestMetro;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);

        placeImage = (ImageView) itemView.findViewById(R.id.image);
        placeName = itemView.findViewById(R.id.textView);
        placeMetroDistance = itemView.findViewById(R.id.textView2);
        closestMetro = itemView.findViewById(R.id.placeMetroName);
    }
}
}

我在RecyclerView中使用的图块代码

horizo​​ntal_item.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="wrap_content"
android:layout_height="wrap_content">

<android.support.v7.widget.CardView
    android:id="@+id/cardView2"
    android:layout_width="120dp"
    android:layout_height="140dp"
    android:layout_marginStart="10dp"
    android:layout_marginTop="8dp"
    app:cardCornerRadius="10dp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <ImageView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:src="@drawable/delhi1" />

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


<TextView
    android:id="@+id/textView"
    android:layout_width="110dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="10dp"
    android:layout_marginTop="2dp"
    android:ellipsize="end"
    android:maxLines="1"
    android:text="India Gate"
    android:textColor="@color/darkHeading"
    android:textSize="15sp"
    android:textStyle="bold"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/cardView2" />

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="10dp"
    android:layout_marginTop="36dp"
    android:text="2.4 Km Away"
    android:textColor="@color/blueAccent"
    android:textSize="10sp"
    android:textStyle="bold"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/cardView2" />

<ImageView
    android:id="@+id/imageView2"
    android:layout_width="10dp"
    android:layout_height="10dp"
    android:layout_marginStart="10dp"
    android:layout_marginTop="24dp"
    android:src="@drawable/ic_metro"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/cardView2" />

<TextView
    android:id="@+id/placeMetroName"
    android:layout_width="90dp"
    android:layout_height="wrap_content"
    android:layout_marginLeft="25dp"
    android:layout_marginStart="25dp"
    android:layout_marginTop="20dp"
    android:ellipsize="end"
    android:maxLines="1"
    android:text="Central Secretariat"
    android:textColor="@color/subHeading"
    android:textSize="12sp"
    android:textStyle="bold"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/cardView2" />

</android.support.constraint.ConstraintLayout>

另外,如果有人可以建议如何使瓷砖从左侧完全可见并且不允许任何瓷砖从左侧部分隐藏

enter image description here

1 个答案:

答案 0 :(得分:2)

我想您可以尝试在onBindViewHolder()中设置填充,
首先:

if (i == 0) 
    viewHolder.placeImage.setPadding(10, 5, 5, 5);

最后一个:

if (i == mPlaceImageUrl.size() - 1) 
    viewHolder.placeImage.setPadding(5, 5, 10, 5);

将数字更改为左->上->右->下填充。