当前位置: 代码迷 >> Android >> android怎么在textview或edittext上添加表情
  详细解决方案

android怎么在textview或edittext上添加表情

热度:26   发布时间:2016-04-28 04:31:57.0
android如何在textview或edittext上添加表情

先上效果图:



首先来写一个表情的GridView

public class EmotionView extends LinearLayout implements OnItemClickListener {	private GridView mGridView;	private static final ArrayList<Integer> emotionDisplayList = new ArrayList<Integer>();	public static final LinkedHashMap<Integer, String> emotionsKeySrc = new LinkedHashMap<Integer, String>();	public static final HashMap<String, Integer> emotionsKeyString = new HashMap<String, Integer>();	private class GridViewAdapter extends BaseAdapter {		List<Integer> list;				public GridViewAdapter(List<Integer> list) {			super();			this.list = list;		}				public int getCount() {			return list.size();		}		public Object getItem(int position) {			return list.get(position);		}		public long getItemId(int position) {			return position;		}		public View getView(int position, View convertView, ViewGroup parent) {			int resId = (Integer) getItem(position);			ImageView iv = null;			if (convertView == null) {				iv = (ImageView) (convertView = new ImageView(getContext()						.getApplicationContext()));			}			else {				iv = (ImageView) convertView;			}			iv.setImageResource(resId);			iv.setBackgroundResource(R.drawable.bg_face);			int height = getResources().getDimensionPixelSize(					R.dimen.emotion_item_view_height);			iv.setPadding(0, height, 0, height);			return iv;		}			}	static {		emotionsKeySrc.put(R.drawable.face1, "怒");		emotionsKeySrc.put(R.drawable.face2, "蛋糕");		emotionsKeySrc.put(R.drawable.face3, "蜡烛");		emotionsKeySrc.put(R.drawable.face4, "干杯");		emotionsKeySrc.put(R.drawable.face5, "抓狂");		emotionsKeySrc.put(R.drawable.face6, "衰");		emotionsKeySrc.put(R.drawable.face7, "晕");		emotionsKeySrc.put(R.drawable.face8, "粽子");		emotionsKeySrc.put(R.drawable.face9, "风扇");		emotionsKeySrc.put(R.drawable.face10, "花");		emotionsKeySrc.put(R.drawable.face11, "足球");		emotionsKeySrc.put(R.drawable.face12, "绿丝带");		emotionsKeySrc.put(R.drawable.face13, "哼");		emotionsKeySrc.put(R.drawable.face14, "心");		emotionsKeySrc.put(R.drawable.face15, "冰棍");		emotionsKeySrc.put(R.drawable.face16, "哈哈");		emotionsKeySrc.put(R.drawable.face17, "爱你");		emotionsKeySrc.put(R.drawable.face18, "月亮");		emotionsKeySrc.put(R.drawable.face19, "猪头");		emotionsKeySrc.put(R.drawable.face20, "下雨");		emotionsKeySrc.put(R.drawable.face21, "红牌");		emotionsKeySrc.put(R.drawable.face22, "泪");		emotionsKeySrc.put(R.drawable.face23, "哨子");		emotionsKeySrc.put(R.drawable.face24, "困");		emotionsKeySrc.put(R.drawable.face25, "呵呵");		emotionsKeySrc.put(R.drawable.face26, "阳光");		emotionsKeySrc.put(R.drawable.face27, "汗");		emotionsKeySrc.put(R.drawable.face28, "黄牌");		emotionsKeySrc.put(R.drawable.face29, "嘻嘻");		emotionsKeySrc.put(R.drawable.face30, "伤心");			Iterator<Integer> iterator = emotionsKeySrc.keySet().iterator();		int i = 0;		while (iterator.hasNext()) {			int temp = iterator.next();			emotionsKeyString.put(emotionsKeySrc.get(temp), temp);			emotionDisplayList.add(temp);			i++;		}	}	public interface EmotionAdapter {		void doAction(int resId, String desc);	}	public EmotionView(Context context) {		super(context);		initViews();	}	public EmotionView(Context context, AttributeSet attrs) {		super(context, attrs);		initViews();	}	private void initViews() {		Context context = getContext();		LayoutInflater.from(context).inflate(R.layout.emotion_main, this);		mGridView = (GridView) findViewById(R.id.gridView);		mGridView.setAdapter(new GridViewAdapter(emotionDisplayList));		mGridView.setOnItemClickListener(this);	}	@Override	public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {		int value = emotionDisplayList.get(position);		listener.onclick(value);	}		MyListener listener;	public void setListener(MyListener listener) {		this.listener = listener;	}}

Layout是:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout	xmlns:android="http://schemas.android.com/apk/res/android"	android:layout_width="wrap_content"	android:layout_height="@dimen/emotion_view_height"	android:background="#d1d8e3" >	<GridView		android:id="@+id/gridView"		android:layout_width="fill_parent"		android:layout_height="fill_parent"		android:numColumns="@integer/emotion_colnum"		android:cacheColorHint="@null"		android:stretchMode="columnWidth"		android:listSelector="#00000000"		android:fadingEdgeLength="0dp" >	</GridView></RelativeLayout>


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".MainActivity" >   <com.example.weibotest.view.EmotionView		android:id="@+id/emotion_view"		android:layout_width="fill_parent"		android:layout_height="wrap_content"		android:layout_centerInParent="true"		/>      <EditText        android:id="@+id/textview"		android:layout_width="fill_parent"		android:layout_height="wrap_content"		android:layout_marginLeft="10dp"		android:layout_marginRight="10dp"		android:textSize="18sp"		android:textColor="#000000"		android:layout_marginBottom="10dp"		android:layout_above="@id/emotion_view"       /></RelativeLayout>

Activity里这样来写:

  EmotionView mEmotionView;   	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);		final TextView textView = (TextView)findViewById(R.id.textview);		mEmotionView = (EmotionView) findViewById(R.id.emotion_view);				textView.setText("<strong>a[晕]dfsfdf[阳光]ds</strong>");		String str1 = textView.getText().toString();		SpannableString spannableString = new SpannableString(str1);		Pattern pattern = null;<strong>	      pattern = Pattern.compile("\\[(\\S+?)\\]");  //这里是过滤出[XX]这种形式的字符串,下面是把这种形式的字符串替换成对应的表情</strong>		Matcher matcher = pattern.matcher(str1);		Integer drawableSrc = null;		while (matcher.find()) {			int start = matcher.start();			int end = matcher.end();			drawableSrc = EmotionView.emotionsKeyString.get<strong>(matcher.group(1))</strong>;			if (drawableSrc != null && drawableSrc > 0) {				<strong>spannableString.setSpan(new ImageSpan(MainActivity.this, drawableSrc), start, end,						Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);</strong>			}		}		textView.setText(spannableString,TextView.BufferType.SPANNABLE);				mEmotionView.setListener(new MyListener() {						@Override			public void onclick(int value) {				String str1 = textView.getText().toString();				SpannableString str = new SpannableString(str1);				if (value > 0) {					str.setSpan(new ImageSpan(MainActivity.this, value), 4, 5,							Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);					textView.setText(str,TextView.BufferType.SPANNABLE);				}			}		});


代码:http://download.csdn.net/detail/baidu_nod/7697419

  相关解决方案