创建新按钮并将其添加到下一个位置

时间:2016-06-15 22:57:31

标签: java android

如何以编程方式创建按钮

Button x = new Button (this);

但是这个按钮我将它添加到下一个可用位置。现在,如果我这样做并达到四个创建的按钮,第五个按钮将在屏幕外。我怎样才能让第五个检查右边是否有足够的空间,如果没有,那么按钮将在其余部分下方创建。

我尝试了网格布局并增加了列数,但这并不好,因为我想支持Android 7。

4 个答案:

答案 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));

答案 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);
    }