FlexboxLayout
介绍:
FlexboxLayout 可以理解为高级的 LinearLayout,因为这两个布局都将其子视图按序排列。二者之间的重要差异在于 FlexboxLayout 具有自动 “换行” 的特性。
引入依赖:
//flexbox布局
implementation 'com.google.android:flexbox:1.1.0'
常用效果:
横向显示自动换行:
xml文件:
<com.google.android.flexbox.FlexboxLayout
android:id="@+id/fl_hot_search"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
app:alignContent="flex_start"
app:alignItems="flex_start"
app:flexDirection="row"
app:flexWrap="wrap"
app:justifyContent="flex_start"
app:layout_constraintTop_toBottomOf="@+id/tv_hot_search">
</com.google.android.flexbox.FlexboxLayout>
动态添加控件:
private void addView(View viewGroup, List<String> strings, View.OnClickListener onClickListener) {
FlexboxLayout flHotSearch = activity.bindId(viewGroup, R.id.fl_hot_search);
for (int i = 0; i < strings.size(); i++) {
if (strings.get(i).isEmpty()) continue;
TextView textView = new TextView(viewGroup.getContext());
textView.setText(strings.get(i));
textView.setGravity(Gravity.CENTER);
textView.setPadding(getDP(16), getDP(0), getDP(16), getDP(0));
textView.setOnClickListener(onClickListener);
//构造宽高的属性
FlexboxLayout.LayoutParams layoutParams = new FlexboxLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, getDP(32));
layoutParams.setMargins(getDP(0), getDP(8), getDP(8), 0);
flHotSearch.addView(textView, layoutParams);
}
}
private int getDP(int px) {
return WindowUtils.dip2px(activity, px);
}