2017-12-17 7 views
0

사용자 지정 키보드에서 작업 중이며 문자를 삭제하려면 deleteSurroundingText을 사용하고 있습니다. 나는 이것에 대해서만 두 가지 문제가있다. deleteSurroundingText 이모티콘을 삭제하는 동안 제대로 작동하지 않습니다. 하나의 그림 이모티콘을 없애기 위해 del 버튼을 두 번 눌러야합니다. 그리고 두 번째 del 키는 select all 옵션으로 작동하지 않습니다. ?deleteSurroundingText가 emojis에서 작동하지 않고 all을 선택하는 이유는 무엇입니까?

그것은 물음표로 바뀝니다 :

case Keyboard.KEYCODE_DELETE: 
    getCurrentInputConnection().deleteSurroundingText(1,0); 
    break; 

이것은 내가 델 그림 이모티콘을하려고 누르면 그림 이모티콘 일어나는 것입니다. 또한, select all을 수행하여 델 텍스트를 시도 할 때 아무 일도 발생하지 않습니다.

어떤 도움을 주시면 감사하겠습니다

답변

0

자바는 16 비트 문자를 (문서에 note 참조)를 사용합니다. 따라서 한 문자는 U+0000에서 U+FFFF까지의 코드 포인트를 저장할 수 있습니다.
현대 유니 코드는 U+0000에서 U+10FFFF까지의 코드 포인트 범위를 정의합니다. 대부분의 이모티콘에는 U+FFFF 이상의 코드 포인트가 있습니다. 이러한 코드 포인트를 나타 내기 위해 "surrogate pairs"이 사용됩니다.
즉, 각 이모 지 (및 U+FFFF 경계를 넘는 모든 다른 코드 포인트)는 두 개의 결과 문자열로 표시됩니다.
deleteSurroundingText(1,0);으로 전화하면 서로 게이트 쌍이 손상됩니다. 서로 게이트 쌍 중 아직 삭제되지 않은 부분은 ? 표시로 렌더링됩니다.

IME 저자가 : 대리 쌍 절반을 삭제하지 않도록주의하시기 바랍니다 deleteSurroundingText()에 대한

문서는 특별히이 사건을 강조한다. 에디터에있는 것보다 많은 문자를 지우지 않도록 조심하십시오. 이는 응용 프로그램에 나쁜 영향을 미칠 수 있습니다. 이 메소드를 호출하면 일괄 입력이 끝나면 편집기에서 onUpdateSelection (int, int, int, int, int, int)을 호출하게됩니다.

사용하기 전에 다음 번에 방법 설명서를주의 깊게 읽으십시오.

문자가 서로 게이트 쌍의 일부인지 확인하려면 Chracter::isSurrogate() 메서드를 사용하십시오.

+0

도움 주셔서 감사합니다 :) – Meimo