2016-07-02 5 views
4

나는 무작위로 이모티콘을 사용자에게 돌려 줄 수있는 작은 안드로이드 응용 프로그램을 만들려고합니다. 내 의도는 실제 유니 코드 이모티콘 문자를 사용하여 유니 코드 문자열 문자로 반환하는 것입니다.유니 코드 문자가 지원되는지 검색 하시겠습니까?

무작위로 선택할 수있는 유니 코드 문자열의 전체 배열을 만들었으며 많은 유니 코드 문자열이 올바르게 표시됩니다. 그러나 일부는 지원되지 않는 문자 (x가있는 사각형)로 표시됩니다.

분명히 모든 플랫폼이 모든 유니 코드 이모티콘 문자를 지원하지는 않지만 가능한 경우 지원되는 문자가 무엇인지 판별 할 수있는 방법을 원합니다. 이상적인 방법은 지원되는 문자 목록을 쿼리하는 것이지만 개별 문자를 테스트 할 수 있으면 작업을 올바르게 수행 할 수 있습니다.

+0

보기? 감사! – Maragues

+1

@Maragues 불행히도, 나는 일하기를 기대할 수있는 안전한 이모티콘을 수동으로 정의한 상수 배열을 갖기 위해 사임했습니다. – SuperBiasedMan

+0

Android 23에는 무언가 (https://developer.android.com/reference/android/graphics/Paint.html#hasGlyph(java.lang.String))가 포함되어 있지만 코드가 기본 함수를 호출하는 것처럼 보입니다. 내가 운이 없다고 생각해. 빠른 응답 주셔서 감사합니다 – Maragues

답변

2

Character.isDefined을 사용하여 문자가 장치의 유니 코드 버전에 정의되어 있는지 확인할 수 있습니다.

+0

아, 이건 좋은 단서 야 고마워! 불행히도 가끔 문제가 생길 뿐이야. 오탐 (false positives)이 많아서 제대로 구현되지 않았다고 생각하게 만든다. 안드로이드에서. – SuperBiasedMan

+0

'Character.isDefined'는 "JVM이 이것이 어떤 종류의 문자인지 알고 있습니까?"(예 : 공백인지, 숫자인지, ...), OP는 "현재 글꼴에 글리프 문자가 무엇입니까? " – ruakh

3

"지원되지 않는"문자에 대해 말하면 현재 글꼴에 문자에 대한 글리프가없는 것입니다. (그리고 응용 프로그램에는 찾을 대체 논리가 없습니다. 인 다른 글꼴이거나 시스템에 인 글꼴이없는 글꼴이없는 경우).

정규 자바에서는 매우 쉽습니다. java.awt.Font의 인스턴스가 주어지면 the canDisplay method을 사용하여 주어진 유니 코드 문자에 글리프가 있는지 확인할 수 있습니다.

Android API는 어떤 이유로 든 실제로 사용하고있는 글꼴을 파악하는 방법을 드러내지 않는 것처럼 보입니다. (android.graphics.Typeface은이 정보를 비공개로 유지합니다 : "Check the family of a Typeface object in Android"을 참조하십시오.) 그러나 최소한 12300 sans-serif 기본 글꼴을 얻으려면 new java.awt.Font("SansSerif", java.awt.Font.PLAIN, 12) 같은 것을 시도해보십시오. 물론 실제 글꼴이 표시 될 수있는 그림 이모티콘에 유용한 근사값을 제공하는지 테스트해볼 수 있습니다.

+0

당신이 정확히 무슨 뜻인지 맞습니다. 정보를 주셔서 감사합니다! 안드로이드 API에는'java.awt.Font'가 전혀 포함되어 있지 않으므로 가져올 수 없습니다. 그 방법을 사용하십시오.하지만 Typeface로 할 수있는 것을 보게 될 것입니다. 더 유용한 폰트로 바꾸거나, 아니면 글리프가 지원되지 않을 때 기본 폰트를 설정하려고 시도 할 것입니다. – SuperBiasedMan

+0

오, 이상한 - - 안드로이드가 부품을 생략했다는 것을 몰랐습니다. JDK의 (당신이 말할 수 없다면 나는 안드로이드 개발자가 아니다 : - P) – ruakh

1

API 레벨 23에 추가 된 Canvas.hasGlyph(String)도 확인하십시오.이 기능을 사용하여 그림 이모티콘과 같은 문자에 글리프를 사용할 수 있는지 테스트 할 수 있습니다.

이것은 documentation의 말씀입니다 :

boolean hasGlyph (String string)

는 페인트에 설정 서체가 문자열을 지원하는 문양이 있는지 여부를 결정합니다. 가장 간단한 경우는 문자열에 문자가 포함되어 있고이 메서드는 글꼴에 문자가 있는지 여부를 확인합니다. 복수 문자의 경우, 합자를 나타내는 단일의 글리프가있는 경우,이 메소드는 true를 돌려줍니다. . 예를 들어 입력이 한 쌍의 지역 표시기 기호 인 경우 에 해당하는 이모티콘 플래그가 있는지 여부를 확인하십시오.

마지막으로 문자열에 변형 선택자가 포함되어있는 경우에만 메서드는 해당 변형에 해당하는 글리프가 있으면 true를 반환합니다.

확인은 대체 글꼴뿐만 아니라 전체 대체 체인에서 수행됩니다.

당신이 이것에 대한 해결책을 찾았어요 또한

관련 문제