Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

안드로이드 SpannableStringBuilder의 하이라이트 표시 문제 #911

Open
kammaii opened this issue Jan 11, 2020 · 2 comments
Open
Labels
Android / iOS 안드로이드 / ios

Comments

@kammaii
Copy link

kammaii commented Jan 11, 2020

해결하고자 하는 문제

안녕하세요?
SpannableStringBuilder의 ClickableSpan 을 사용하고 있고 해당 글자에 하이라이트를 넣었습니다.
그런데 아래 그림과 같이 하이라이트가 글자 밑으로 꽤 내려와 있습니다.
글자 높이만큼만 하이라이트를 주려면 어떻게 해야 할까요?

image

코드 혹은 오류

      public void readyForReading() {  

        readingTitle.setText(reading.getTitle());

        SpannableStringBuilder span = new SpannableStringBuilder(reading.getArticle());

        for(int i=0; i<reading.getStart().length; i++) {

            final int finalI = i;
            span.setSpan(new ClickableSpan() {
                @Override
                public void onClick(@NonNull View view) {  // 하이라이트 클릭 이벤트
                }

                @Override
                public void updateDrawState(@NonNull TextPaint ds) {   // 하이라이트 디자인 설정
                    ds.setColor(ContextCompat.getColor(getApplicationContext(), R.color.PURPLE));
                    ds.bgColor = ContextCompat.getColor(getApplicationContext(), R.color.PURPLE_TRANSPARENT);
                }
            }, reading.getStart()[i], reading.getEnd()[i], 0);  // 하이라이트 위치 설정

@studroid
Copy link
Collaborator

SpannableStringBuilder 등을 통해 만들어지는 결과는 결국 String이고, 이를 뷰에 표현할 때에는 TextView 등 View 요소를 상속받은 객체에 넣으셨을 것으로 보입니다.

글자 높이는 View에서 제어하는 요소이기 때문에, span 객체를 통해 만들어진 문자열을 입력한 View 요소에서 lineHeight 등의 속성 값을 조절하셔야 할 듯해요 :)

@kammaii
Copy link
Author

kammaii commented Jan 12, 2020

SpannableStringBuilder 등을 통해 만들어지는 결과는 결국 String이고, 이를 뷰에 표현할 때에는 TextView 등 View 요소를 상속받은 객체에 넣으셨을 것으로 보입니다.

글자 높이는 View에서 제어하는 요소이기 때문에, span 객체를 통해 만들어진 문자열을 입력한 View 요소에서 lineHeight 등의 속성 값을 조절하셔야 할 듯해요 :)

답변 감사합니다!
TextView를 살펴보니 lineSpacingExtra 때문에 그 값만큼 하이라이트가 아래로 길게 늘어진 것 같습니다.
가독성을 위해서 lineSpacingExtra 는 꼭 사용해야 하는데 ... 글자에만 하이라이트가 적용되게 할 수는 없을까요?
lineHeight 와 lineSpacingMultiflier 로도 변경해 보았는데 결과는 같았습니다.

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:padding="10dp">

            <TextView
                android:id="@+id/readingArticle"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:lineSpacingExtra="10dp"
                android:background="@android:color/transparent"
                android:gravity="left|top"
                android:padding="10dp"
                android:textSize="20dp"
                android:textColor="@color/BLACK"/>
        </ScrollView>

@devdreamers devdreamers added the Android / iOS 안드로이드 / ios label Jan 14, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Android / iOS 안드로이드 / ios
Projects
None yet
Development

No branches or pull requests

3 participants