Carthographing Jetpack 조합:텍스트

Carthographing Jetpack Compose의 세 번째 섹션에 오신 것을 환영합니다.지난 회에서 우리는 이미지를 살펴보고 Canvas()을 어떻게 사용하는지 이해했다.오늘 우리는 텍스트에 주목한다.보시다시피 텍스트와 관련된 기능은 상당히 많은 소프트웨어 패키지에 나타납니다.그래서 이 글의 목적은 어디에서 무엇을 찾을 수 있는지 알아보는 것이다.

사용 편의성


Jetpack Compose에 텍스트를 표시하는 것은 매우 간단합니다.다음 코드 세션은 가운데에 있는 사체 텍스트를 제공합니다.크기는 비례와 무관한 픽셀(sp)로 제공됩니다.
Text(
  modifier = Modifier.fillMaxWidth(),
  text = "Hello Compose",
  textAlign = TextAlign.Center,
  fontStyle = FontStyle.Italic,
  fontSize = 64.sp
)
Text()androidx.compose.material에 속한다.좋은 재료가 필요하지 않으면
BasicText(
  text = "Hello Compose"
)
너는 내가 BasicText(), androidx.compose.foundation.text 또는 textAlign을 통과하지 못했다는 것을 알아차렸니?너는 할 수 없다. 매개 변수로.텍스트의 모양새를 구성하려면 주석이 있는 문자열을 사용합니다.보기:
val l = mutableListOf<AnnotatedString.Range<SpanStyle>>()
l.add(AnnotatedString.Range(SpanStyle(Color.Red), 0, 5))
l.add(AnnotatedString.Range(SpanStyle(Color.Blue), 6, 13))
BasicText(
  text = AnnotatedString(
    text = "Hello Compose",
    spanStyles = l
  )
)

불변류 fontStylefontSize에 속한다.파일 설명:

The basic data structure of text with multiple styles. To
construct an AnnotatedString you can use Builder.


매개변수 AnnotatedString

a list of Ranges that specifies SpanStyles on certain
portion of the text. These styles will be applied in the order
of the list. And the SpanStyles applied later can override the
former styles.


나의 예는 주석이 있는 문자열에서 두 개의 다른 androidx.compose.ui.text을 정의했다.범위는 특정 유형의 항목(예를 들어 spanStyles), 시작(범위가 효력이 발생할 때)과 끝을 포함한다.끝은 해당 항목이 더 이상 유효하지 않은 위치를 나타냅니다.나의 옷은 색깔이 다르다.RangeSpanStyle, SpanStyle 또는 fontSize과 같이 다양하게 구성할 수 있습니다.
이제 빌더가 위의 문서를 어떻게 처리하는지 살펴보겠습니다.
BasicText(
  text = buildAnnotatedString {
    withStyle(
      style = SpanStyle(
        fontSize = 64.sp,
        color = Color.Yellow,
        background = Color.LightGray
      )
    ) {
      append("Hello Compose")
    }
    addStyle(
      style = ParagraphStyle(textAlign = TextAlign.Center),
      start = 0, end = length
    )
  }
)
fontStylebackground에 속해 buildAnnotatedString()과 같다.실제로 이들은 현재 같은 원본 파일 Annotated String을 공유하고 있습니다.kt.류 androidx.compose.ui.textAnnotatedString, AnnotatedString.BuilderAnnotatedString 등 방법으로 withStyle()을 구성할 수 있다.나의 예는 append()을 사용하여 기본적인 외관을 설정하고 addStyle()을 사용하여th텍스트를 추가한다.withStyle()은 나의 텍스트를 가운데에 놓았다.당신은 append()을 알아차렸습니까?addStyle()에서는 텍스트 길이를 직접 계산하지 않아도 됩니다.

클릭 가능한 텍스트


너는 다른 조합 가능한 텍스트와 같은 방식으로 텍스트를 클릭할 수 있다.
BasicText(
  text = "Hello Compose",
  modifier = Modifier.clickable {
    println("Hello")
  }
)
이것은 시작을 클릭하는 것과 같이 아주 편리한 일이다.그러나 사용자가 텍스트의 어느 부분을 눌렀는지 알아야 한다면?
ClickableText(
  text = AnnotatedString(text = "Click here"),
  onClick = {
    println(it)
  }
)
조합 가능 end = lengthlength에 속한다.파일 설명:

A continent version of BasicText component to be able to
handle click event on the text.

This is a shorthand of BasicText with pointerInput to be
able to handle click event easily.


사용자가 텍스트를 클릭할 때 ClickableText()을 실행합니다.리셋 함수는 클릭한 캐릭터의 편이도를 수신합니다.

기타 텍스트 관련 기능


지금까지 Jetpack Compose의 텍스트 관련 기능을 보여 드렸습니다.그러나 또 다른 텍스트를 처리하는 Jetpack(compose가 아님) 패키지는 androidx.compose.foundation.text이다.그것은 onClick과 같은 괜찮은 확장 함수를 포함하고 있다.그것이 어떻게 일을 하는지 우리에게 보여 주시오.

따라서 확장 함수는 그 매개 변수를 androidx.core.text에 전달한다.htmlEncode()종류는 TextUtils.htmlEncode()포대에 속한다.그래서 우리는 안드로이드 프레임에 뛰어들었다.특히 TextUtilsandroid.text이라는 클래스를 포함하고 이 클래스는 정적 androidx.core.text 함수를 가지고 있다.Jetpack Compose가 이 기능을 사용하는 경우 데스크탑의 Compose로 마이그레이션하는 데 도움이 되는 플랫폼에 대한 의존도가 사라질 수 있습니다.금방 따라갈게요.
그런데 TextUtilsCompat은 뭐 해요?Android 설명서 say:

Html-encode the string.


이것은 해석에 여지를 남겼다.😎 htmlEncode() 버전을 살펴보겠습니다.

그래서 우리는 두 가지를 배웠다.
  • htmlEncode() 일부 문자가 html에 우호적으로
  • 은 비교적 새로운 플랫폼 버전에서 심지어 androidx.core.text.TextUtilsCompat도 이 플랫폼을 호출할 수 있기 때문에 나의 상술한 가설은 성립되지 않는다.이를 위해서는 코드를 시종일관 htmlEncode() 부분으로 수정해야 한다.
  • 이 부분을 완성하기 전에 제가 언급하고자 하는 것은 TextUtilsCompat의 확장 기능은 else(또 다른 텍스트 관련 소프트웨어 패키지)과 capitalize()에서 모두 사용할 수 있다는 것입니다.첫 번째는 추천하지 않습니다.

    두 번째는 아니야.따라서 Compose 프로그램에서 kotlin.text을 사용하면 androidx.compose.ui.text을 받을 수 있습니다.

    결론


    Jetpack Compose의 텍스트 지원은 상당히 많은 패키지와 하위 패키지에 걸쳐 있습니다.프로그램 작성에 있어서 가장 중요한 결정은 재료 버전이나 더 기본적인 버전을 사용할지 여부입니다.내가 무슨 중요한 일을 놓쳤습니까?당신의 생각을 댓글로 공유해 주세요.

    좋은 웹페이지 즐겨찾기