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

Java 如何将线性布局中的项目显示为两列,java,android-layout,kotlin,android-xml,Java,Android Layout,Kotlin,Android Xml,我正在处理一个应用程序,应用程序的一个部分显示选定的项目。例如,语言。现在,语言以线性布局显示,其中每行只能有一项。我想改变它,在一行中可以显示两种语言。这意味着有两列: 由于数据是动态的,我建议您使用RecyclerView和GridLayoutManager,以及spanCount为2 您的项目布局非常简单(只是一个文本视图),但您可以将此技术用于更复杂的项目布局(例如卡片、图像+标签等): 有许多步骤,但这是您将经常使用的,每个RV都遵循相同的模式: 1个项目的布局 RV视图支架(匹配的

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


由于数据是动态的,我建议您使用
RecyclerView
GridLayoutManager
,以及
spanCount
为2

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

有许多步骤,但这是您将经常使用的,每个RV都遵循相同的模式:

  • 1个项目的布局
  • RV视图支架(匹配的项目布局)
  • 数据模型(您可以只使用字符串)
  • RV适配器(只需遵循模式)
  • 活动布局(带RV)
  • 活动onCreate(设置适配器)
  • 注意:LayoutManager有3种选择

    • 直线布局经理
    • GridLayoutManager(我们将使用它)
    • 交错式布局管理器
    1。item_language.xml

    
    
    2。语言视图持有者

    4。语言适应能力

    我想这可能对你有帮助

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

    这是一个固定的语言列表吗?还是动态的,基于数据?不,它是动态的。基本上有一张卡片,上面显示的语言基于用户在编辑片段中编辑的内容。因此,是的,基于数据,这可以使用表布局和表行来完成吗?可以,但因为您不知道需要多少视图,所以需要使用代码动态创建和管理它们(IMO比RV更费劲)。@fxrzm-设计师只考虑2个XML文件。要使其在运行时工作,还必须具有所有Kotlin文件。我猜您错过了一个步骤,比如在
    onCreate
    中设置
    适配器。远程调试将非常困难;您可以在运行时调试器中跟踪它吗?(get data>onCreate>Adapter>ViewHolder)@fxrzm-另一种可能是您使用的是ConstraintLayout,但您的RV没有正确约束。如果缺少垂直或水平约束,则宽度或高度可能为零。此外,RVs在对话框中的大小似乎不正确:/
    
    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])
    
    }
    
    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);