如何以编程方式创建按钮
Button x = new Button (this);
但是这个按钮我将它添加到下一个可用位置。现在,如果我这样做并达到四个创建的按钮,第五个按钮将在屏幕外。我怎样才能让第五个检查右边是否有足够的空间,如果没有,那么按钮将在其余部分下方创建。
我尝试了网格布局并增加了列数,但这并不好,因为我想支持Android 7。
答案 0 :(得分:1)
尝试在布局中使用scrollView
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true">
答案 1 :(得分:1)
将它们包裹在垂直LinearLayout中,然后添加权重属性:
Button button = new Button(this);
button.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f));
检查this answer以查看权重属性是什么。
检查this other answer以查看与TextView相似的问题。
答案 2 :(得分:1)
您是否尝试创建或搜索print(calcAge("06/29/1988"))
。它有很多FlowLayout
个回购。
我建议你看看这个问题:How can I do something like a FlowLayout in Android?
如果您转到Github
并进行搜索,则可以找到示例:Github Flow Layout
此外,您还可以搜索Github
,了解如何创建自定义视图并动态添加:Tag View
答案 3 :(得分:1)
它的hackish但它有效吗?xml中的Main LinearLayout处于垂直方向。 因此,它会根据屏幕宽度检查您生成的所有按钮的总宽度,如果它大于或等于它,则会创建一个水平方向的新线性布局并继续按下按钮。
这只需要您创建的按钮数量。
private void generateButton(int noOfButton){
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
totalButtonWidth = 0;
while(noOfButton!= 0){
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int phoneWidth = metrics.widthPixels;
button = new Button(this);
button.setLayoutParams(new LinearLayout.LayoutParams(244,200));
totalButtonWidth += 244;
Log.i(TAG,"totalWidth"+totalButtonWidth);
if(totalButtonWidth>=phoneWidth){
totalButtonWidth = 244;
linearLayoutMain.addView(linearLayout);
linearLayout = new LinearLayout(this);
linearLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
}
linearLayout.addView(button);
noOfButton--;
}
linearLayoutMain.addView(linearLayout);
}