我正在处理一个应用程序,该应用程序的一部分显示所选项目。例如,语言。现在,这些语言以线性布局显示,其中每行只能有一项。我想以一种可以在一行中显示两种语言的方式进行更改。所以这意味着两列:
如何将线性布局中的项目显示为两列
•
问答
my16991311 回答:如何将线性布局中的项目显示为两列
由于数据是动态数据,因此建议您将RecyclerView
与GridLayoutManager
一起使用,并将spanCount
设为2。
您的项目布局非常简单(只是TextView),但是您可以将此技术用于更复杂的项目布局(例如卡片,图像+标签等):
有很多步骤,但是您会用到很多东西,每个RV遵循相同的模式:
- 1个项目的布局
- RV ViewHolder(匹配项的布局)
- 数据模型(您可以只使用String)
- RV适配器(只需遵循模式)
- 活动布局(带有RV)
- Activity onCreate(用于设置适配器)
注意:LayoutManager有3个选择
- LinearLayoutManager
- GridLayoutManager (我们将使用它)
- StaggeredGridLayoutManager
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);