Android水平RecyclerView滚动方向
Posted
技术标签:
【中文标题】Android水平RecyclerView滚动方向【英文标题】:Android Horizontal RecyclerView scroll Direction 【发布时间】:2016-10-10 12:50:35 【问题描述】:我制作了一个 Horizontal RecyclerView,它工作正常(感谢this),但滚动方向和数据从左到右展开;那么如何更改 RecyclerView 的滚动方向,如下图所示?
我的代码:
StaggeredGridLayoutManager staggeredGridLayoutManager =
new StaggeredGridLayoutManager(
2, //The number of Columns in the grid
LinearLayoutManager.HORIZONTAL);
【问题讨论】:
4 Ways - Horizontal RecyclerView In android 【参考方案1】:假设您在 RecyclerView 中使用 LinearLayoutManager
,那么您可以在 LinearLayoutManager 构造函数中将 true
作为第三个参数传递。
例如:
mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true));
如果您使用的是StaggeredGridLayoutManager
,那么您可以使用它提供的setReverseLayout
方法。
【讨论】:
是的,根据在构造函数中传递的标志,滚动会改变。非常感谢!【参考方案2】:您只需使用 xml 即可。
应用程序:reverseLayout="true" 完成工作!
<android.support.v7.widget.RecyclerView
android:layout_
android:layout_
android:divider="@null"
android:orientation="horizontal"
app:reverseLayout="true" />
【讨论】:
谢谢;但在我的情况下,xml 将不起作用,因为在我的代码中: StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager( 2, //网格中的列数 LinearLayoutManager.HORIZONTAL); 谢谢。对于法线方向设置app:reverseLayout="false"
.
正常方向可以省略这一行
对于AndroidX,app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
【参考方案3】:
使用 androidx 的 XML 方法:
<androidx.recyclerview.widget.RecyclerView
android:layout_
android:id="@+id/my_recycler_view"
android:orientation="horizontal"
tools:listitem="@layout/my_item"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
android:layout_>
【讨论】:
这需要 AndroidX。对于支持库,请使用app:layoutManager="android.support.v7.widget.LinearLayoutManager"
。
是吗?使用androidx有什么问题【参考方案4】:
带有 imageview 和 textview 的水平 RecyclerView
xml文件
main.xml
<LinearLayout
android:layout_
android:layout_
android:layout_marginTop="5dp"
android:orientation="vertical"
android:background="#070e94">
<View
android:background="#787878"
android:layout_
android:layout_
/>
<android.support.v7.widget.RecyclerView
android:id="@+id/wallet"
android:background="#070e94"
android:layout_
android:layout_/>
item.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_
android:layout_
android:layout_marginTop="5dp">
<ImageView
android:id="@+id/image"
android:layout_
android:layout_
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_
android:layout_ />
Java 类
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);
适配器类
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;
【讨论】:
【参考方案5】:你可以使用改变滑动的方向
reverselayout 属性 = true。
在 Kotlin 中,
val layoutManager = LinearLayoutManager(this@MainActivity,LinearLayoutManager.HORIZONTAL,true)
recyclerview.layoutManager = layoutManager
在 Java 中,
LinearLayoutManager layoutManager = new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,true);
recyclerview.setLayoutManager(layoutManager);
实际上它颠倒了布局。
如果显示如下
1.2..3....10
它会变成
10.9..8....1
创建Horizontal RecyclerView有很多方法。
4 Ways To Create Horizontal RecyclerView In Android
【讨论】:
【参考方案6】:在 Recycler 布局管理器中,第二个参数是 spanCount 增加或减少跨度计数将改变屏幕上显示的元素数量
RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 2, //The number of Columns in the grid
,GridLayoutManager.HORIZONTAL,false);
recyclerView.setLayoutManager(mLayoutManager);
【讨论】:
【参考方案7】:只需添加两行代码即可使recyclerview 的方向为水平。所以在初始化 Recyclerview 时添加这些行。
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false);
my_recycler.setLayoutManager(linearLayoutManager);
【讨论】:
【参考方案8】:下面这段代码就够了
RecyclerView recyclerView;
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL,true);
recyclerView.setLayoutManager(layoutManager);
【讨论】:
【参考方案9】:在片段中试试这个:
layoutManager = new LinearLayoutManager(getActivity(),LinearLayoutManager.HORIZONTAL,false);
mRecyclerView.setLayoutManager(layoutManager);
【讨论】:
【参考方案10】:试试这个
我已经尝试了以上所有答案,它向我展示了相同的垂直回收器视图,所以我尝试了另一个示例。
初始化适配器
private Adapter mAdapter;
这样设置适配器
mAdapter = new Adapter();
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false);
recycler_view.setLayoutManager(linearLayoutManager);
recycler_view.setAdapter(mAdapter);
希望这也对你有用 完整代码请参考this链接
【讨论】:
【参考方案11】:这是关于波斯语的问题, 只需要旋转您的 ListView、GridView 或 ....,然后旋转您的单元格。 您可以在 xml android:rotate="360" 中执行此操作。
【讨论】:
【参考方案12】://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'
【讨论】:
您能否为您的答案添加一些解释?【参考方案13】: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
【讨论】:
【参考方案14】:您的 XML 设计在这里
<androidx.recyclerview.widget.RecyclerView android:id="@+id/rvPopularPerson" android:layout_width="match_parent" android:layout_height="215dp"/>
记住首先要修复 recyclerview 的高度,例如 100dp、200dp、300dp 等。
Java 代码在这里recyclerView= view.findViewById(R.id.rvPopularPerson); recyclerView.setHasFixedSize(true); recyclerView.setLayoutManager(new LinearLayoutManager(this.getActivity(), LinearLayoutManager.HORIZONTAL, false));
我想它会对你有所帮助。
【讨论】:
以上是关于Android水平RecyclerView滚动方向的主要内容,如果未能解决你的问题,请参考以下文章
Android 布局:具有滚动行为的 Viewpager 内的垂直 Recyclerview 内的水平 Recyclerview
嵌套在 BottomSheet 中的 RecyclerView(水平)防止垂直滚动
Android TV端的(RecyclerView)水平滚动焦点错乱问题