我试图以编程方式在线性布局中添加文本视图,但问题是,当我添加超过5或7个文本视图时,其他文本视图不会出现,所以我想在下一行添加这些textview,如何将这些textview添加到nextline.please帮助我。提前谢谢。
当我添加一些超过特定数量的textview时,应该在下一行添加。 我的代码如下:
ArrayList<HashMap<String, String>> sel = new ArrayList<HashMap<String, String>>();
LinearLayout langaugelayout = (LinearLayout) findViewById(R.id.languagelayout);
for (int i = 0; i < sel.size(); i++) {
LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
llp.setMargins(7, 0, 0, 0);
TextView lparams = (TextView) inflater.inflate(R.layout.textview,
null);
TextView tv = (TextView) lparams.findViewById(R.id.texted);
tv.setText(sel.get(i).get("lname"));
tv.setTypeface(Base.typeFaces.get(sel.get(i).get("id")));
tv.setLayoutParams(llp);
langaugelayout.addView(tv);
}
我在linearlayout中添加它。 xml 位于
之下 <LinearLayout
android:id="@+id/secondlayout"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_below="@+id/firstlayout"
android:layout_marginBottom="10dp"
android:layout_weight="0.05"
android:gravity="center"
android:orientation="horizontal" >
<LinearLayout /////// adding in this layout..
android:id="@+id/languagelayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
</LinearLayout>
<TextView
android:id="@+id/addmore"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add More"
android:layout_marginLeft="10dp"
android:textColor="@android:color/black"
android:textSize="25sp" />
</LinearLayout>
答案 0 :(得分:1)
它们看起来很好,很遗憾地添加了一些它们不适合你的屏幕: - )
答案 1 :(得分:1)
使自定义Flow Layout如下所示
public class FlowLayout extends ViewGroup {
private int line_height;
public static class LayoutParams extends ViewGroup.LayoutParams {
public final int horizontal_spacing;
public final int vertical_spacing;
/**
* @param horizontal_spacing
* Pixels between items, horizontally
* @param vertical_spacing
* Pixels between items, vertically
*/
public LayoutParams(int horizontal_spacing, int vertical_spacing) {
super(0, 0);
this.horizontal_spacing = horizontal_spacing;
this.vertical_spacing = vertical_spacing;
}
}
public FlowLayout(Context context) {
super(context);
}
public FlowLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
assert (MeasureSpec.getMode(widthMeasureSpec) != MeasureSpec.UNSPECIFIED);
final int width = MeasureSpec.getSize(widthMeasureSpec)
- getPaddingLeft() - getPaddingRight();
int height = MeasureSpec.getSize(heightMeasureSpec) - getPaddingTop()
- getPaddingBottom();
final int count = getChildCount();
int line_height = 0;
int xpos = getPaddingLeft();
int ypos = getPaddingTop();
int childHeightMeasureSpec;
if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST) {
childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(height,
MeasureSpec.AT_MOST);
} else {
childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(0,
MeasureSpec.UNSPECIFIED);
}
for (int i = 0; i < count; i++) {
final View child = getChildAt(i);
if (child.getVisibility() != GONE) {
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
child.measure(
MeasureSpec.makeMeasureSpec(width, MeasureSpec.AT_MOST),
childHeightMeasureSpec);
final int childw = child.getMeasuredWidth();
line_height = Math.max(line_height, child.getMeasuredHeight()
+ lp.vertical_spacing);
if (xpos + childw > width) {
xpos = getPaddingLeft();
ypos += line_height;
}
xpos += childw + lp.horizontal_spacing;
}
}
this.line_height = line_height;
if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.UNSPECIFIED) {
height = ypos + line_height;
} else if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST) {
if (ypos + line_height < height) {
height = ypos + line_height;
}
}
setMeasuredDimension(width, height);
}
@Override
protected ViewGroup.LayoutParams generateDefaultLayoutParams() {
return new LayoutParams(1, 1); // default of 1px spacing
}
@Override
protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {
if (p instanceof LayoutParams) {
return true;
}
return false;
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
final int count = getChildCount();
final int width = r - l;
int xpos = getPaddingLeft();
int ypos = getPaddingTop();
for (int i = 0; i < count; i++) {
final View child = getChildAt(i);
if (child.getVisibility() != GONE) {
final int childw = child.getMeasuredWidth();
final int childh = child.getMeasuredHeight();
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
if (xpos + childw > width) {
xpos = getPaddingLeft();
ypos += line_height;
}
child.layout(xpos, ypos, xpos + childw, ypos + childh);
xpos += childw + lp.horizontal_spacing;
}
}
}
}
并在xml中使用它,如下所示
<your_pacakge_name.FlowLayout
android:id="@+id/linearlayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#aabbcc"
android:orientation="horizontal" >
</your_pacakge_name.FlowLayout>