我创建了一个简单的应用程序,该应用程序使用具有方向 =“水平”的 LinearLayout 具有一系列子视图,并手动计算设备宽度,一旦子项跨越设备宽度,然后我将更改高度以将子项保存在下一行。
但是现在android已经引入了FlexboxLayout,我可以用FlexboxLayout代替现有的LinearLayout吗?
是的,用 FlexboxLayout 替换 CustomLinearLayout 可以正常工作。这是代码。
构建.gradle
dependencies {
compile 'com.google.android:flexbox:0.2.5'
}
布局.xml
<com.google.android.flexbox.FlexboxLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/flexboxlayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:flexWrap="wrap"
app:alignItems="stretch"
app:alignContent="stretch"
app:layout_flexGrow="1">
<Button
android:id="@+id/btn_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 0"/>
</com.google.android.flexbox.FlexboxLayout>
活动.java
private FlexboxLayout flexboxLayout;
flexboxLayout = (FlexboxLayout)findViewById(R.id.flexboxlayout);
int prevTextViewId = R.id.btn_one;
for(int k=1; k<20; k++)
{
Button button = new Button(context);
button.setText("Button "+k);
int curTextViewId = prevTextViewId + 1;
final RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.BELOW, prevTextViewId);
button.setLayoutParams(params);
flexboxLayout.addView(button, params);
prevTextViewId = curTextViewId;
}