{"adoption": {"forks": 1162, "observed_at": "2026-08-28T04:09:22.482551+00:00", "stars": 5571}, "canonical_url": "https://ross.abutalabs.com/products/flowlayout", "card": {"archived": false, "artifact_type": "library", "description": "[不再维护]Android流式布局，支持单选、多选等，适合用于产品标签等。", "domain": ["mobile-development"], "enriched": true, "function": ["ui-components"], "health_score": 20, "homepage": null, "language": "Java", "license": "Apache-2.0", "license_family": "permissive", "maturity": "abandoned", "member_repos": ["hongyangAndroid/FlowLayout"], "name": "hongyangAndroid/FlowLayout", "platform": [], "pushed_at": "2019-10-13T14:59:04+00:00", "repo": "hongyangAndroid/FlowLayout", "stars": 5571, "tags": ["android", "flow-layout", "tag-layout", "tag-selection", "java", "chips", "unmaintained", "adapter-pattern"], "topics": [], "urls": [], "use_cases": ["display a list of tags or labels that wrap onto multiple rows in an Android app", "build a tag picker with single-select or limited multi-select behavior", "create selectable chip groups for product categories or filters", "handle tag click and selection-change callbacks in Android UI", "preserve tag selection state across activity recreation or screen rotation", "pre-select specific tags programmatically and read back the selected set"], "what_it_is": "An Android flow layout library that wraps child views (typically tags) across multiple rows and supports single-select and multi-select interactions, commonly used for product tag pickers. Data is injected via a ListView-style adapter, selection is styled with standard state_checked selectors, and selected state survives activity recreation or rotation.", "when_to_avoid": ["you are starting a new project and need actively maintained dependencies (the project is explicitly unmaintained, last released in 2019)", "you are building with Jetpack Compose, where native FlowRow and selection APIs are preferable", "you need a general-purpose layout manager for RecyclerView rather than a specialized tag-selection widget"], "when_to_choose": ["you are building a View-based Android app in Java and need a wrap-flow tag layout with selection", "you want checkbox-like tag selection driven purely by drawable state selectors instead of manual code", "you need to cap the number of selectable tags (e.g., single-select or max N)"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/flowlayout", "repo": "hongyangAndroid/FlowLayout", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.482551+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:55:35.326013+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a27e69d8e69c65449c5ba05b2ca480d3f98aee2537671cfdbda1b75356fcb9d3", "fetched_at": "2026-08-28T04:09:22.482551+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hongyangAndroid/FlowLayout"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.482551+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:55:35.326013+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a27e69d8e69c65449c5ba05b2ca480d3f98aee2537671cfdbda1b75356fcb9d3", "fetched_at": "2026-08-28T04:09:22.482551+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hongyangAndroid/FlowLayout"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:55:35.326013+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a27e69d8e69c65449c5ba05b2ca480d3f98aee2537671cfdbda1b75356fcb9d3", "fetched_at": "2026-08-28T04:09:22.482551+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hongyangAndroid/FlowLayout"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.482551+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.482551+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.482551+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:55:35.326013+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a27e69d8e69c65449c5ba05b2ca480d3f98aee2537671cfdbda1b75356fcb9d3", "fetched_at": "2026-08-28T04:09:22.482551+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hongyangAndroid/FlowLayout"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.482551+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.482551+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:55:35.326013+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a27e69d8e69c65449c5ba05b2ca480d3f98aee2537671cfdbda1b75356fcb9d3", "fetched_at": "2026-08-28T04:09:22.482551+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hongyangAndroid/FlowLayout"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.482551+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.482551+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.482551+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:55:35.326013+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a27e69d8e69c65449c5ba05b2ca480d3f98aee2537671cfdbda1b75356fcb9d3", "fetched_at": "2026-08-28T04:09:22.482551+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hongyangAndroid/FlowLayout"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.482551+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.482551+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:55:35.326013+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a27e69d8e69c65449c5ba05b2ca480d3f98aee2537671cfdbda1b75356fcb9d3", "fetched_at": "2026-08-28T04:09:22.482551+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hongyangAndroid/FlowLayout"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:55:35.326013+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a27e69d8e69c65449c5ba05b2ca480d3f98aee2537671cfdbda1b75356fcb9d3", "fetched_at": "2026-08-28T04:09:22.482551+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hongyangAndroid/FlowLayout"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:55:35.326013+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a27e69d8e69c65449c5ba05b2ca480d3f98aee2537671cfdbda1b75356fcb9d3", "fetched_at": "2026-08-28T04:09:22.482551+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hongyangAndroid/FlowLayout"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:55:35.326013+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a27e69d8e69c65449c5ba05b2ca480d3f98aee2537671cfdbda1b75356fcb9d3", "fetched_at": "2026-08-28T04:09:22.482551+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hongyangAndroid/FlowLayout"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4023, "days_push": 2516, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}