我需要在某些行中放置一个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个按钮,全部在同一行,最后一个小于其他行。
我需要它们垂直堆叠,例如,当没有其他按钮的空间时,会创建一个新行,其余按钮会进入那里。
提前致谢。
答案 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);
}