package com.jone.app.ui.view; import android.content.Context; import android.text.Selection; import android.text.Spannable; import android.text.TextUtils; import android.util.AttributeSet; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; import com.jone.app.App; import com.jone.app.R; import com.jone.app.ui.adpater.EmoteAdapter; public class EmoteInputView extends LinearLayout implements OnClickListener, OnCheckedChangeListener, OnItemClickListener { private GridView mGvDisplay; private RadioGroup mRgInner; private ImageView mIvDelete; private EmoteAdapter mDefaultAdapter; private EmoteAdapter mEmojiAdapter; private EmoticonsEditText mEEtView; private boolean mIsSelectedDefault; public EmoteInputView(Context context) { super(context); init(); } public EmoteInputView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } public EmoteInputView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public void init() { inflate(getContext(), R.layout.common_emotionbar, this); mGvDisplay = (GridView) findViewById(R.id.emotionbar_gv_display); mRgInner = (RadioGroup) findViewById(R.id.emotionbar_rg_inner); mIvDelete = (ImageView) findViewById(R.id.emotionbar_iv_delete); mGvDisplay.setOnItemClickListener(this); mRgInner.setOnCheckedChangeListener(this); mIvDelete.setOnClickListener(this); mDefaultAdapter = new EmoteAdapter(getContext(), App.mEmoticons_Zem); mEmojiAdapter = new EmoteAdapter(getContext(), App.mEmoticons_Zemoji); mGvDisplay.setAdapter(mDefaultAdapter); mIsSelectedDefault = true; } @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { case R.id.emotionbar_rb_default: mGvDisplay.setAdapter(mDefaultAdapter); mIsSelectedDefault = true; break; case R.id.emotionbar_rb_emoji: mGvDisplay.setAdapter(mEmojiAdapter); mIsSelectedDefault = false; break; } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.emotionbar_iv_delete: if (mEEtView != null) { int start = mEEtView.getSelectionStart(); String content = mEEtView.getText().toString().trim(); if (TextUtils.isEmpty(content)) { return; } String startContent = content.substring(0, start); String endContent = content.substring(start, content.length()); String lastContent = content.substring(start - 1, start); int last = startContent.lastIndexOf("[zem"); int lastChar = startContent.substring(0, startContent.length() - 1).lastIndexOf("]"); if ("]".equals(lastContent) && last > lastChar) { if (last != -1) { mEEtView.setText(startContent.substring(0, last) + endContent); // 定位光标位置 CharSequence info = mEEtView.getText(); if (info instanceof Spannable) { Spannable spanText = (Spannable) info; Selection.setSelection(spanText, last); } return; } } mEEtView.setText(startContent.substring(0, start - 1) + endContent); // 定位光标位置 CharSequence info = mEEtView.getText(); if (info instanceof Spannable) { Spannable spanText = (Spannable) info; Selection.setSelection(spanText, start - 1); } } break; default: break; } } @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { String text = null; if (mIsSelectedDefault) { text = App.mEmoticons_Zem.get(arg2); } else { text = App.mEmoticons_Zemoji.get(arg2); } if (mEEtView != null && !TextUtils.isEmpty(text)) { int start = mEEtView.getSelectionStart(); CharSequence content = mEEtView.getText().insert(start, text); mEEtView.setText(content); // 定位光标位置 CharSequence info = mEEtView.getText(); if (info instanceof Spannable) { Spannable spanText = (Spannable) info; Selection.setSelection(spanText, start + text.length()); } } } public void setEditText(EmoticonsEditText editText) { mEEtView = editText; } }