由于您的数据是动态的,因此建议您将RecyclerView
与GridLayoutManager
一起使用,并且spanCount
为2。
您的项目布局非常简单(只是一个TextView,但是您可以将此技术用于更复杂的项目布局(例如卡片,图像+标签等):
有很多步骤,但这是您将要使用的很多东西,每个RV遵循相同的模式:
注意:LayoutManager有3个选择
1。 item_language.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<!-- Width and Height must be wrap -->
<TextView
android:id="@+id/languageName"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:text="@tools:sample/cities" />
<!-- there are only a few @tools:sample choices available -->
</androidx.constraintlayout.widget.ConstraintLayout>
2。 LanguageViewHolder
class LanguageViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
// Matches views in item_language.xml
private val languageName = itemView.languageName
fun bind(language: String) {
languageName.text = language
}
}
4。 LanguagesAdapter
class LanguagesAdapter(private val data: List<String>) :
RecyclerView.Adapter<LanguageViewHolder>() {
override fun getItemCount() = data.size
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
LayoutInflater.from(parent.context)
.inflate(R.layout.item_language, parent, false)
.let { LanguageViewHolder(it) }
override fun onBindViewHolder(holder: LanguageViewHolder, position: Int) =
holder.bind(data[position])
}
5。 activity_my.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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="match_parent"
tools:context=".MyActivity">
<!-- the rest of your layout -->
<!-- set Orientation, LayoutManager, and SpanCount in your XML -->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/languagesGrid"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="2"
tools:listitem="@layout/item_language" />
</androidx.constraintlayout.widget.ConstraintLayout>
6。 MyActivity onCreate
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_grid)
val languages = listOf("English", "Chinese", "Spanish", "German", "French")
languagesGrid.adapter = LanguagesAdapter(languages)
}
我可以为您提供帮助。
layoutManager = new GridLayoutManager(context, 2, RecyclerView.VERTICAL, false);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(adapter);
第一种方式:
在XML文件中,将android:orientation="horizontal"
属性插入到LinearLayout元素中。
第二种方式:
在Kotlin中,您可以这样做:
myLinearLayout.orientation = LinearLayout.HORIZONTAL