分享项目中使用到的一个小功能: 在EditText中插入表情
先看效果图:
layout的代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:background="@color/bgcolor"
>
<RelativeLayout android:id="@+id/relat"
android:layout_height="wrap_content" android:layout_width="fill_parent"
android:layout_alignParentBottom="true"
>
<Button android:id="@+id/btn_face" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:background="@drawable/btn_insert_face" />
<Button android:id="@+id/share_imagechoose"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_toRightOf="@+id/btn_face"
android:layout_alignBaseline="@+id/btn_face" android:layout_marginLeft="10dp"
android:background="@drawable/newblog_pic_sel" />
<Button android:id="@+id/btn_publish" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:background="@drawable/button_reply"
android:text="发布" android:layout_alignParentRight="true"/>
<GridView android:id="@+id/face_view"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:padding="5dp" android:verticalSpacing="10dp"
android:horizontalSpacing="10dp" android:numColumns="auto_fit"
android:columnWidth="35dp" android:stretchMode="columnWidth"
android:layout_below="@+id/btn_face" android:visibility="gone" />
</RelativeLayout>
<LinearLayout android:id="@+id/linear" android:layout_above="@+id/relat"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical"
>
<include android:id="@+id/rl_title" layout="@layout/title"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:layout_gravity="top" />
<TextView android:id="@+id/message_tit" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text = "标题"
android:layout_below="@+id/rl_title" android:layout_marginTop="5dip"
/>
<EditText android:id="@+id/message_title" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:background="@drawable/edit_text"
android:layout_below="@+id/message_tit"
/>
<TextView android:id="@+id/content_view" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="内容"
android:layout_below="@+id/message_title"
/>
<EditText android:id="@+id/content_diary" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="@drawable/edit_text"
android:layout_below="@+id/content_view" android:gravity="top"
android:scrollbars="vertical"
/>
</LinearLayout>
</RelativeLayout>
java代码:
public class DiaryActivity extends Activity{
private boolean popFace;
private Context context;
private GridView gridView;
private String title,content;
private EditText titleText,contentText;
private ProgressDialog dialog;
private Button faceButton,imageButton,publishButton;
/*表情资源*/
public Integer[] mImageIds = { R.drawable.face119, R.drawable.face120,
R.drawable.face121, R.drawable.face122, R.drawable.face123,
R.drawable.face124, R.drawable.face125, R.drawable.face126,
R.drawable.face127, R.drawable.face128, R.drawable.face129,
R.drawable.face130, R.drawable.face131, R.drawable.face132,
R.drawable.face133 };
public void onCreate(Bundle b){
super.onCreate(b);
super.setContentView(R.layout.public_diary);
context = this;
initView();
}
private void initView(){
faceButton = (Button)findViewById(R.id.btn_face);
imageButton = (Button)findViewById(R.id.share_imagechoose);
publishButton = (Button)findViewById(R.id.btn_publish);
titleText = (EditText)findViewById(R.id.message_title);
contentText = (EditText)findViewById(R.id.content_diary);
gridView = (GridView)findViewById(R.id.face_view);
gridView.setAdapter(new ImageAdapter(context));
gridView.setOnItemClickListener(gridViewItemClick);
faceButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
if(!popFace){
gridView.setVisibility(v.VISIBLE);
popFace = true;
}else{
gridView.setVisibility(v.GONE);
popFace = false;
}
}
});
imageButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
}
});
}
private OnItemClickListener gridViewItemClick = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
String picName = position + "";
int pid = Integer.parseInt(mImageIds[position] + "");
setFace(picName, pid);
}
};
/*
* 第一个参数 是图片要的名称,可以自己取 第二个参数就是 图片资源ID
*/
private void setFace(String faceTitle, int faceImg) {
int start = contentText.getSelectionStart(); //选择光标的位置
Spannable ss = contentText.getText().insert(start,"{:face_" + faceTitle + ":}");
Drawable d = getResources().getDrawable(faceImg);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
ImageSpan span = new ImageSpan(d, faceTitle + ".gif",ImageSpan.ALIGN_BASELINE);
ss.setSpan(span, start,
start + ("{:face_" + faceTitle + ":}").length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
// 插入表情后,设置光标的位置
Editable etext = contentText.getText();
Selection.setSelection(etext, etext.length());
}
class ImageAdapter extends BaseAdapter{
private Context myContext;
private ImageView imageView;
public ImageAdapter(Context myContext){
this.myContext = myContext;
}
@Override
public int getCount() {
return mImageIds.length;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
imageView = new ImageView(myContext);
imageView.setImageResource(mImageIds[position]);
/* 使ImageView与边界适应 */
imageView.setAdjustViewBounds(true);
return imageView;
}
}
}