使用LinearLayout的按钮行

时间:2014-06-30 01:00:13

标签: android button android-linearlayout rows

我需要在某些行中放置一个dinamic数量的按钮。每行按钮的数量和大小应适合任何屏幕宽度。

LinearLayout llh = new LinearLayout(this);
llh.setOrientation(LinearLayout.HORIZONTAL);
for(int i=1; i<=nl; ++i) {
    Button b = new Button(this);
    b.setText(String.valueOf(i));
    if(i>ul) {
        b.setFocusable(false);
        b.setEnabled(false);
    }
    llh.addView(b);
}

这段代码的问题在于,例如,我的nl测试值为10,这只显示6个按钮,全部在同一行,最后一个小于其他行。

我需要它们垂直堆叠,例如,当没有其他按钮的空间时,会创建一个新行,其余按钮会进入那里。

提前致谢。

3 个答案:

答案 0 :(得分:0)

听起来你在谈论一个垂直的FlowLayout,其中新添加的视图垂直堆叠,直到没有空间,然后启动一个新列。
不幸的是,Android还没有FlowLayout,但您可以创建自己的。看看Romain Guy的这个答案“How can I do something like a FlowLayout in Android?”,并观看他演讲的视频,其中描述了如何创建一个。我通过多次观察创建了自定义布局,直到我理解它为止,我学到了很多东西。

答案 1 :(得分:0)

如果屏幕宽度小于某个值,请为所有按钮将weight属性设置为1。如果屏幕宽度足够大,可以正确放入所有按钮,请使用默认设置。

我现在无法发布代码,因为我离PC很远。

答案 2 :(得分:0)

这就是我想出的。它并不像我想的那么漂亮,但它完成了工作。 按钮将具有固定的大小,但这不应该是一个问题。 谢谢你的帮助:)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="top|center_horizontal"
android:orientation="vertical"></LinearLayout>


    Display display = getWindowManager().getDefaultDisplay();
    Point p = new Point();
    display.getSize(p);

    int buttonSize = 120;
    int n = p.x/buttonSize-1;

    LinearLayout llv = (LinearLayout)findViewById(R.id.container);
    LinearLayout llh = null;

    for(int i=0; i<nl; ++i) {
        Button b = new Button(this);
        if(i%n==0 || i==0) {
            llh = new LinearLayout(this);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            llh.setLayoutParams(params);
            llh.setOrientation(LinearLayout.HORIZONTAL);
            llv.addView(llh);
        }
        b.setText(String.valueOf(i+1));
        b.setWidth(buttonSize);
        if(i>ul) {
            b.setFocusable(false);
            b.setEnabled(false);
        }
        llh.addView(b);
    }
相关问题