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都遵循相同的模式:
- 直线布局经理
- GridLayoutManager(我们将使用它)
- 交错式布局管理器
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);