[android] Pie (POS) 에서의 text |
https://android-developers.googleblog.com/2018/07/whats-new-for-text-in-android-p.html
PrecomputedText
-
TextView 에서 text 의 measure, layout 에 엄청 많은 일을 한다.
font file 을 읽고, 상형문자를 찾고, shape 를 결정하고, bounding box 를 measure 하고, cache 를 한다.
그리고 이 모든 일들은 UI Thread 에서 이루어진다. ( frame 하락을 가져온다. )
이 중에서 text measuring 이 90% 시간을 차지한다.
이 문제를 해결하기 위해 Jetpack 의 일부로 PrecomputedText 가 들어갔다.
이 API 는 PrecomputedTextCompat 이라는 이름으로 API 14(ICS) 부터 사용가능하다.
-
이 녀석을 사용하면 text layout 관련된 시간이 드는 대부분의 작업(layout, cache, measure)을 미리 수행할 수 있다.
이것은 bg thread 에서도 할 수 있다.
-
PrecomputedText.create(CharSequence, params) 의 결과물은 TextView 에 바로 assign 될 수 있다.
TextView 는 기존 대비 10% 정도의 일만 하면 된다.
-
val params: PrecomputedText.Params = textView.getTextMetricsParams() val ref = WeakReference(textView) executor.execute { // background thread val text = PrecomputedText.create("Hello", params) val textView = ref.get() textView?.post { // UI thread val textViewRef = ref.get() textViewRef?.text = text } }
Magnifier
-
Magnifier 라는 widget 은 window 에 붙어 있는 어떤 것이든 적용될 수 있다.
이 녀석은 view 나 surface 에 zoomed-in version 을 제공할 수 있다.
-
Magnifier 는 3가지의 메인 메소드를 가진다.
show, update, dismiss
fun onTouchEvent(event: MotionEvent): Boolean { when (event.actionMasked) { MotionEvent.ACTION_DOWN -> magnifier.show(event.x, event.y) MotionEvent.ACTION_MOVE -> magnifier.show(event.x, event.y) MotionEvent.ACTION_UP -> magnifier.dismiss() } }
Smart Linkify
-
Linkify 는 regex 를 사용하여 text 에 link 를 넣는 기능이며 API 1 부터 있었다.
그러나 Physical address 를 찾는 과정이 WebView 의 성능 하향을 가져오곤 했다.
이를 개선하기 위해서 TextClassifier API 를 쓰면 된다.
-
Smart Linkify 는 ML algorithm 을 사용해서 text 에서 link 할 것을 찾아낸다.
Smart Linkify 는 어떤 action 을 취해야 하는지를 알아서 인식해준다.
예를 들어 phone number 를 인식해서 메시지 보내기, 전화하기, 연락처에 저장하기 등의 액션을 추천한다.
-
val text: Spannable = ... val request = TextLinks.Request.Builder(text) val ref = WeakReference(textView) executor.execute { // background thread TextClassifier.generateLinks(request).apply(text) val textView = ref.get() textView?.post { // UI thread val textViewRef = ref.get() textViewRef?.text = text } }
Line Height and Baseline Text Alignment
-
P 이전에는 line 사이 간격은 lineSpacingExtra 나 lineSpacingMultiplier 로 조정되었다.
하지만 디자이너들은 대부분 이 대신 line hight 로 표기하곤 한다.
그래서 P 에서는 lineHeight 라는 것이 추가되었다. (내부적으로 보면 이녀석은 lineSpacingExtra 와 lineSpacingMultiplier 를 조작한다.)
-
first, last baseline 의 distance control 을 하기 위해서 firstBaselineToTopHeight, lastBaselineToBottomHeight 가 추가되었다.
firstBaselineToTopHeight 는 TextView 의 top boundary 와 TextVIew 의 첫번째 줄의 baseline 까지의 거리를 나타낸다.
반대로 lastBaselineToBottomHeight 는 TextView 의 bottom boundary 부터 마지막 줄의 baseline 까지의 거리를 나타낸다.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] Pie 에서 앱 잘 작동하는지 확인하기 (0) | 2019.07.30 |
---|---|
[android] Pie (9) 의 Power management (0) | 2019.07.29 |
[android] Android P 부터는 기본으로 TLS (0) | 2019.07.24 |
[android] POS, target SDK 28 이상의 동작 변경 (0) | 2019.07.23 |
[Android] 8.1 Feature and APIs (API Level 27) (0) | 2019.07.22 |
댓글