AndroidフローレイアウトFlowLayout、タグのレイアウト
Android Flow Layout Flowlayout
Androidストリーミングレイアウト、単一選択、複数選択などをサポートし、製品ラベルなどに適しています。
##特徴
- setAdapterの形式でデータを注入します
- CheckBoxと同様に、セレクターをバックグラウンドに直接設定して、ラベル選択の切り替えを完了します。
- 単一選択、複数選択など、選択されるタグの数を制御するためのサポート
- setOnTagClickListenerをサポートし、タグがクリックされたときにコールバックします
- setOnSelectListenerをサポートし、タグが選択されたときにコールバックします
- adapter.notifyDataChangedをサポートします
- アクティビティが再構築(またはローテーション)されると、選択された状態が自動的に保存されます
##効果画像
使用法
max_select
ステートメント
レイアウトファイルで宣言:
#Adapter @Override public void onSelected(int position, View view) { super.onSelected(position, view) } @Override public void unSelected(int position, View view) { super.unSelected(position, view) }
サポート属性:
TagAdapter
:-1は無制限の選択を意味し、> = 1の数はコントロール選択タグの数を意味します
state = checkedによる選択とキャンセルをサポートします。アダプターのonSelectedとunSelectedで別々に表示を処理することもできます。
###データを設定する
package com.zhy.view.flowlayout import android.view.View import java.util.ArrayList import java.util.Arrays import java.util.List public abstract class TagAdapter<T> { private List mTagDatas private OnDataChangedListener mOnDataChangedListener public TagAdapter(List datas) { mTagDatas = datas } public TagAdapter(T[] datas) { mTagDatas = new ArrayList(Arrays.asList(datas)) } static interface OnDataChangedListener { void onChanged() } void setOnDataChangedListener(OnDataChangedListener listener) { mOnDataChangedListener = listener } public int getCount() { return mTagDatas == null ? 0 : mTagDatas.size() } public void notifyDataChanged() { mOnDataChangedListener.onChanged() } public T getItem(int position) { return mTagDatas.get(position) } public abstract View getView(FlowLayout parent, int position, T t) }
ListViewやその他の使用法と同様に、getViewでのコールバック。
選択した状態の場合
public void setAdapter(TagAdapter adapter) { mTagAdapter = adapter mTagAdapter.setOnDataChangedListener(this) changeAdapter() } private void changeAdapter() { removeAllViews() TagAdapter adapter = mTagAdapter TagView tagViewContainer = null for (int i = 0 i this, i, adapter.getItem(i)) tagView.setDuplicateParentStateEnabled(true) tagViewContainer.setLayoutParams(tagView.getLayoutParams()) tagViewContainer.addView(tagView) addView(tagViewContainer) } } @Override public void onChanged() { changeAdapter() }
背景を設定します。上記の状態はandroid:state_checkedで、もう1つは正常です。レイアウトファイルを書くのが遅すぎます。エフェクトを制御したり、エフェクトを設定および変更したりするための一連のコードを作成するにはどうすればよいですか?
また、state_checkedに依存することはできず、以下のコールバックで設定します。
dependencies { compile 'com.hyman:flowlayout-lib:1.1.2' }
###イベント
<com.zhy.view.flowlayout.TagFlowLayout android:id='@+id/id_flowlayout' zhy:max_select='-1' android:layout_width='fill_parent' android:layout_height='wrap_content' android:padding='20dp'> </com.zhy.view.flowlayout.TagFlowLayout>
ラベルがクリックされたときのコールバック。
mFlowLayout.setAdapter(new TagAdapter<String>(mVals) { @Override public View getView(FlowLayout parent, int position, String s) { TextView tv = (TextView) mInflater.inflate(R.layout.tv, mFlowLayout, false) tv.setText(s) return tv } })
複数のタグが選択された場合のコールバック。
##プリセットアイテムの選択
<?xml version='1.0' encoding='utf-8'?> <selector xmlns:android='http://schemas.android.com/apk/res/android'> <item android:color='@color/tag_select_textcolor' android:drawable='@drawable/checked_bg' android:state_checked='true'></item> <item android:drawable='@drawable/normal_bg'></item> </selector>
|_+_|
mFlowLayout.setOnTagClickListener(new TagFlowLayout.OnTagClickListener() { @Override public boolean onTagClick(View view, int position, FlowLayout parent) { Toast.makeText(getActivity(), mVals[position], Toast.LENGTH_SHORT).show() return true } })
(1)TagAdapter
したがって、最初に、
mFlowLayout.setOnSelectListener(new TagFlowLayout.OnSelectListener() { @Override public void onSelected(Set<Integer> selectPosSet) { getActivity().setTitle('choose:' + selectPosSet.toString()) } })と呼ばれるアダプタが必要です。
//Pre-set selected mAdapter.setSelectedList(1,3,5,7,8,9) //Get all selected pos collection flowLayout.getSelectedList()
- 1
- 二
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 十一
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 2. 3
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 3. 4
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- フォーファイブ
- 46
- 47
- 48
- 49
- 50
- 51
(2)TagFlowLayoutのアダプターのサポート
次に、最も重要なことは、setAdapterメソッドを提供することです。
Related source code examples
- 1
- 二
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 十一
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 2. 3
- 24
- 25
- 26
- 27
- 28
- 29
ソースコードのダウンロードアドレス: https://github.com/hongyangAndroid/FlowLayout