我正在以水平方向线性布局动态创建图像。我正在使用:
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>
答案 0 :(得分:1)
线性布局无法做到这一点。如果将方向设置为水平,则永远不会转到新行。 您可以决定在布局中允许多少视图,然后如果超过此计数则总是这样检查,只需在下面添加另一个linearlayout以模仿topLayout的新行并开始添加到新布局但是这是一个变通方法
int childCount = ((ViewGroup)linearLayout).getChildCount();
更清洁的解决方案是按原样使用GridLayout。您还可以在那里动态添加图像,并在不使用LinearLyout的情况下标记行中元素的最大值。下面的代码表示您将连续使用2个元素,并且放置的行数也是多少。您可以使用add
方法添加ImageViews。
GridLayout mLayout = new GridLayout(0,2);
另一个解决方案是FlowLayout的一个版本。看看这个git example