如何将线性布局中的项目显示为两列

我正在处理一个应用程序,该应用程序的一部分显示所选项目。例如,语言。现在,这些语言以线性布局显示,其中每行只能有一项。我想以一种可以在一行中显示两种语言的方式进行更改。所以这意味着两列:

如何将线性布局中的项目显示为两列

my16991311 回答:如何将线性布局中的项目显示为两列

由于数据是动态数据,因此建议您将RecyclerViewGridLayoutManager一起使用,并将spanCount设为2。

您的项目布局非常简单(只是TextView),但是您可以将此技术用于更复杂的项目布局(例如卡片,图像+标签等):

有很多步骤,但是您会用到很多东西,每个RV遵循相同的模式:

  1. 1个项目的布局
  2. RV ViewHolder(匹配项的布局)
  3. 数据模型(您可以只使用String)
  4. RV适配器(只需遵循模式)
  5. 活动布局(带有RV)
  6. 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);
本文链接:https://www.f2er.com/3127273.html

大家都在问