3

我创建了一个简单的应用程序,该应用程序使用具有方向 =“水平”的 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;
        }
4

0 回答 0