{"id":21770162,"url":"https://github.com/angcyo/dslspan","last_synced_at":"2025-04-13T16:40:23.086Z","repository":{"id":76009609,"uuid":"259284854","full_name":"angcyo/DslSpan","owner":"angcyo","description":"Android一个强大的自定义span(`DslDrawableSpan`), 以及一个`SpannableStringBuilder`使用工具.","archived":false,"fork":false,"pushed_at":"2022-05-09T03:23:06.000Z","size":207,"stargazers_count":22,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-27T07:35:47.909Z","etag":null,"topics":["android","dsl","kotlin","light","span"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/angcyo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-04-27T10:47:42.000Z","updated_at":"2024-12-30T07:35:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"501149c5-c691-4e2c-9abc-dcf7aa4cfccf","html_url":"https://github.com/angcyo/DslSpan","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angcyo%2FDslSpan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angcyo%2FDslSpan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angcyo%2FDslSpan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angcyo%2FDslSpan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/angcyo","download_url":"https://codeload.github.com/angcyo/DslSpan/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248746656,"owners_count":21155306,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","dsl","kotlin","light","span"],"created_at":"2024-11-26T14:11:34.524Z","updated_at":"2025-04-13T16:40:23.080Z","avatar_url":"https://github.com/angcyo.png","language":"Kotlin","readme":"# DslSpan\nAndroid一个强大的自定义span(`DslDrawableSpan`), 以及一个`SpannableStringBuilder`使用工具.\n\n\n![](https://img.shields.io/badge/License-MIT-3A66AC) ![](https://img.shields.io/badge/Api-8+-4A773C) ![](https://img.shields.io/badge/AndroidX-yes-AA883C)\n![](https://img.shields.io/badge/Kotlin-yes-3AC9A9)\n\n\n本库提供2个自定义`span`(`DslTextSpan` `DslDrawableSpan`) 和一个`SpannableStringBuilder`工具类`DslSpan`\n\n![](https://raw.githubusercontent.com/angcyo/DslSpan/master/png/span.png)\n\n\n# DslDrawableSpan\n\n这个类完全自定义继承`ReplacementSpan`, 功能强大, 使用简便:\n\n- 支持`绘制` `替换` 原有的`文本内容`\n- 支持`Drawable`绘制\n- 支持文本的`Gravity`属性(类似于`TextView`中的`gravity`)\n- 支持宽度的`Weight`属性(类似于`LinearLayout`中的`weight`)\n- 支持`margin`属性\n- 支持`padding`属性\n- 支持`click`点击事件(不影响`TextView`原有的`OnClickListener`事件)\n\n**支持的属性如下:**\n\n```kotlin\n/**绘制文本时的文本大小*/\n@Px\nvar textSize: Float = -1f\n/**绘制文本时的文本颜色*/\n@ColorInt\nvar textColor: Int = undefined_color\n/**文本绘制的重力*/\nvar textGravity: Int = Gravity.LEFT or Gravity.BOTTOM\n/**需要替换显示的文本, 为空则绘制默认append的文本*/\nvar showText: CharSequence? = null\n/**强制指定span的宽度*/\nvar spanWidth: Int = undefined_int\n/**强制指定span的高度*/\nvar spanHeight: Int = undefined_int\n/**限制span的最大宽度*/\nvar spanMaxWidth: Int = undefined_int\n/**span相对于[TextView]的比例, 不支持平分. 需要[DslSpanTextView]支持*/\nvar spanWeight: Float = undefined_float\n/**使用weight计算最大宽度的限制*/\nvar spanMaxWeight: Float = undefined_float\n/**宽度等于高度*/\nvar widthSameHeight = false\n/**填充背景[Drawable], 在最下面绘制*/\nvar fillBackgroundDrawable: Drawable? = null\n/**背景[Drawable], 在文本下面绘制*/\nvar backgroundDrawable: Drawable? = null\n/**前景[Drawable], 在文本上面绘制*/\nvar foregroundDrawable: Drawable? = null\n/**填充的颜色*/\nvar gradientSolidColor = undefined_color\n/**边框的颜色*/\nvar gradientStrokeColor = undefined_color\n/**边框的宽度*/\nvar gradientStrokeWidth = 1 * dp\n/**圆角大小*/\nvar gradientRadius = 25 * dp\n//影响宽度, 背景偏移, 文本偏移\nvar marginLeft: Int = 0\nvar marginRight: Int = 0\nvar marginTop: Int = 0\nvar marginBottom: Int = 0\n//影响宽度, 影响文本与背景的距离\nvar paddingLeft: Int = 0\nvar paddingRight: Int = 0\nvar paddingTop: Int = 0\nvar paddingBottom: Int = 0\n//整体偏移\nvar offsetX: Float = 0f\nvar offsetY: Float = 0f\n//单独文本偏移\nvar textOffsetX: Float = 0f\nvar textOffsetY: Float = 0f\n/**单击事件回调, 需要[SpanClickMethod]支持*/\nvar spanClickAction: ((view: View, span: DslDrawableSpan) -\u003e Unit)? = null\n```\n\n# DslTextSpan\n\n这个类组合了系统各个`CharacterStyle`的样式.\n\n**支持的属性如下:**\n\n```kotlin\n/**文本颜色*/\n@ColorInt\nvar textColor: Int = undefined_color\n/**背景颜色*/\n@ColorInt\nvar bgColor: Int = undefined_color\n/**字体大小*/\n@Px\nvar textSize: Float = undefined_float\n/**字体缩放*/\nvar relativeSizeScale: Float = undefined_float\n/**删除线*/\nvar deleteLine: Boolean = false\n/**下划线*/\nvar underline: Boolean = false\n/**粗体*/\nvar textBold: Boolean = false\n/**斜体*/\nvar textItalic: Boolean = false\n/**x轴缩放*/\nvar scaleX: Float = undefined_float\n/**文本基线偏移*/\nvar textBaselineShift: Int = 0\n/**上标*/\nvar isSuperscript: Boolean = false\n/**下标*/\nvar isSubscript: Boolean = false\n/**首行缩进*/\nvar leadingFirst: Int = 0\n/**其他行缩进*/\nvar leadingRest: Int = 0\n/**多少行算首行*/\nvar leadingFirstLineCount: Int = 1\n/**需要[DslTextView]支持*/\nvar leadingFirstWeight: Float = undefined_float\nvar leadingRestWeight: Float = undefined_float\n/**单击事件回调, 需要[SpanClickMethod]支持*/\nvar onClickSpan: ((view: View, span: DslTextSpan) -\u003e Unit)? = null\n```\n\n\u003e 注意: \n如果需要`span`的点击事件, 请调用`SpanClickMethod.install(textView)`, 方可生效.\n如果需要`weight`的属性的支持,请使用`DslSpanTextView`替换原来的`TextView`\n\n# DslSpan\n\n这个类是`SpannableStringBuilder`的工具类, 用于方便添加`span`.\n\n**实战使用如下:**\n\n```kotlin\ntv(R.id.text1).text = span {\n    append(\"默认无样式的标准文本\")\n}\n\ntv(R.id.text2).text = span {\n    append(\"系统\")\n    append(\"Span\") {\n        fontSize = 30 * dpi\n        foregroundColor = Color.RED\n    }\n    append(\"样式\") {\n        backgroundColor = Color.GREEN\n        scaleX = 2f\n    }\n}\n\ntv(R.id.text3).text = span {\n    append(\"带Drawable\")\n    drawable {\n        backgroundDrawable = resources.getDrawable(R.mipmap.ic_launcher)\n    }\n    text(\"自绘Text\") {\n        textColor = Color.WHITE\n        bgColor = Color.BLACK\n    }\n    drawable {\n        showText = \"自绘Text, 支持Gravity\"\n        textColor = Color.WHITE\n        spanWidth = ViewGroup.LayoutParams.WRAP_CONTENT\n        marginLeft = 20 * dpi\n        paddingLeft = 20 * dpi\n        paddingRight = 20 * dpi\n        textGravity = Gravity.TOP or Gravity.CENTER_HORIZONTAL\n        backgroundDrawable = ColorDrawable(Color.DKGRAY)\n    }\n}\n\ntv(R.id.text4).text = span {\n    drawable {\n        showText = \"支持Weight\"\n        spanWeight = 0.33333333f\n        spanHeight = 30 * dpi\n        fillBackgroundDrawable = ColorDrawable(Color.RED)\n        textGravity = Gravity.CENTER\n    }\n    drawable {\n        showText = \"各占三分之一\"\n        spanWeight = 0.33333333f\n        spanHeight = 40 * dpi\n        fillBackgroundDrawable = ColorDrawable(Color.GREEN)\n        textGravity = Gravity.CENTER\n    }\n    drawable {\n        showText = \"1/3\"\n        spanWeight = 0.33333333f\n        spanHeight = 50 * dpi\n        fillBackgroundDrawable = ColorDrawable(Color.BLUE)\n        textColor = Color.WHITE\n        textGravity = Gravity.CENTER\n    }\n}\n\ntv(R.id.text5).apply {\n    SpanClickMethod.install(this)\n    setOnClickListener {\n        Toast.makeText(this@MainActivity, \"点击View\", Toast.LENGTH_SHORT).show()\n    }\n\n    text = span {\n        drawable {\n            showText = \"支持点击\"\n            spanWeight = 0.5f\n            backgroundDrawable = ColorDrawable(Color.RED)\n            textGravity = Gravity.CENTER\n        }\n        drawable {\n            showText = \"点我试试?\"\n            spanWeight = 0.5f\n            textSize = 40 * dp\n            backgroundDrawable = ColorDrawable(Color.GREEN)\n            textGravity = Gravity.CENTER\n            textColor = Color.WHITE\n            spanClickAction = { view, span -\u003e\n                Toast.makeText(this@MainActivity, \"点击Span\", Toast.LENGTH_SHORT).show()\n            }\n        }\n    }\n}\n\ntv(R.id.text6).text = span {\n    append(\"自绘Drawable\")\n    drawable {\n        backgroundDrawable = resources.getDrawable(R.mipmap.ic_launcher)\n    }\n    drawable {\n        foregroundDrawable = resources.getDrawable(R.mipmap.ic_launcher_round)\n    }\n    drawable {\n        backgroundDrawable = resources.getDrawable(R.mipmap.ic_launcher)\n        foregroundDrawable = resources.getDrawable(R.mipmap.ic_launcher_round)\n    }\n}\n\ntv(R.id.text7).text = span {\n    append(\"支持空隙\")\n    appendSpace(10 * dpi)\n    append(\"空隙大小\")\n    appendSpace(20 * dpi, Color.RED)\n    append(\"空隙颜色\")\n    appendSpace(30 * dpi, Color.GREEN)\n    append(\"支持空隙\")\n    appendSpace(40 * dpi, Color.BLUE)\n}\n\ntv(R.id.text8).text = span {\n    drawable {\n        showText = \"支持Margin\"\n        marginLeft = 20 * dpi\n        marginRight = 20 * dpi\n        backgroundDrawable = ColorDrawable(Color.RED)\n    }\n    drawable {\n        showText = \"支持Padding\"\n        paddingLeft = 20 * dpi\n        paddingRight = 20 * dpi\n        backgroundDrawable = ColorDrawable(Color.GREEN)\n    }\n}\n```\n\n\n# 使用`JitPack`的方式, 引入库.\n\n## 根目录中的 `build.gradle`\n\n```kotlin\nallprojects {\n    repositories {\n        ...\n        maven { url 'https://jitpack.io' }\n    }\n}\n```\n\n## APP目录中的 `build.gradle`\n\n```kotlin\ndependencies {\n    implementation 'com.github.angcyo:DslSpan:1.1.0'\n}\n```\n\n---\n**群内有`各(pian)种(ni)各(jin)样(qun)`的大佬,等你来撩.**\n\n# 联系作者\n\n[点此QQ对话](http://wpa.qq.com/msgrd?v=3\u0026uin=664738095\u0026site=qq\u0026menu=yes)  `该死的空格`    [点此快速加群](https://shang.qq.com/wpa/qunwpa?idkey=cbcf9a42faf2fe730b51004d33ac70863617e6999fce7daf43231f3cf2997460)\n\n[开源地址](https://github.com/angcyo/DslAdapter)\n\n![](https://gitee.com/angcyo/res/raw/master/code/all_in1.jpg)\n\n![](https://gitee.com/angcyo/res/raw/master/code/all_in2.jpg)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangcyo%2Fdslspan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fangcyo%2Fdslspan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangcyo%2Fdslspan/lists"}