Android Horizontal RecyclerView scroll Direction
Matthew Martinez
I made a Horizontal RecyclerView and it works fine(thanks to this) but the direction of scroll and data are expand from left to right; then How can I change the RecyclerView scroll direction like in the picture below?
My Code:
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager( 2, //The number of Columns in the grid LinearLayoutManager.HORIZONTAL); 1 14 Answers
Assuming you use LinearLayoutManager in your RecyclerView, then you can pass true as third argument in the LinearLayoutManager constructor.
For example:
mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true));If you are using the StaggeredGridLayoutManager, then you can use the setReverseLayout method it provides.
You can do it with just xml.
the app:reverseLayout="true" do the job!
<android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="wrap_content" android:divider="@null" android:orientation="horizontal" app:reverseLayout="true" /> 4 XML approach using androidx:
<androidx.recyclerview.widget.RecyclerView android:layout_width="match_parent" android:id="@+id/my_recycler_view" android:orientation="horizontal" tools:listitem="@layout/my_item" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" android:layout_height="wrap_content"> 4 For changing the direction of swipe you can use
reverselayout attribute = true.
In Kotlin,
val layoutManager = LinearLayoutManager(this@MainActivity,LinearLayoutManager.HORIZONTAL,true)
recyclerview.layoutManager = layoutManagerIn Java,
LinearLayoutManager layoutManager = new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,true); recyclerview.setLayoutManager(layoutManager);Actually it reverses the layout.
If it shows like below
1.2..3....10
it will change to
10.9..8....1
For creating Horizontal RecyclerView there are many ways.
4 Ways To Create Horizontal RecyclerView In Android
Horizontal RecyclerView with imageview and textview
xml file
main.xml
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:orientation="vertical" android:background="#070e94">
<View android:background="#787878" android:layout_width="match_parent" android:layout_height="1dp" />
<android.support.v7.widget.RecyclerView android:id="@+id/wallet" android:background="#070e94" android:layout_width="match_parent" android:layout_height="100dp"/>item.xml
<LinearLayout
xmlns:android=""
android:orientation="vertical"
android:layout_width="100dp"
android:layout_height="match_parent"
android:layout_marginTop="5dp">
<ImageView android:id="@+id/image" android:layout_width="50dp" android:layout_height="50dp" android:scaleType="fitXY" android:src="@drawable/bus" android:layout_gravity="center"/>
<TextView android:textColor="#000" android:textSize="12sp" android:layout_gravity="center" android:padding="5dp" android:id="@+id/txtView" android:textAlignment="center" android:hint="Electronics" android:layout_width="80dp" android:layout_height="wrap_content" />Java Class
ActivityMaim.java
public class MainActivity extends AppCompatActivity{
private RecyclerView horizontal_recycler_view;
private ArrayList<Arraylist> horizontalList;
private CustomAdapter horizontalAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); horizontal_recycler_view= (RecyclerView) findViewById(R.id.horizontal_recycler_view); horizontalList = new ArrayList<Arraylist>(); for (int i = 0; i < MyData.nameArray.length; i++) { horizontalList.add(new Arraylist( MyData.nameArray[i], MyData.drawableArray[i] )); } horizontalAdapter=new CustomAdapter(horizontalList); LinearLayoutManager horizontalLayoutManagaer = new LinearLayoutManager(MainActivity.this, LinearLayoutManager.HORIZONTAL, false); horizontal_recycler_view.setLayoutManager(horizontalLayoutManagaer); horizontal_recycler_view.setAdapter(horizontalAdapter);
}}Adaper Class
CustomAdapter.java
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> {
private ArrayList<Arraylist> dataSet;
public static class MyViewHolder extends RecyclerView.ViewHolder { TextView textViewName; ImageView imageViewIcon; public MyViewHolder(View itemView) { super(itemView); this.textViewName = (TextView) itemView.findViewById(R.id.txtView); //this.textViewVersion = (TextView) itemView.findViewById(R.id.textViewVersion); this.imageViewIcon = (ImageView) itemView.findViewById(R.id.image); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (getPosition()==0) { Toast.makeText(v.getContext(), " On CLick one", Toast.LENGTH_SHORT).show(); } if (getPosition()==1) { Toast.makeText(v.getContext(), " On CLick Two", Toast.LENGTH_SHORT).show(); } if (getPosition()==2) { Toast.makeText(v.getContext(), " On CLick Three", Toast.LENGTH_SHORT).show(); } if (getPosition()==3) { Toast.makeText(v.getContext(), " On CLick Fore", Toast.LENGTH_SHORT).show(); } } }); }
}
public CustomAdapter(ArrayList<Arraylist> data) { this.dataSet = data;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.card_view, parent, false); //view.setOnClickListener(MainActivity.myOnClickListener); MyViewHolder myViewHolder = new MyViewHolder(view); return myViewHolder;
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int listPosition) { TextView textViewName = holder.textViewName; // TextView textViewVersion = holder.textViewVersion; ImageView imageView = holder.imageViewIcon; textViewName.setText(dataSet.get(listPosition).getName()); //textViewVersion.setText(dataSet.get(listPosition).getVersion()); imageView.setImageResource(dataSet.get(listPosition).getImage());
}
@Override
public int getItemCount() { return dataSet.size();
}}Arraylist.java
public class Arraylist{
String name;
int image;
public Arraylist(String name, int image) { this.name = name; this.image=image;
}
public String getName() { return name;
}
public int getImage() { return image;
}}MyData.java
public class MyData {
static String[] nameArray = {"Gas", "Insurance", "Electronics", "Other Services"};
static Integer[] drawableArray = {R.drawable.gas_gas, R.drawable.insurance, R.drawable.electric, R.drawable.services};} In Recycler Layout manager the second parameter is spanCount increase or decrease in span count will change number of elements show on your screen
RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 2, //The number of Columns in the grid
,GridLayoutManager.HORIZONTAL,false); recyclerView.setLayoutManager(mLayoutManager); Just add two lines of code to make orientation of recyclerview as horizontal. So add these lines when Initializing Recyclerview.
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false);
my_recycler.setLayoutManager(linearLayoutManager); This following code is enough
RecyclerView recyclerView;
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL,true); recyclerView.setLayoutManager(layoutManager); Try this in fragment :
layoutManager = new LinearLayoutManager(getActivity(),LinearLayoutManager.HORIZONTAL,false);
mRecyclerView.setLayoutManager(layoutManager); Try this
I have tried all above answers it's showing me same vertically recycler view, so I have tried another example.
Initialize the adapter
private Adapter mAdapter;set the adapter like this
mAdapter = new Adapter(); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false); recycler_view.setLayoutManager(linearLayoutManager); recycler_view.setAdapter(mAdapter);
Hope this will also work for you For Complete code please refer this link
It's about Persian language problem, Just need to rotate your ListView, GridView, or .... and after that rotate your cell. You can do it in xml android:rotate="360".
//in fragment page: recyclerView.setLayoutManager(new LinearLayoutManager(this.getActivity(), HORIZONTAL,true));
//this worked for me but before that please import :
implementation 'com.android.support:recyclerview-v7:28.0.0' 1 For Horizontal Scroolview in RecyclerView in Kotlin: - We use this Code recycler_upcoming.layoutManager = LinearLayoutManager(sContext, LinearLayoutManager.HORIZONTAL, false) recycler_upcoming.adapter = InboxUpcomingAdapter(this@InboxMessageFragment, arrayList, sContext)
-> sContext mean Ur Context
-> If you pass false then scroll right to left
-> If You pass true then scroll left to right Your XML design here <androidx.recyclerview.widget.RecyclerView android:id="@+id/rvPopularPerson" android:layout_width="match_parent" android:layout_height="215dp"/>
Remember first off all fix recyclerview height like 100dp, 200dp, 300dp etc.
Java Code is here recyclerView= view.findViewById(R.id.rvPopularPerson); recyclerView.setHasFixedSize(true); recyclerView.setLayoutManager(new LinearLayoutManager(this.getActivity(), LinearLayoutManager.HORIZONTAL, false));
I think it will help you.