我在线性布局中动态地膨胀视图,但是一旦线性布局到达第一行的末尾,它就会切断其余的视图,并且不会从第二行开始。
for(int a = 0; a < mSkills.get(i).size(); a++){
View singleSkill = LayoutInflater.from(mContext)
.inflate(R.layout.singleskill, holder.mSkillLayout, false);
TextView skillText = singleSkill.findViewById(R.id.singleskilltext);
skillText.setText(mSkills.get(i).get(a));
holder.mSkillLayout.addView(skillText);
}
对于线性布局,我将其高度设置为wrap_content
:
<LinearLayout
android:id="@+id/ll_skills"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_below="@+id/tv_description"
android:layout_margin="16dp"/>
我试着将它设置为一个定义的高度e.g 300dp
,但是也不起作用。我如何才能使布局从第二行开始,一旦第一行满了?
3条答案
按热度按时间8yoxcaq71#
线性布局可以水平或垂直填充视图,因此您所期望的第二行不能只使用线性布局。您可以尝试使用水平滚动视图进行水平滚动。对于您所描述的类似视图的确切流程,您可以使用此第三方https://github.com/nex3z/FlowLayout
它可以管理动态膨胀视图的流程,例如,如果第一行中没有空间,那么它将把下一个视图放在第二行中。
此外,您还可以使用材料设计库芯片https://material.io/components/chips/#usage
kmb7vmvb2#
LinearLayout的工作方式与它必须的完全一样,因为你指定它为水平的。对于这样的行为,你需要带有GridLayoutManager的RecyclerView或者创建你自己的布局;).
nc1teljy3#
实际上它做的正是它应该做的,LinearLayout是线性的!,并把它的子视图放在一个单独的水平或垂直行。我给你的建议是,创建动态的水平LinearLayout,就像你已经做的TextViews。并把每3或4个文本视图(取决于屏幕大小)在它里面。并把所有的LinearLayout在一个垂直LinearLayout...
当然,在你的情况下,这不是一个好主意,你能做的最好的事情是使用回收视图。但我认为你有问题。