仿qq表情输入框

Activity代码

package cn.com.likeshow.inpututils;

import cn.com.likeshow.inpututils.FaceInputView.Face;
import cn.com.likeshow.inpututils.FaceInputView.OnFaceClickListener;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Editable;
import android.text.Html;
import android.text.Html.ImageGetter;

import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;

public class MainActivity extends Activity {

	EditText content_et;
	//输入表情须要
	ImageGetter imageGetter = new ImageGetter()
    {
        @Override
        public Drawable getDrawable(String source)
        {
            int id = Integer.parseInt(source);
            Drawable d = getResources().getDrawable(id);
            d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
            return d;
        }
    };
	@Override
	protected void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		FaceInputView inputView=(FaceInputView) findViewById(R.id.faceview);
		inputView.setOnClickListener(new OnFaceClickListener() {

			@Override
			public void selectedFace(Face face) {
				int id=face.faceId;
				if(id==R.drawable.ic_face_delete_normal)//删除button
				{
					int index = content_et.getSelectionStart();
					if(index==0)return;
					Editable editable = content_et.getText();
					editable.delete(index-1, index);//删除最后一个字符或表情
				}else{
					content_et.append(Html.fromHtml("<img src=‘"+ id +"‘/>", imageGetter, null));//加入表情
				}

			}
		});
		content_et=inputView.getEditText();
		inputView.getSendButton().setOnClickListener(new OnClickListener() {//为控件中Button加入监听事件

			@Override
			public void onClick(View v) {
				content_et.setText("");
			}
		});
	}

}

Activity布局

<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"
    android:orientation="vertical"
    android:layout_marginBottom="0dp"
    android:id="@+id/rel"
    >

     <cn.com.likeshow.inpututils.FaceInputView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/faceview"
        />

</RelativeLayout>

控件代码及布局例如以下

package cn.com.likeshow.inpututils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class FaceInputView extends LinearLayout implements View.OnClickListener {

	private OnFaceClickListener clickListener;
	private ViewPager viewPager;
	private List<View> list;

	private ImageView[] page_ivs=new ImageView[6];//6个底部位置标记
	private View view;
	private Map<Integer,Integer> ivIdToImgId=new HashMap<Integer,Integer>();//由控件id得到里面图片id
	private Context context;
	public FaceInputView(final Context context, AttributeSet attrs) {
		super(context, attrs);

		this.context=context;
		initView();
	}

	public FaceInputView(final Context context) {
		super(context);
		this.context=context;
		initView();
	}

	public EditText getEditText(){
		return (EditText) view.findViewById(R.id.content_et);
	}
	public Button getSendButton(){
		return (Button) view.findViewById(R.id.send_but);
	}
	private void initView() {
		LayoutInflater inflater = (LayoutInflater) context
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		view = inflater.inflate(R.layout.face_input_tabs, this);

//		 ////////////////////////////////////
		page_ivs[0]=(ImageView)view.findViewById(R.id.page_iv1);
		page_ivs[1]=(ImageView) view.findViewById(R.id.page_iv2);
		page_ivs[2]=(ImageView) view.findViewById(R.id.page_iv3);
		page_ivs[3]=(ImageView)view.findViewById(R.id.page_iv4);
		page_ivs[4]=(ImageView)view.findViewById(R.id.page_iv5);
		page_ivs[5]=(ImageView) view.findViewById(R.id.page_iv6);
//		////////////////////////
		viewPager=(ViewPager)view. findViewById(R.id.viewpager);

		View view1=LayoutInflater.from(context).inflate(R.layout.tab1, null);
		View view2=LayoutInflater.from(context).inflate(R.layout.tab2, null);
		View view3=LayoutInflater.from(context).inflate(R.layout.tab3, null);
		View view4=LayoutInflater.from(context).inflate(R.layout.tab4, null);
		View view5=LayoutInflater.from(context).inflate(R.layout.tab5, null);
		View view6=LayoutInflater.from(context).inflate(R.layout.tab6, null);

		initFaceIv(view1);
		initFaceIv(view2);
		initFaceIv(view3);
		initFaceIv(view4);
		initFaceIv(view5);
		initFaceIv(view6);
		list=new ArrayList<View>();
		list.add(view1);
		list.add(view2);
		list.add(view3);
		list.add(view4);
		list.add(view5);
		list.add(view6);

		viewPager.setAdapter(new MyAdapter());

		view.findViewById(R.id.add_face_iv).setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				InputMethodManager inputMethodManager= (InputMethodManager)context. getSystemService(FaceInputView.this.context.INPUT_METHOD_SERVICE);
				inputMethodManager.hideSoftInputFromWindow(view.findViewById(R.id.content_et).getWindowToken(), 0); //强制隐藏键盘
				 view.findViewById(R.id.faceline).setVisibility(View.VISIBLE);
			}
		});

		view.findViewById(R.id.keyboard_iv).setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				view.findViewById(R.id.faceline).setVisibility(View.GONE);
				InputMethodManager imm = (InputMethodManager)context. getSystemService(FaceInputView.this.context.INPUT_METHOD_SERVICE);
				imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
			}
		});

       viewPager.setOnPageChangeListener(new OnPageChangeListener(){
           int preposiition=0;
           @Override
           public void onPageSelected( int position) {

           	page_ivs[preposiition].setImageResource(R.drawable.not_this_page_img);
           	page_ivs[position].setImageResource(R.drawable.is_this_page_img);
           	preposiition=position;
          }

           @Override
           public void onPageScrolled( int arg0, float arg1, int arg2) {}
           @Override
           public void onPageScrollStateChanged( int arg0) {}
       });
       initMap();

	}

	private void initMap() {
		ivIdToImgId.put(R.id.face0, R.drawable.f000);
		ivIdToImgId.put(R.id.face1, R.drawable.f001);
		ivIdToImgId.put(R.id.face2, R.drawable.f002);
		ivIdToImgId.put(R.id.face3, R.drawable.f003);
		ivIdToImgId.put(R.id.face4, R.drawable.f004);
		ivIdToImgId.put(R.id.face5, R.drawable.f005);
		ivIdToImgId.put(R.id.face6, R.drawable.f006);
		ivIdToImgId.put(R.id.face7, R.drawable.f007);
		ivIdToImgId.put(R.id.face8, R.drawable.f008);
		ivIdToImgId.put(R.id.face9, R.drawable.f009);
		ivIdToImgId.put(R.id.face10, R.drawable.f010);
		ivIdToImgId.put(R.id.face11, R.drawable.f011);
		ivIdToImgId.put(R.id.face12, R.drawable.f012);
		ivIdToImgId.put(R.id.face13, R.drawable.f013);
		ivIdToImgId.put(R.id.face14, R.drawable.f014);
		ivIdToImgId.put(R.id.face15, R.drawable.f015);
		ivIdToImgId.put(R.id.face16, R.drawable.f016);
		ivIdToImgId.put(R.id.face17, R.drawable.f017);
		ivIdToImgId.put(R.id.face18, R.drawable.f018);
		ivIdToImgId.put(R.id.face19, R.drawable.f019);
		ivIdToImgId.put(R.id.face20, R.drawable.f020);
		ivIdToImgId.put(R.id.face21, R.drawable.f021);
		ivIdToImgId.put(R.id.face22, R.drawable.f022);
		ivIdToImgId.put(R.id.face23, R.drawable.f023);
		ivIdToImgId.put(R.id.face24, R.drawable.f024);
		ivIdToImgId.put(R.id.face25, R.drawable.f025);
		ivIdToImgId.put(R.id.face26, R.drawable.f026);
		ivIdToImgId.put(R.id.face27, R.drawable.f027);
		ivIdToImgId.put(R.id.face28, R.drawable.f028);
		ivIdToImgId.put(R.id.face29, R.drawable.f029);
		ivIdToImgId.put(R.id.face30, R.drawable.f030);
		ivIdToImgId.put(R.id.face31, R.drawable.f031);
		ivIdToImgId.put(R.id.face32, R.drawable.f032);
		ivIdToImgId.put(R.id.face33, R.drawable.f033);
		ivIdToImgId.put(R.id.face34, R.drawable.f034);
		ivIdToImgId.put(R.id.face35, R.drawable.f035);
		ivIdToImgId.put(R.id.face36, R.drawable.f036);
		ivIdToImgId.put(R.id.face37, R.drawable.f037);
		ivIdToImgId.put(R.id.face38, R.drawable.f038);
		ivIdToImgId.put(R.id.face39, R.drawable.f039);
		ivIdToImgId.put(R.id.face40, R.drawable.f040);
		ivIdToImgId.put(R.id.face41, R.drawable.f041);
		ivIdToImgId.put(R.id.face42, R.drawable.f042);
		ivIdToImgId.put(R.id.face43, R.drawable.f043);
		ivIdToImgId.put(R.id.face44, R.drawable.f044);
		ivIdToImgId.put(R.id.face45, R.drawable.f045);
		ivIdToImgId.put(R.id.face46, R.drawable.f046);
		ivIdToImgId.put(R.id.face47, R.drawable.f047);
		ivIdToImgId.put(R.id.face48, R.drawable.f048);
		ivIdToImgId.put(R.id.face49, R.drawable.f049);
		ivIdToImgId.put(R.id.face50, R.drawable.f050);
		ivIdToImgId.put(R.id.face51, R.drawable.f051);
		ivIdToImgId.put(R.id.face52, R.drawable.f052);
		ivIdToImgId.put(R.id.face53, R.drawable.f053);
		ivIdToImgId.put(R.id.face54, R.drawable.f054);
		ivIdToImgId.put(R.id.face55, R.drawable.f055);
		ivIdToImgId.put(R.id.face56, R.drawable.f056);
		ivIdToImgId.put(R.id.face57, R.drawable.f057);
		ivIdToImgId.put(R.id.face58, R.drawable.f058);
		ivIdToImgId.put(R.id.face59, R.drawable.f059);
		ivIdToImgId.put(R.id.face60, R.drawable.f060);
		ivIdToImgId.put(R.id.face61, R.drawable.f061);
		ivIdToImgId.put(R.id.face62, R.drawable.f062);
		ivIdToImgId.put(R.id.face63, R.drawable.f063);
		ivIdToImgId.put(R.id.face64, R.drawable.f064);
		ivIdToImgId.put(R.id.face65, R.drawable.f065);
		ivIdToImgId.put(R.id.face66, R.drawable.f066);
		ivIdToImgId.put(R.id.face67, R.drawable.f067);
		ivIdToImgId.put(R.id.face68, R.drawable.f068);
		ivIdToImgId.put(R.id.face69, R.drawable.f069);
		ivIdToImgId.put(R.id.face70, R.drawable.f070);
		ivIdToImgId.put(R.id.face71, R.drawable.f071);
		ivIdToImgId.put(R.id.face72, R.drawable.f072);
		ivIdToImgId.put(R.id.face73, R.drawable.f073);
		ivIdToImgId.put(R.id.face74, R.drawable.f074);
		ivIdToImgId.put(R.id.face75, R.drawable.f075);
		ivIdToImgId.put(R.id.face76, R.drawable.f076);
		ivIdToImgId.put(R.id.face77, R.drawable.f077);
		ivIdToImgId.put(R.id.face78, R.drawable.f078);
		ivIdToImgId.put(R.id.face79, R.drawable.f079);
		ivIdToImgId.put(R.id.face80, R.drawable.f080);
		ivIdToImgId.put(R.id.face81, R.drawable.f081);
		ivIdToImgId.put(R.id.face82, R.drawable.f082);
		ivIdToImgId.put(R.id.face83, R.drawable.f083);
		ivIdToImgId.put(R.id.face84, R.drawable.f084);
		ivIdToImgId.put(R.id.face85, R.drawable.f085);
		ivIdToImgId.put(R.id.face86, R.drawable.f086);
		ivIdToImgId.put(R.id.face87, R.drawable.f087);
		ivIdToImgId.put(R.id.face88, R.drawable.f088);
		ivIdToImgId.put(R.id.face89, R.drawable.f089);
		ivIdToImgId.put(R.id.face90, R.drawable.f090);
		ivIdToImgId.put(R.id.face91, R.drawable.f091);
		ivIdToImgId.put(R.id.face92, R.drawable.f092);
		ivIdToImgId.put(R.id.face93, R.drawable.f093);
		ivIdToImgId.put(R.id.face94, R.drawable.f094);
		ivIdToImgId.put(R.id.face95, R.drawable.f095);
		ivIdToImgId.put(R.id.face96, R.drawable.f096);
		ivIdToImgId.put(R.id.face97, R.drawable.f097);
		ivIdToImgId.put(R.id.face98, R.drawable.f098);
		ivIdToImgId.put(R.id.face99, R.drawable.f099);
		ivIdToImgId.put(R.id.face100, R.drawable.f100);
		ivIdToImgId.put(R.id.face101, R.drawable.f101);
		ivIdToImgId.put(R.id.face102, R.drawable.f102);
		ivIdToImgId.put(R.id.face103, R.drawable.f103);
		ivIdToImgId.put(R.id.face104, R.drawable.f104);
		ivIdToImgId.put(R.id.face105, R.drawable.f105);
		ivIdToImgId.put(R.id.face106, R.drawable.f106);

	}

	private void initFaceIv(View v) {
		ViewGroup vg=(ViewGroup)v;
		int count=vg.getChildCount();
		for(int i=0;i<count;i++){
			LinearLayout layout=(LinearLayout) vg.getChildAt(i);
			int faceCount=layout.getChildCount();
			for(int j=0;j<faceCount;j++){
				layout.getChildAt(j).setOnClickListener(this);
			}
		}
	}

	public void setOnClickListener(OnFaceClickListener l) {
		clickListener=l;
	}

	public interface OnFaceClickListener{
		public void selectedFace(Face face);
	}

	public class Face{
		public final String faceName;
		public final int faceId;
		public Face(String faceName, int faceId) {
			super();
			this.faceName = faceName;
			this.faceId = faceId;
		}

	}

	@Override
	public void onClick(View v) {

		if(clickListener!=null){
			ImageView iv=(ImageView) v;
			Integer i=(Integer) ivIdToImgId.get(v.getId());
			if(i==null)
				i=R.drawable.ic_face_delete_normal;
			clickListener.selectedFace(new Face("", i));
		}
	}

	/////////////////////
	private class MyAdapter extends PagerAdapter{

		@Override
		public int getCount() {
			return list.size();
		}

		@Override
		public void destroyItem(ViewGroup container, int position, Object object) {
			((ViewPager)container).removeView(list.get(position));
		}

		@Override
		public Object instantiateItem(ViewGroup container, int position) {
			((ViewPager)container).addView(list.get(position));
			return list.get(position);
		}
		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			return arg0==arg1;
		}

	}

}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:gravity="bottom"

     >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#f3f3f3"
        android:orientation="horizontal"
        android:padding="5dp" >

        <Button
            android:id="@+id/send_but"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:background="@drawable/but_seletor"
            android:text="发送"

            android:textColor="#ffffff" />

        <ImageView
            android:id="@+id/add_face_iv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:src="@drawable/add_face" />
        <ImageView
            android:id="@+id/keyboard_iv"
            android:layout_toRightOf="@id/add_face_iv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
             android:layout_marginLeft="5dp"
             android:layout_marginRight="5dp"
            android:layout_centerVertical="true"
            android:src="@drawable/keyboard_show_iv" />

        <EditText
            android:id="@+id/content_et"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:layout_toLeftOf="@id/send_but"
            android:layout_toRightOf="@id/keyboard_iv"
            android:background="@drawable/input_bag"
            android:maxLines="3"
            android:padding="8dp"
            android:textColor="#000000"/>
    </RelativeLayout>

    <LinearLayout
        android:id="@+id/faceline"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:background="#f3f3f3"
        android:visibility="gone"

         >

        <android.support.v4.view.ViewPager
            android:id="@+id/viewpager"
            android:layout_width="fill_parent"
            android:layout_height="126dp"
            android:layout_gravity="center"
           >

        </android.support.v4.view.ViewPager>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="10dp"
            android:layout_gravity="center"
            android:orientation="horizontal"
            android:layout_marginTop="5dp"
            android:layout_marginBottom="5dp"
              >

            <ImageView
                android:id="@+id/page_iv1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1.0"
                android:src="@drawable/is_this_page_img" />

            <ImageView
                 android:id="@+id/page_iv2"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1.0"
                android:src="@drawable/not_this_page_img" />

            <ImageView
                 android:id="@+id/page_iv3"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1.0"
                android:src="@drawable/not_this_page_img" />

            <ImageView
                 android:id="@+id/page_iv4"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1.0"
                android:src="@drawable/not_this_page_img" />

            <ImageView
                 android:id="@+id/page_iv5"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1.0"
                android:src="@drawable/not_this_page_img" />
            <ImageView
                 android:id="@+id/page_iv6"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1.0"
                android:src="@drawable/not_this_page_img" />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

剩余6个tab类似

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#f3f3f3"
    android:orientation="vertical" >

    <LinearLayout
        android:padding="5dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <ImageView
             android:id="@+id/face0"
            android:layout_weight="1.0"
            android:layout_width="0dp"
            android:layout_height="32dp"
            android:src="@drawable/f000" />
        <ImageView
            android:id="@+id/face1"
            android:layout_weight="1.0"
            android:layout_width="0dp"
            android:layout_height="32dp"
            android:src="@drawable/f001" />
        <ImageView
            android:id="@+id/face2"
            android:layout_weight="1.0"
            android:layout_width="0dp"
            android:layout_height="32dp"
            android:src="@drawable/f002" />
        <ImageView
            android:id="@+id/face3"
            android:layout_weight="1.0"
            android:layout_width="0dp"
            android:layout_height="32dp"
            android:src="@drawable/f003" />
        <ImageView
            android:id="@+id/face4"
            android:layout_weight="1.0"
            android:layout_width="0dp"
            android:layout_height="32dp"
            android:src="@drawable/f004" />
        <ImageView
            android:id="@+id/face5"
            android:layout_weight="1.0"
            android:layout_width="0dp"
            android:layout_height="32dp"
            android:src="@drawable/f005" />
        <ImageView
            android:id="@+id/face6"
            android:layout_weight="1.0"
            android:layout_width="0dp"
            android:layout_height="32dp"
            android:src="@drawable/f006" />
    </LinearLayout>
    <LinearLayout
        android:padding="5dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <ImageView
            android:id="@+id/face7"
            android:layout_weight="1.0"
            android:layout_width="0dp"
            android:layout_height="32dp"
            android:src="@drawable/f007" />
        <ImageView
            android:id="@+id/face8"
            android:layout_weight="1.0"
            android:layout_width="0dp"
            android:layout_height="32dp"
            android:src="@drawable/f008" />
        <ImageView
            android:id="@+id/face9"
            android:layout_weight="1.0"
            android:layout_width="0dp"
            android:layout_height="32dp"
            android:src="@drawable/f009" />
        <ImageView
            android:id="@+id/face10"
            android:layout_weight="1.0"
            android:layout_width="0dp"
            android:layout_height="32dp"
            android:src="@drawable/f010" />
        <ImageView
            android:id="@+id/face11"
            android:layout_weight="1.0"
            android:layout_width="0dp"
            android:layout_height="32dp"
            android:src="@drawable/f011" />
        <ImageView
            android:id="@+id/face12"
            android:layout_weight="1.0"
            android:layout_width="0dp"
            android:layout_height="32dp"
            android:src="@drawable/f012" />
        <ImageView
            android:id="@+id/face13"
            android:layout_weight="1.0"
            android:layout_width="0dp"
            android:layout_height="32dp"
            android:src="@drawable/f013" />
    </LinearLayout>
    <LinearLayout
        android:padding="5dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <ImageView
            android:id="@+id/face14"
            android:layout_weight="1.0"
            android:layout_width="0dp"
            android:layout_height="32dp"
            android:src="@drawable/f014" />
        <ImageView
            android:id="@+id/face15"
            android:layout_weight="1.0"
            android:layout_width="0dp"
            android:layout_height="32dp"
            android:src="@drawable/f015" />
        <ImageView
            android:id="@+id/face16"
            android:layout_weight="1.0"
            android:layout_width="0dp"
            android:layout_height="32dp"
            android:src="@drawable/f016" />
        <ImageView
            android:id="@+id/face17"
            android:layout_weight="1.0"
            android:layout_width="0dp"
            android:layout_height="32dp"
            android:src="@drawable/f017" />
        <ImageView
            android:id="@+id/face18"
            android:layout_weight="1.0"
            android:layout_width="0dp"
            android:layout_height="32dp"
            android:src="@drawable/f018" />
        <ImageView
            android:id="@+id/face19"
            android:layout_weight="1.0"
            android:layout_width="0dp"
            android:layout_height="32dp"
            android:src="@drawable/f019" />
        <ImageView
            android:id="@+id/face_del1"
            android:layout_weight="1.0"
            android:layout_width="0dp"
            android:layout_height="32dp"
            android:src="@drawable/ic_face_delete_normal" />
    </LinearLayout>

</LinearLayout>
时间: 2024-11-01 00:14:14

仿qq表情输入框的相关文章

android 开发高仿QQ表情选择、输入框

首先大家看效果: 用到的文件有(源码文件有,只包含表情.输入框等有关文件,工程项目是公司项目,恕不公开啦): res: drawable/face_del_icon.xml drawable/iv_face.xml drawable-ldpi下所有图片 raw下的配置文件 layout/item_face.xml   布局文件     layout/view_face_relativelayout.xml  布局文件,注意使用方法是通过include调用的 java文件: ChatEmoji.j

【Qt UI】仿QQ表情选择控件

表情选择控件在聊天应用中经常要用到,做起来虽然不复杂但是很繁琐,特别是有些图标需要按顺序排列.每次重做必然是很费时,所以我将聊天表情选择控件封装成一个独立的类QFaceSelectWidget,方便直接应用到自己的项目中. 先来看看效果图: 测试程序是一个对话框,里面放有一个QPushButton和一个QLabel,水平布局.点击按钮弹出"表情选择框",选择表情后"表情选择框"关闭,QLabel中显示刚才选择的表情."表情选择框"中的表情都是gi

iOS_仿QQ表情键盘

当UITextFiled和UITextView这种文本输入类控件成为第一响应者时,弹出的键盘由他们的一个UIView类的inputView属性来控制,当inputView为nil时会弹出系统的键盘,想要弹出自定义的键盘,将我们自定义的UIView对象给inputView属性赋值即可.表情键盘重点在于排列各个表情和删除键,以及表情键盘上的各种回调设置: 下面为键盘预览图,兼容了竖屏各版本适配,横屏没有兼顾.横屏适配参见这篇博客iOS之自定义表情键盘 图1为6的常用表情,图2为6的全部表情,图3为5

Android特效专辑(六)——仿QQ聊天撒花特效,无形装逼,最为致命

Android特效专辑(六)--仿QQ聊天撒花特效,无形装逼,最为致命 我的关于特效的专辑已经在CSDN上申请了一个专栏--http://blog.csdn.net/column/details/liuguilin.html 日后我所写的特效专辑也会以一添加在这个专栏上,今天写的这个特效,是关于聊天的,你肯定遇到过,就是你跟人家聊天的时候,比如发送应(么么哒),然后屏幕上全部就是表情了,今天我们就是做这个,撒花的特效,国际惯例,上图 截图 实现这样的效果,你要知道贝塞尔曲线,何谓贝塞尔曲线?其实

仿QQ聊天软件2.0版

仿QQ聊天软件2.0版 转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907     上次课设做了Java版的仿QQ聊天程序,这次软件实训,我们继续完善了仿QQ聊天程序,将上次未完成及不完善的地方进行完善和改进,还新加了部分功能:表情输入.气泡模式.文件传输.截屏.语音聊天.逐步向QQ的基本功能靠齐.通过这次软件实训,又有了很多收获. 一.设计内容及要求 1.1综述 A.系统概述 我们要做的就是类似QQ这样的面向企业内部的聊天软件,基本功能和QQ类似.首先,

iOS_28仿QQ空间登录与退出

最终效果图如下: 注意事项: 输入框的return Key Main.storyboard中为 LoginController 设置一个storyboardID, 以便可以在代码中通过Storyboard对象实例,创建Main.storyboard里面的控制器 仿QQ窗口抖动 dispach_after模拟延时 输入框的return Key的不同处理方式 Login控制器代码 // // LoginController.m // 28_QQ空间 // // Created by beyond o

在EditText中添加QQ表情

本文参考自:http://blog.csdn.net/wulianghuan/article/details/8583921 在输入框中输入表情是每个聊天软件的必备功能,做到这点仅需要将表情放入工程图片文件夹中,然后用这段代码来添加图片即可,也就是说将图片作为一个文字添加到输入框中. //获取表情图片文件名 Field field=R.drawable.class.getDeclaredField("f" + randomId); int resourceId=Integer.pars

高仿QQ源码下载 (android前端+JAVA后台+spark&lt;windows版聊天&gt;)方便集成到自己系统

 A openfire (XMPP+开源源码); B android前端源码(仿QQ高大上UI); C JAVA后台源码(UI高大上HTML5);  Dspark(windows版);  系统主要实现为:JAVA后台(springmvc+mybaits)+openfire(xmpp推送)+android(asmark+ActiveAndroid+async-http+universal-image-loader)+spark(windows版);  android前端 1.集成Activie

Android 利用ExpandableListView显示和查询仿QQ分组列表用户信息

在我们的项目开发过程中,经常会对用户的信息进行分组,即通过组来显示用户的信息,同时通过一定的查询条件来显示查询后的相关用户信息,并且通过颜色选择器来设置列表信息的背景颜色. 其中借鉴xiaanming:http://blog.csdn.net/xiaanming/article/details/12684155 下面来看看项目运行后的效果图以及代码结构图: 下面通过代码来实现整个效果. 1.主界面布局activity_main.xml <span style="font-size:18px