我需要根据按钮是否适合水平来改变Linearlayout的方向。例如,如果我们有两个适合屏幕总宽度的按钮,我会在水平LinearLayout中显示它们,但如果它们不合适,我需要以垂直布局显示它们。
我尝试了下面的代码,但因为第三个按钮调整自身大小并开始垂直以适应边界,所以子计数最终仍然小于宽度。有没有办法计算按钮的宽度而不发生这种变化?
mButtonsLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
public void onGlobalLayout() {
int childCount = mButtonsLayout.getChildCount();
int childWidth = 0;
for (int i = 0; i < childCount; i++ ) {
View child = mButtonsLayout.getChildAt(i);
childWidth += child.getWidth();
}
if (mButtonsLayout.getMeasuredWidth() < childWidth) {
mButtonsLayout.setOrientation(LinearLayout.VERTICAL);
} else {
mButtonsLayout.setOrientation(LinearLayout.HORIZONTAL);
}
ViewTreeObserver viewTreeObserver = mButtonsLayout.getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
viewTreeObserver.removeGlobalOnLayoutListener(this);
}
}
});
}
这是第三个按钮改变自己的方式。 我想要的结果是如果所有按钮都不适合水平放置,请将方向更改为垂直,以便按钮显示在彼此之上。
答案 0 :(得分:2)
答案 1 :(得分:2)
看看这个library
<cn.lankton.flowlayout.FlowLayout
android:id="@+id/flowlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
app:lineSpacing="10dp"
android:background="#F0F0F0">
</cn.lankton.flowlayout.FlowLayout>
gradle这个
compile 'cn.lankton:flowlayout:latest version'
这是另一个以编程方式排列视图的库..