androidsina 마이크로스피커 이모티콘 기능의 실현
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int index, long arg3) {
if(mEditText == null) return;
String content = mEditText.getText().toString().trim() + emotionNames[index];
if(TextUtils.isEmpty(content)) return;
Log.d(TAG, "SinaEmotionView: content = " + content);
boolean isLeft = true; //
List<Integer> leftBracketAt = new ArrayList<Integer>();
List<Integer> rightBracketAt = new ArrayList<Integer>();
char[] c_content = content.toCharArray();
for(int i = 0; i < c_content.length; i++){
if('[' == c_content[i]){
// Log.d(TAG, "left ------- " + i);
if(!isLeft){ // , 。 。
leftBracketAt.remove(leftBracketAt.size() - 1);
}
leftBracketAt.add(new Integer(i));
isLeft = false;
}else if(']' == c_content[i]){
// Log.d(TAG, "right ------- " + i);
if(isLeft){
rightBracketAt.remove(leftBracketAt.size() - 1);
}
rightBracketAt.add(new Integer(i));
isLeft = true;
}
}
SpannableString spannable = new SpannableString(content);
// [] // "[" "]"
int miniSize = leftBracketAt.size() <= rightBracketAt.size() ? leftBracketAt.size() : rightBracketAt.size();
for(int j = 0; j < miniSize; j++){
int leftAt = leftBracketAt.get(j);
int rightAt = rightBracketAt.get(j) + 1;
while(leftAt >= rightAt){
rightBracketAt.remove(j);
rightAt = rightBracketAt.get(j);
// Log.d(TAG, "while ---- ");
}
String name = content.substring(leftAt, rightAt);
// Log.d(TAG, "name ---- " + name + ".");
// name name
int pos = emotionNamePos(name);
if(-1 != pos){
//
Drawable drawable = getResources().getDrawable(emotionIconIds[pos]);
drawable.setBounds(0, 10, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()+10);
ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);
spannable.setSpan(span, leftAt, rightAt, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
}
}
mEditText.setText(spannable);
//
mEditText.requestFocus();
mEditText.setSelection(content.length());
}
여기서,
mEditText는 이모티콘과 웨이보 텍스트 내용을 표시하는 EditText 컨트롤입니다
emotionIconIds는 이모티콘 id의 int형 그룹입니다
emotionNames는 표정에 대응하는 문자(예를 들어 "[하하]")의 문자열 그룹입니다.
/**
* ,
* , , -1;
* @param name
* @return
*/
private int emotionNamePos(String name){
if(name == null) return -1;
for(int i = 0; i < emotionNames.length; i++){
if(name.equals(emotionNames[i])) return i;
}
return -1;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.