Skip to content

Commit 997e905

Browse files
committed
add alignmentSpan & absoluteSizeSpan
1 parent c04c632 commit 997e905

4 files changed

Lines changed: 47 additions & 15 deletions

File tree

app/src/main/java/xyz/junerver/ssktx/MainActivity.kt

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,10 @@
11
package xyz.junerver.ssktx
22

3-
import android.Manifest
4-
import android.content.pm.ActivityInfo
5-
import android.content.res.Configuration
63
import android.graphics.Typeface
7-
import androidx.appcompat.app.AppCompatActivity
84
import android.os.Bundle
9-
import android.text.Editable
10-
import android.text.InputType
11-
import android.text.TextWatcher
12-
import android.text.method.DigitsKeyListener
13-
import android.text.style.DynamicDrawableSpan
14-
import android.util.Log
5+
import android.text.Layout
156
import android.widget.TextView
7+
import androidx.appcompat.app.AppCompatActivity
168

179

1810
private const val TAG = "MainActivity"
@@ -28,14 +20,16 @@ class MainActivity : AppCompatActivity() {
2820
setBackgroundColor("#ff0099")
2921
}
3022
"还可以这样用"{
23+
setAlignment(Layout.Alignment.ALIGN_CENTER)
24+
setTextSize(44)
3125
setBackgroundColor("#ffff99")
3226
}
3327
addText("\n我已详细阅读并同意") {
3428
setBackgroundColor("#FF9900")
3529
setStyle(Typeface.BOLD_ITALIC)
3630
userUnderLine()
3731
useStrikethrough()
38-
setDrawableRight(R.drawable.icon_dingding, DynamicDrawableSpan.ALIGN_CENTER)
32+
setDrawableRight(R.drawable.icon_dingding)
3933
}
4034
addText("\n打电话") {
4135
asURL("tel:10086")
@@ -48,5 +42,13 @@ class MainActivity : AppCompatActivity() {
4842
}
4943
}
5044
}
45+
46+
findViewById<TextView>(R.id.tv_test2).buildSpannableString {
47+
"我是一个居中的文字内容"{
48+
setAlignment(Layout.Alignment.ALIGN_CENTER)
49+
setTextSize(44)
50+
setBackgroundColor("#ffff99")
51+
}
52+
}
5153
}
5254
}

app/src/main/res/layout/activity_main.xml

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,26 @@
1111
android:id="@+id/tv_test"
1212
android:layout_width="wrap_content"
1313
android:layout_height="wrap_content"
14-
android:text="t"
14+
android:text="我是一个兵"
1515
app:layout_constraintBottom_toBottomOf="parent"
1616
app:layout_constraintLeft_toLeftOf="parent"
1717
app:layout_constraintRight_toRightOf="parent"
1818
app:layout_constraintTop_toTopOf="parent"
19+
android:textSize="18sp"
1920
app:layout_constraintVertical_bias="0.182" />
2021

22+
<TextView
23+
android:id="@+id/tv_test2"
24+
android:layout_width="200dp"
25+
android:layout_height="100dp"
26+
android:background="@color/cardview_dark_background"
27+
android:text="我是一个兵2"
28+
android:textSize="18sp"
29+
app:layout_constraintBottom_toBottomOf="parent"
30+
app:layout_constraintHorizontal_bias="0.497"
31+
app:layout_constraintLeft_toLeftOf="parent"
32+
app:layout_constraintRight_toRightOf="parent"
33+
app:layout_constraintTop_toTopOf="parent"
34+
app:layout_constraintVertical_bias="0.614" />
35+
2136
</androidx.constraintlayout.widget.ConstraintLayout>

build.gradle

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import com.vanniktech.maven.publish.SonatypeHost
2-
31
// Top-level build file where you can add configuration options common to all sub-projects/modules.
42
plugins {
53
id 'com.android.application' version '7.1.2' apply false

library/src/main/java/xyz/junerver/ssktx/TextView.kt

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import android.graphics.Color
66
import android.graphics.Paint
77
import android.graphics.Typeface
88
import android.graphics.drawable.Drawable
9+
import android.text.Layout
910
import android.text.Spannable
1011
import android.text.SpannableStringBuilder
1112
import android.text.TextPaint
@@ -95,6 +96,10 @@ interface DslSpanBuilder {
9596
//设置文字颜色
9697
fun setForegroundColor(@Size(min = 1) colorString: String)
9798
fun setForegroundColor(@ColorRes colorId: Int)
99+
//设置文字布局
100+
fun setAlignment(align: Layout.Alignment)
101+
//设置文字大小
102+
fun setTextSize(size: Int)
98103

99104
//设置文字背景色
100105
fun setBackgroundColor(@Size(min = 1) colorString: String)
@@ -143,14 +148,16 @@ interface DslSpanBuilder {
143148

144149
class DslSpanBuilderImpl(private val textView: TextView) : DslSpanBuilder {
145150
var foregroundColorSpan: ForegroundColorSpan? = null
151+
var alignmentSpan: AlignmentSpan? = null
152+
var textSizeSpan: AbsoluteSizeSpan? = null
146153
var backgroundColorSpan: BackgroundColorSpan? = null
147154
var styleSpan: StyleSpan? = null
148155
var onClickSpan: ClickableSpan? = null
149156
var imageSpan: ImageSpan? = null
150157
var underlineSpan: UnderlineSpan? = null
151158
var strikethroughSpan: StrikethroughSpan? = null
152159
var urlSpan: URLSpan? = null
153-
internal val spanList = mutableListOf<CharacterStyle?>()
160+
internal val spanList = mutableListOf<Any?>()
154161

155162
//添加的 drawable 默认位于文字左侧
156163
var drawableLeft = true
@@ -165,6 +172,16 @@ class DslSpanBuilderImpl(private val textView: TextView) : DslSpanBuilder {
165172
spanList.add(foregroundColorSpan)
166173
}
167174

175+
override fun setAlignment(align: Layout.Alignment) {
176+
alignmentSpan = AlignmentSpan.Standard(align)
177+
spanList.add(alignmentSpan)
178+
}
179+
180+
override fun setTextSize(size: Int) {
181+
textSizeSpan = AbsoluteSizeSpan(size)
182+
spanList.add(textSizeSpan)
183+
}
184+
168185
override fun setBackgroundColor(@Size(min = 1) colorString: String) {
169186
backgroundColorSpan = BackgroundColorSpan(Color.parseColor(colorString))
170187
spanList.add(backgroundColorSpan)

0 commit comments

Comments
 (0)