android 将视图动态添加到LinearLayout未按预期工作

uinbv5nw  于 2023-02-02  发布在  Android
关注(0)|答案(3)|浏览(110)

我在线性布局中动态地膨胀视图,但是一旦线性布局到达第一行的末尾,它就会切断其余的视图,并且不会从第二行开始。

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,但是也不起作用。我如何才能使布局从第二行开始,一旦第一行满了?

8yoxcaq7

8yoxcaq71#

线性布局可以水平或垂直填充视图,因此您所期望的第二行不能只使用线性布局。您可以尝试使用水平滚动视图进行水平滚动。对于您所描述的类似视图的确切流程,您可以使用此第三方https://github.com/nex3z/FlowLayout
它可以管理动态膨胀视图的流程,例如,如果第一行中没有空间,那么它将把下一个视图放在第二行中。
此外,您还可以使用材料设计库芯片https://material.io/components/chips/#usage

kmb7vmvb

kmb7vmvb2#

LinearLayout的工作方式与它必须的完全一样,因为你指定它为水平的。对于这样的行为,你需要带有GridLayoutManager的RecyclerView或者创建你自己的布局;).

nc1teljy

nc1teljy3#

实际上它做的正是它应该做的,LinearLayout是线性的!,并把它的子视图放在一个单独的水平或垂直行。我给你的建议是,创建动态的水平LinearLayout,就像你已经做的TextViews。并把每3或4个文本视图(取决于屏幕大小)在它里面。并把所有的LinearLayout在一个垂直LinearLayout...
当然,在你的情况下,这不是一个好主意,你能做的最好的事情是使用回收视图。但我认为你有问题。

相关问题