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