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

问题描述 投票:0回答:3

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

I want to display it like that without the seperators

java android-layout kotlin android-xml
3个回答
0
投票

由于您的数据是动态的,因此建议您将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)
}

0
投票

我可以为您提供帮助。

    layoutManager = new GridLayoutManager(context, 2, RecyclerView.VERTICAL, false);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setAdapter(adapter);

-1
投票

第一种方式:

在XML文件中,将android:orientation="horizontal"属性插入到LinearLayout元素中。

第二种方式:

在Kotlin中,您可以这样做:

myLinearLayout.orientation = LinearLayout.HORIZONTAL
© www.soinside.com 2019 - 2024. All rights reserved.