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

时间:2018-02-16 15:31:02

标签: android android-linearlayout

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

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 个答案:

答案 0 :(得分:1)

线性布局无法做到这一点。如果将方向设置为水平,则永远不会转到新行。 您可以决定在布局中允许多少视图,然后如果超过此计数则总是这样检查,只需在下面添加另一个linearlayout以模仿topLayout的新行并开始添加到新布局但是这是一个变通方法

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

更清洁的解决方案是按原样使用GridLayout。您还可以在那里动态添加图像,并在不使用LinearLyout的情况下标记行中元素的最大值。下面的代码表示您将连续使用2个元素,并且放置的行数也是多少。您可以使用add方法添加ImageViews。

GridLayout mLayout = new GridLayout(0,2);

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