【问题标题】:Rows of buttons with LinearLayout带有 LinearLayout 的按钮行
【发布时间】:2023-03-23 11:24:01
【问题描述】:

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

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个按钮,都在同一行,而且最后一个比其他的小。

我需要它们垂直堆叠,例如,当没有空间放置另一个按钮时,会创建一个新行并将其余按钮放入其中。

提前致谢。

【问题讨论】:

标签: android button android-linearlayout rows


【解决方案1】:

听起来您在谈论垂直 FlowLayout,其中新添加的视图垂直堆叠,直到没有更多空间,然后开始一个新列。
不幸的是,Android 还没有 FlowLayout,但您可以自己制作。查看 Romain Guy "How can I do something like a FlowLayout in Android?" 的回答,并观看他的演讲视频,其中他描述了如何创建一个。通过多次观看直到我理解它,我学到了很多关于创建自定义布局的知识。

【讨论】:

    【解决方案2】:

    如果屏幕宽度小于某个值,则将所有按钮的weight 属性设置为1。如果屏幕宽度足够大以适合所有按钮,请使用默认值。

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

    【讨论】:

    • 好吧,可能是 5 个按钮,也可能是 20 个。按钮的数量只有在运行时才能知道
    • 我刚刚尝试了 weight = 1 并且所有按钮都保持在同一条线上并且被拉伸
    • 好的,现在我明白了。尝试设置按钮宽度以包裹内容。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-05
      • 2021-03-16
      相关资源
      最近更新 更多