相信在android开发中,对于recyclerview的使用是家常便饭,随便一个列表几乎都是它的身影,要么就是listview实现,奈何listview的可拓展性不如recyclerView强,而且性能也不如recyclerView。所以现在使用它的应该占大多数叭。 对于recyclerView的布局管理器相信大家都有所使用,正是有了这东西,才使得recyclerView可以横着、竖着、网格布局,那么就先来一段我们比较常用写recyclerView的代码吧,通常是在代码中定义布局管理器,如下所示,对于下面这3种情景应该很常见。
//垂直方向
val layoutManager=LinearLayoutManager(this)
layoutManager.orientation=LinearLayoutManager.VERTICAL
//水平方向
val layoutManager=LinearLayoutManager(this)
layoutManager.orientation=LinearLayoutManager.HORIZONTAL
//网格布局,数量为2
val gridLayoutManager=GridLayoutManager(this,2)
下面就来说一下,recyclerView的布局管理器新的写法,奈何我这见识少,一次偶然的机会(忘记在哪看的了)RecyclerView的布局管理器,竟然还可以写在布局控件中!!!当我看到这种写法我是惊讶到了,因为我从来没这样写过,而且一些关于recyclerView例子通常也是在代码中定义布局管理器。 首先,在布局当中RecyclerView控件有一个layoutManager属性:可以设置如图所示的几个值
下面来看以下代码,这里在xml中设置布局管理器,同上面在代码中设置是一样的效果
//垂直方向
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_info_ll_v"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
android:orientation="vertical"
/>
//水平方向
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_info_ll_h"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
android:orientation="horizontal"
/>
//网格布局 数量为2
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_info_g"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="2"
/>
在activity中我们只需要给recyclerView设置适配器即可
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding= ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
val list= ArrayList<String>()
for (i in 1..4){
list.add("你好${i}")
}
val infoAdapter=InfoAdapter(list)
binding.rvInfoLlV.adapter=infoAdapter
binding.rvInfoLlH.adapter=infoAdapter
binding.rvInfoG.adapter=infoAdapter
}
}
效果图