折り返し表示もこれで怖くない! Google製ライブラリ【FlexboxLayout】
FlexboxLayout
https://github.com/google/flexbox-layout
https://developers-jp.googleblog.com/2017/03/build-flexible-layouts-with.html
タグ表示などで使えそうです。
1、一つのViewの中にViewを配置すると自動で折り返しくれるFlexboxLayout
2、RecyclerView内のViewを紐づけるFlexboxLayoutManager(LayoutManager)
があります。
スクロールするような画面では、RecyclerViewの仕組みでViewが再利用されるので
FlexboxLayoutManagerを使うのが良さそうです。
使い方
今回は2のFlexboxLayoutManagerを使ってみます。
既存のRecyclerViewにLayoutMnagerをセットします。
// RecyclerViewを用意
RecyclerView recyclerView = findViewById(R.id.flexbox_layout);
// ライブラリに定義されているFlexboxLayoutManagerを準備
FlexboxLayoutManager flexboxLayoutManager = new FlexboxLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(flexboxLayoutManager);
// Adapterを準備
FlexLayoutManagerAdapter flexLayoutManagerAdapter = new FlexLayoutManagerAdapter();
recyclerView.setAdapter(flexLayoutManagerAdapter);
flexLayoutManagerAdapter.setData(getTagList());
// データ
private ArrayList<String> getTagList() {
ArrayList<String> tags = new ArrayList<>();
for (int i = 0; i < 5; i++) {
tags.add("あいうえお");
tags.add("かきくけこ");
tags.add("さし");
tags.add("すせそ");
tags.add("たちつてとなにぬねのは");
tags.add("ひふえほまみ");
tags.add("むめもやゆよ");
tags.add("らりる");
tags.add("れろわをん");
}
return tags;
}
で一番載せたに書いた画面ができ、上下にスクロールもします。
FlexLayoutManagerをインスタンス化するときに
new FlexboxLayoutManager(getApplicationContext(), FlexDirection.COLUMN);
第二引数にFlexDirection.COLUMNを指定することにより
縦柚はアイテムが揃っており、横にスクロールすることができるようにします。
Adapterも載せておきますが、こっちは通常のRecyclerViewを表示する時のAdapterで大丈夫です。
// Adapter
private class FlexLayoutManagerAdapter extends RecyclerView.Adapter {
private ArrayList<String> tags;
public void setData(ArrayList<String> tags) {
this.tags = tags;
notifyDataSetChanged();
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
return new FlexLayoutViewHolder(inflater.inflate(R.layout.tag_item, parent, false));
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if (holder instanceof FlexLayoutViewHolder) {
((FlexLayoutViewHolder) holder).bind(tags.get(position));
}
}
@Override
public int getItemCount() {
if (tags == null) return 0;
return tags.size();
}
// Holder
public class FlexLayoutViewHolder extends RecyclerView.ViewHolder {
private TextView tagTextView;
public FlexLayoutViewHolder(@NonNull View itemView) {
super(itemView);
tagTextView = itemView.findViewById(R.id.tag_text_view);
}
public void bind(String tag) {
tagTextView.setText(tag);
}
}
}
Author And Source
この問題について(折り返し表示もこれで怖くない! Google製ライブラリ【FlexboxLayout】), 我々は、より多くの情報をここで見つけました https://qiita.com/ueno-yuhei/items/7d92cd121aa309a4db00著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .