代码之家  ›  专栏  ›  技术社区  ›  f.trajkovski

在水平线性布局中添加新行

  •  0
  • f.trajkovski  · 技术社区  · 6 年前

    我正在以水平方向的线性布局动态创建图像。我正在使用:

    ImageView imageView = new ImageView(getContext());
                imageView.setLayoutParams(new 
    android.view.ViewGroup.LayoutParams(200,200));
                imageView.setOnTouchListener(new MyTouchListener());
                imageView.setOnDragListener(new MyDragListener());
                setImageIcon(imageView, ap.getPackageName());
                topLayout.addView(imageView);
    

    但在屏幕的末尾,它继续在右侧无限添加图标。我不知何故想添加边框并从新行开始。我有什么办法可以这样做吗?这是我的xml:

    <?xml version="1.0" encoding="utf-8"?>
    <GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/master_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:columnCount="4"
            android:columnWidth="320dp"
            android:orientation="vertical"
            android:rowCount="8"
            android:stretchMode="columnWidth">
    
    <LinearLayout
        android:id="@+id/top_layout"
        android:layout_width="match_parent"
        android:layout_height="280dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:background="@drawable/shape_droptarget_grey"
        android:gravity="left"
        android:orientation="horizontal">
        <TextView android:id="@+id/text_top"
                  android:layout_width="match_parent"
                  android:layout_height="40dp"
                  android:clickable="false"
                  android:text="Security upgrade avaliable"
                  android:textAlignment="center"
                  android:textSize="28dp"/>
    
    </LinearLayout>
    
    
    <LinearLayout
        android:id="@+id/bottom_layout"
        android:layout_width="match_parent"
        android:layout_height="280dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:background="@drawable/shape_droptarget_green"
        android:gravity="left"
        android:orientation="horizontal">
        <TextView android:id="@+id/text_bottom"
                  android:layout_width="match_parent"
                  android:layout_height="40dp"
                  android:clickable="false"
                  android:gravity="center"
                  android:text="Secured Apps"
                  android:textAlignment="center"
                  android:textSize="28dp"/>
    
    </LinearLayout>
    
    
    </GridLayout>
    
    1 回复  |  直到 6 年前
        1
  •  4
  •   Rainmaker    6 年前

    不能使用线性布局。如果将“方向”设置为“水平”,则不会转到新行。 您可以决定要在布局中允许多少视图,然后始终这样检查,如果超过此计数,只需在下面添加另一个线性布局,以模拟topLayout中的新行,并开始添加到新布局,但这是一种解决方法

    int childCount = ((ViewGroup)linearLayout).getChildCount();
    

    一个更干净的解决方案是按原样使用GridLayout。您还可以在那里动态添加图像,并标记行中元素的最大值,而无需使用LinearYout。下面的代码意味着您将在一行中包含2个元素,行数与您放置的行数相同。您可以使用 add 方法添加ImageView。

    GridLayout mLayout = new GridLayout(0,2);
    

    另一个解决方案是FlowLayout的一个版本。看看这个 git example