마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

TextView 슬래시(/) 혹은 하이픈(-)이 있는 경우 자동 개행 방지.

0 추천
안녕하세요.

이번에 뭘 개발하는데 링크 주소를 보여주는 TextView에서 자꾸 자동으로 개행이 되는게 문제인데요.

예를 들자면

 

 * 원 텍스트 : http://www.masterqna.com/android/ask

 * 예상 및 요구사항

    http://www.masterqna.com/andr

    oid/ask

 

 * 실 상황

    http://www.masterqna.com

    /android/ask

 

과 같이 /를 기준으로 내려가 버리는 현상이 있습니다.

일단 확인해본 결과 android 8.0 미만의 버전에는 justify 옵션이 없으며 별도 커스터 마이징 한 justifyTextView도 /, -가 들어가면 무용지물이 되어버립니다.

ReplacementTransformationMethod를 구현하여 /와 -를 특정 코드를 통해서 변환 시키면 개행은 일어나지 않지만 텍스트 모양이 이상해져버리구요.

혹시 해당 사항에 대한 답을 아시거나 해결해보신 분이 있으시다면 조언 부탁드립니다.

감사합니다.

 

++ 추가적으로 webview를 통해서 하는 방법도 테스트 해봤지만 해당 TextView에 디자인 요소들이 좀 들어가 있어서 사용하기가 다소 어렵습니다.
익명사용자 님이 2018년 10월 18일 질문
html.fromHtml() 은 못 쓰나요?

1개의 답변

0 추천

TextView에 관련해서 setJustificationMode뿐 아니라 setBreakStrategy나 setHyphenationFrequency 등이 있지만 원하시는 동작을 수행하는 옵션이 아직은 없어 보입니다. 도대체 왜 없는지 모르겠어요. 

TextView를 건드리지 않고 String을 변경해서 처리하는 방법이 있는데요. 말씀하신대로 / - 를 break되지 않는 비슷한 다른 문자로 바꿔줄수도 있고, 아니면 TextView의 넓이에 따라 적절한 위치에 zero-width space를 넣어서 끊어주는 방법이 있는데요. 

만약 해당 TextView가 다른 Text 없이 URL 정도의 짧은 텍스트만 담는 다면 그냥 모든 위치에 zero-width space를 넣어버려도 원하는 결과를 얻을수 있을것 같습니다. 아래는 급조한 메서드인데 원하는 결과 나오는지 확인해보세요. 

 

	public static String makeBreakableTextUsingZeroWidthSpace(String s) {
		StringBuilder sb = new StringBuilder();

		for(int i = 0; i < s.length(); i++) {
			sb.append(s.charAt(i));
			sb.append("\u200B");
		}

		if(sb.length() > 0) {
			sb.deleteCharAt(sb.length() - 1);
		}

		return sb.toString();
	}

 

회색 (21,040 포인트) 님이 2018년 10월 18일 답변
...