Android EditText表情(文字列)をカーソル位置に挿入

1325 ワード

前言
以前に書いたAndroidアプリでは、投稿に返信して表情を挿入する際にBUGが存在し、EditTextで指定したカーソルに表情文字列を挿入できず、追加するたびに表情文字列が文字の末尾に走った.apkソースコードを解析すると,表情盤のonClick応答イベントに表情文字列を正しく処理する追加方法がないことが分かったが,ここではEditText指定カーソルに表情文字列を挿入する方法を記録する.
EditTextカーソルに表情文字列を挿入する方法
EditTextコントロールに表情文字列を挿入する場合は、まずEditTextコントロールオブジェクトを取得する必要があります.例のソースコードは次のとおりです.
EditText rEditText = (EditText) findViewById(R.id.r_edittext);
現在のEditTextコントロールオブジェクトを取得しました.次に、現在のEditTextに存在する文字列を保存します.ソースコードの例は次のとおりです.
String oriContent = rEditText.getText().toString();
次に、カーソルの位置を取得します.EditTextコントロールで提供されるgetSelectionStart()メソッドを使用します.ただし、ここで注意しなければならないのは、EditTextにカーソルがない場合、この方法を使用して-1を返すことです.これは明らかに私たちが望んでいるカーソル位置ではありません.そのため、0と比較したほうがいいです.例のソースコードは以下の通りです.
int index = Math.max(rEditText.getSelectionStart(), 0);
残りは、所定のカーソル位置に表情文字列を挿入してから、新しいカーソル位置を設定します.完全な挿入表情の例のソースコードは次のとおりです.
private void insertEmotion(String insertEmotion) {
	String oriContent = rEditText.getText().toString();
	int index = Math.max(rEditText.getSelectionStart(), 0);
	StringBuilder sBuilder = new StringBuilder(oriContent);
	sBuilder.insert(index, insertEmotion);
	rEditText.setText(sBuilder.toString());
	rEditText.setSelection(index + insertEmotion.length());
}