From 83b94c11f84a2f94ced3373817aa1b997585ff43 Mon Sep 17 00:00:00 2001 From: burt Date: Fri, 10 Jun 2016 13:37:57 +0900 Subject: [PATCH 01/62] support max line count for tag container. but it is flickered when you add tag dynamically --- .../java/co/lujun/androidtagview/TagContainerLayout.java | 9 +++++++++ androidtagview/src/main/res/values/attrs.xml | 1 + 2 files changed, 10 insertions(+) diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java index e738735..352178b 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java @@ -51,6 +51,9 @@ public class TagContainerLayout extends ViewGroup { /** The container layout gravity(default left)*/ private int mGravity = Gravity.LEFT; + /** The max line count of container */ + private int mMaxLines = 1; + /** The max length for TagView(default max length 23)*/ private int mTagMaxLength = 23; @@ -155,6 +158,7 @@ private void init(Context context, AttributeSet attrs, int defStyleAttr){ mSensitivity = attributes.getFloat(R.styleable.AndroidTagView_container_drag_sensitivity, mSensitivity); mGravity = attributes.getInt(R.styleable.AndroidTagView_container_gravity, mGravity); + mMaxLines = attributes.getInt(R.styleable.AndroidTagView_container_max_lines, mMaxLines); mTagMaxLength = attributes.getInt(R.styleable.AndroidTagView_tag_max_length, mTagMaxLength); mTheme = attributes.getInt(R.styleable.AndroidTagView_tag_theme, mTheme); mTagBorderWidth = attributes.getDimension(R.styleable.AndroidTagView_tag_border_width, @@ -295,6 +299,11 @@ protected void onDraw(Canvas canvas) { mPaint.setStrokeWidth(mBorderWidth); mPaint.setColor(mBorderColor); canvas.drawRoundRect(mRectF, mBorderRadius, mBorderRadius, mPaint); + + int lineCount = getChildLines(mChildViews.size()); + if(lineCount > mMaxLines) { + removeTag(mChildViews.size()-1); + } } @Override diff --git a/androidtagview/src/main/res/values/attrs.xml b/androidtagview/src/main/res/values/attrs.xml index 40fbb25..c0f676a 100644 --- a/androidtagview/src/main/res/values/attrs.xml +++ b/androidtagview/src/main/res/values/attrs.xml @@ -10,6 +10,7 @@ + From e924a4c09d13e168294cdac50179875811c63c36 Mon Sep 17 00:00:00 2001 From: burt Date: Sun, 12 Jun 2016 13:21:42 +0900 Subject: [PATCH 02/62] add setMaxLines method. fix bugs which set max line count to 1 forcingly when the tagcontainer was initialized --- .../lujun/androidtagview/TagContainerLayout.java | 14 +++++++++++++- .../main/java/co/lujun/sample/MainActivity.java | 2 ++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java index 352178b..6a849ae 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java @@ -52,7 +52,7 @@ public class TagContainerLayout extends ViewGroup { private int mGravity = Gravity.LEFT; /** The max line count of container */ - private int mMaxLines = 1; + private int mMaxLines = 0; /** The max length for TagView(default max length 23)*/ private int mTagMaxLength = 23; @@ -300,6 +300,9 @@ protected void onDraw(Canvas canvas) { mPaint.setColor(mBorderColor); canvas.drawRoundRect(mRectF, mBorderRadius, mBorderRadius, mPaint); + if(mMaxLines <=0) + return; + int lineCount = getChildLines(mChildViews.size()); if(lineCount > mMaxLines) { removeTag(mChildViews.size()-1); @@ -787,6 +790,15 @@ public void setSensitivity(float sensitivity) { this.mSensitivity = sensitivity; } + /** + * Set max line count for TagContainer + * @param maxLines max line count + */ + public void setMaxLines(int maxLines) { + mMaxLines = maxLines; + postInvalidate(); + } + /** * Set the TagView text max length(must greater or equal to 3). * @param maxLength diff --git a/sample/src/main/java/co/lujun/sample/MainActivity.java b/sample/src/main/java/co/lujun/sample/MainActivity.java index d4206e5..f9e468e 100644 --- a/sample/src/main/java/co/lujun/sample/MainActivity.java +++ b/sample/src/main/java/co/lujun/sample/MainActivity.java @@ -126,5 +126,7 @@ public void onClick(View v) { // mTagContainerLayout1.addTag(text.getText().toString(), 4); } }); + + mTagContainerLayout1.setMaxLines(1); } } From e21218b82a402e529329a72fc69f0e67b6df24f7 Mon Sep 17 00:00:00 2001 From: whilu Date: Tue, 14 Jun 2016 00:16:50 +0800 Subject: [PATCH 03/62] Fix: add tag dynamically(support max lines version) flickered --- README.md | 1 + .../androidtagview/TagContainerLayout.java | 23 ++++++++++--------- .../java/co/lujun/sample/MainActivity.java | 2 +- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 9c3f7dd..07c7b32 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,7 @@ Now, you have successfully created some TagViews. The following will show some m | container_enable_drag | boolean | Can drag TagView(default false) | container_drag_sensitivity | float | The sensitive of the ViewDragHelper(default 1.0f, normal) | container_gravity | enum | The TagContainerLayout [gravity](#gravity) +| container_max_lines | integer | The max lines for TagContainerLayout(default 0, auto increase) | tag_border_width | dimension | TagView Border width(default 0.5dp) | tag_corner_radius | dimension | TagView Border radius(default 15.0dp) | tag_horizontal_padding | dimension | Horizontal padding for TagView, include left and right padding(left and right padding are equal, default 20px) diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java index 6a849ae..9b5469a 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java @@ -51,7 +51,7 @@ public class TagContainerLayout extends ViewGroup { /** The container layout gravity(default left)*/ private int mGravity = Gravity.LEFT; - /** The max line count of container */ + /** The max line count of TagContainerLayout */ private int mMaxLines = 0; /** The max length for TagView(default max length 23)*/ @@ -299,14 +299,6 @@ protected void onDraw(Canvas canvas) { mPaint.setStrokeWidth(mBorderWidth); mPaint.setColor(mBorderColor); canvas.drawRoundRect(mRectF, mBorderRadius, mBorderRadius, mPaint); - - if(mMaxLines <=0) - return; - - int lineCount = getChildLines(mChildViews.size()); - if(lineCount > mMaxLines) { - removeTag(mChildViews.size()-1); - } } @Override @@ -342,7 +334,8 @@ private int getChildLines(int childCount){ curLineW = dis; } } - return lines; + + return mMaxLines <= 0 ? lines : mMaxLines; } private int[] onUpdateColorFactory(){ @@ -791,7 +784,7 @@ public void setSensitivity(float sensitivity) { } /** - * Set max line count for TagContainer + * Set max line count for TagContainerLayout * @param maxLines max line count */ public void setMaxLines(int maxLines) { @@ -799,6 +792,14 @@ public void setMaxLines(int maxLines) { postInvalidate(); } + /** + * Get TagContainerLayout's max lines + * @return maxLines + */ + public int getMaxLines(){ + return mMaxLines; + } + /** * Set the TagView text max length(must greater or equal to 3). * @param maxLength diff --git a/sample/src/main/java/co/lujun/sample/MainActivity.java b/sample/src/main/java/co/lujun/sample/MainActivity.java index f9e468e..9f1c3de 100644 --- a/sample/src/main/java/co/lujun/sample/MainActivity.java +++ b/sample/src/main/java/co/lujun/sample/MainActivity.java @@ -127,6 +127,6 @@ public void onClick(View v) { } }); - mTagContainerLayout1.setMaxLines(1); +// mTagContainerLayout1.setMaxLines(1); } } From b3095e813043a759089c804fc8923662ca780ff7 Mon Sep 17 00:00:00 2001 From: whilu Date: Sun, 10 Jul 2016 23:23:00 +0800 Subject: [PATCH 04/62] Fix: Add test case in RecyclerView(click event) --- .../java/co/lujun/sample/MainActivity.java | 70 +++++++++++++++++++ sample/src/main/res/layout/content_main.xml | 7 ++ .../res/layout/view_recyclerview_item.xml | 18 +++++ 3 files changed, 95 insertions(+) create mode 100644 sample/src/main/res/layout/view_recyclerview_item.xml diff --git a/sample/src/main/java/co/lujun/sample/MainActivity.java b/sample/src/main/java/co/lujun/sample/MainActivity.java index 9f1c3de..b995e42 100644 --- a/sample/src/main/java/co/lujun/sample/MainActivity.java +++ b/sample/src/main/java/co/lujun/sample/MainActivity.java @@ -1,12 +1,16 @@ package co.lujun.sample; import android.app.AlertDialog; +import android.content.Context; import android.content.DialogInterface; import android.graphics.Typeface; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; +import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; @@ -128,5 +132,71 @@ public void onClick(View v) { }); // mTagContainerLayout1.setMaxLines(1); + + + // test in RecyclerView +// RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView); +// recyclerView.setVisibility(View.VISIBLE); +// TagRecyclerViewAdapter adapter = new TagRecyclerViewAdapter(this, list3); +// adapter.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// Toast.makeText(MainActivity.this, "Click on TagContainerLayout", Toast.LENGTH_SHORT).show(); +// } +// }); +// recyclerView.setAdapter(adapter); + } + + public class TagRecyclerViewAdapter + extends RecyclerView.Adapter{ + + private Context mContext; + private String[] mData; + private View.OnClickListener mOnClickListener; + + public TagRecyclerViewAdapter(Context context, String[] data){ + this.mContext = context; + this.mData = data; + } + + @Override + public int getItemCount() { + return 10; + } + + @Override + public TagViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + return new TagViewHolder(LayoutInflater.from(mContext) + .inflate(R.layout.view_recyclerview_item, parent, false), mOnClickListener); + } + + @Override + public void onBindViewHolder(TagViewHolder holder, int position) { + holder.tagContainerLayout.setTags(mData); + } + + public void setOnClickListener(View.OnClickListener listener){ + this.mOnClickListener = listener; + } + + class TagViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ + + TagContainerLayout tagContainerLayout; + View.OnClickListener clickListener; + + public TagViewHolder(View v, View.OnClickListener listener){ + super(v); + this.clickListener = listener; + tagContainerLayout = (TagContainerLayout) v.findViewById(R.id.tagcontainerLayout); + v.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + if (clickListener != null){ + clickListener.onClick(v); + } + } + } } } diff --git a/sample/src/main/res/layout/content_main.xml b/sample/src/main/res/layout/content_main.xml index ccb9b38..7be6c24 100644 --- a/sample/src/main/res/layout/content_main.xml +++ b/sample/src/main/res/layout/content_main.xml @@ -13,6 +13,13 @@ tools:context="co.lujun.sample.MainActivity" tools:showIn="@layout/activity_main"> + + diff --git a/sample/src/main/res/layout/view_recyclerview_item.xml b/sample/src/main/res/layout/view_recyclerview_item.xml new file mode 100644 index 0000000..dba9dcb --- /dev/null +++ b/sample/src/main/res/layout/view_recyclerview_item.xml @@ -0,0 +1,18 @@ + + + + + \ No newline at end of file From 1772efff626d02443fd26a31e5dede7a14cdce21 Mon Sep 17 00:00:00 2001 From: whilu Date: Sun, 10 Jul 2016 23:44:36 +0800 Subject: [PATCH 05/62] Fix: Add test case in RecyclerView(with a button frame) --- .../main/java/co/lujun/sample/MainActivity.java | 5 ++++- .../main/res/layout/view_recyclerview_item.xml | 16 +++++++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/sample/src/main/java/co/lujun/sample/MainActivity.java b/sample/src/main/java/co/lujun/sample/MainActivity.java index b995e42..f41b229 100644 --- a/sample/src/main/java/co/lujun/sample/MainActivity.java +++ b/sample/src/main/java/co/lujun/sample/MainActivity.java @@ -173,6 +173,7 @@ public TagViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { @Override public void onBindViewHolder(TagViewHolder holder, int position) { holder.tagContainerLayout.setTags(mData); + holder.button.setOnClickListener(mOnClickListener); } public void setOnClickListener(View.OnClickListener listener){ @@ -183,12 +184,14 @@ class TagViewHolder extends RecyclerView.ViewHolder implements View.OnClickListe TagContainerLayout tagContainerLayout; View.OnClickListener clickListener; + Button button; public TagViewHolder(View v, View.OnClickListener listener){ super(v); this.clickListener = listener; tagContainerLayout = (TagContainerLayout) v.findViewById(R.id.tagcontainerLayout); - v.setOnClickListener(this); + button = (Button) v.findViewById(R.id.button); +// v.setOnClickListener(this); } @Override diff --git a/sample/src/main/res/layout/view_recyclerview_item.xml b/sample/src/main/res/layout/view_recyclerview_item.xml index dba9dcb..b499e4c 100644 --- a/sample/src/main/res/layout/view_recyclerview_item.xml +++ b/sample/src/main/res/layout/view_recyclerview_item.xml @@ -1,18 +1,24 @@ - + android:layout_marginTop="20dp" + android:layout_height="60dp"> - \ No newline at end of file + +