- 浏览: 409343 次
- 性别:
- 来自: 福州
最新评论
-
野牛精:
感谢楼主分享,帮大忙了。
android ftp 客户端编写(ftp4j) -
happytianqiu:
你好,我最近也在搞这个,能发个demo吗,邮箱是:624951 ...
开发android机顶盒应用 事件,焦点处理 -
zhunanfengfeimeng:
http://www.iteye.comhttp://www. ...
android ftp 客户端编写(ftp4j) -
icyttea:
好棒!感谢楼主分享
vlc for android录制视频与截图 -
clwwlc:
有demo吗
开发android机顶盒应用 事件,焦点处理
android 颜表情.
- 博客分类:
- android
在使用TagsViewGroup 流布局后,我替换了原来的GridView作为表情控件.因为原来的表情是图片,大小是固定的,统一的.而有了颜表情后,这次变得很糟糕.
因为颜表情字数不定,所以宽度不定.使用固定宽度的布局,有些列会显得很空.于是,使用一个非固定宽度的布局更合适些.
此次除了应用TagsViewGroup外,还将表情,放入一个控件中,可以供不同的地方使用.
因为颜表情字数不定,所以宽度不定.使用固定宽度的布局,有些列会显得很空.于是,使用一个非固定宽度的布局更合适些.
此次除了应用TagsViewGroup外,还将表情,放入一个控件中,可以供不同的地方使用.
EmojiPanelView,表情面板,是一个LinearLayout控件. public class EmojiPanelView extends LinearLayout 然后就可以在布局中使用了 <cn.archko.microblog.view.EmojiPanelView android:layout_below="@id/status_bar" android:id="@+id/emoji_panel" android:visibility="gone" android:layout_width="match_parent" android:layout_height="match_parent"/> xml布局的其它部分略. 接着在Activity等ui中初始化: mEmojiPanelView=(EmojiPanelView) findViewById(R.id.emoji_panel); mEmojiPanelView.setContent(commentET);//设置颜表情的EditText输入框. 这个EmojiPanelView,是包含了多个表情内容的,从附件图片中可以看出,上方是一个ScrollView,里面放着不同的类型的表情,有图片的有文字颜表情.ui并不好看,可以自己改造. 定义域变量: TagsViewGroup mEmotionGridview; private GridAdapter mEmotionAdapter; //下面一表情类型的按钮, Button btn_emoji_picture, btn_emoji_love, btn_emoji_pig, btn_emoji_wakeup, btn_emoji_kiss, btn_emoji_happy, btn_emoji_embarrased, btn_emoji_cry, btn_emoji_angry, btn_emoji_animal; private static final int MODE_PICTURE=0;//是图片表情,目前只有一个, private static final int MODE_TEXT=1;//文字表情 int mode=MODE_PICTURE; EditText mContent; public EmojiPanelView(Context context) { super(context); init(context); } public EmojiPanelView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } private void init(Context context) { ((LayoutInflater) context.getSystemService("layout_inflater")).inflate(R.layout.emoji_panel, this); btn_emoji_picture=(Button) findViewById(R.id.btn_emoji_picture); btn_emoji_love=(Button) findViewById(R.id.btn_emoji_love); btn_emoji_pig=(Button) findViewById(R.id.btn_emoji_pig); btn_emoji_wakeup=(Button) findViewById(R.id.btn_emoji_wakeup); btn_emoji_kiss=(Button) findViewById(R.id.btn_emoji_kiss); btn_emoji_happy=(Button) findViewById(R.id.btn_emoji_happy); btn_emoji_embarrased=(Button) findViewById(R.id.btn_emoji_embarrased); btn_emoji_cry=(Button) findViewById(R.id.btn_emoji_cry); btn_emoji_angry=(Button) findViewById(R.id.btn_emoji_angry); btn_emoji_animal=(Button) findViewById(R.id.btn_emoji_animal); btn_emoji_picture.setOnClickListener(clickListener); btn_emoji_love.setOnClickListener(clickListener); btn_emoji_pig.setOnClickListener(clickListener); btn_emoji_wakeup.setOnClickListener(clickListener); btn_emoji_kiss.setOnClickListener(clickListener); btn_emoji_happy.setOnClickListener(clickListener); btn_emoji_embarrased.setOnClickListener(clickListener); btn_emoji_cry.setOnClickListener(clickListener); btn_emoji_angry.setOnClickListener(clickListener); btn_emoji_animal.setOnClickListener(clickListener); mEmotionGridview=(TagsViewGroup) findViewById(R.id.tags); mEmotionAdapter=new GridAdapter(getContext()); getPictureEmoji(); } //设置输入的内容框 public void setContent(EditText content) { this.mContent=content; } 这里的布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:ignore="ContentDescription" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"> <HorizontalScrollView android:fillViewport="true" android:scrollbars="none" android:layout_width="fill_parent" android:layout_height="wrap_content"> <LinearLayout android:id="@+id/button_bar" android:layout_width="wrap_content" android:layout_height="@dimen/bottom_action_bar_height2" android:layout_gravity="bottom" android:layout_marginBottom="0dip"> <Button android:id="@+id/btn_emoji_picture" android:visibility="visible" android:text="@string/emoji_picture" style="?attr/bottomActionBarItem"/> <Button android:id="@+id/btn_emoji_love" android:visibility="visible" android:text="@string/emoji_love" style="?attr/bottomActionBarItem"/> <Button android:id="@+id/btn_emoji_pig" android:visibility="gone" android:text="@string/emoji_pig" style="?attr/bottomActionBarItem"/> <Button android:id="@+id/btn_emoji_wakeup" android:text="@string/emoji_wakeup" style="?attr/bottomActionBarItem"/> <Button android:id="@+id/btn_emoji_kiss" android:visibility="visible" android:text="@string/emoji_kiss" style="?attr/bottomActionBarItem"/> <Button android:id="@+id/btn_emoji_happy" android:visibility="visible" android:text="@string/emoji_happy" style="?attr/bottomActionBarItem"/> <Button android:id="@+id/btn_emoji_embarrased" android:visibility="visible" android:text="@string/emoji_embarrased" style="?attr/bottomActionBarItem"/> <Button android:id="@+id/btn_emoji_cry" android:visibility="visible" android:text="@string/emoji_cry" style="?attr/bottomActionBarItem"/> <Button android:id="@+id/btn_emoji_angry" android:visibility="visible" android:text="@string/emoji_angry" style="?attr/bottomActionBarItem"/> <Button android:id="@+id/btn_emoji_animal" android:visibility="visible" android:text="@string/emoji_animal" style="?attr/bottomActionBarItem"/> </LinearLayout> </HorizontalScrollView> 原来的网格,去除后用流布局 <!--<GridView android:id="@+id/faces" android:visibility="visible" android:drawSelectorOnTop="false" android:fadingEdgeLength="0.0dip" android:columnWidth="45dp" android:layout_width="fill_parent" android:layout_height="fill_parent" android:listSelector="@color/transparent" android:paddingLeft="6dp" android:paddingRight="6dp" android:verticalSpacing="6dp" android:horizontalSpacing="4dp" android:cacheColorHint="@null" android:stretchMode="columnWidth" android:numColumns="auto_fit"/>--> <ScrollView android:fillViewport="true" android:scrollbars="none" android:layout_width="wrap_content" android:layout_height="wrap_content"> <cn.archko.microblog.view.TagsViewGroup android:id="@+id/tags" style="@style/tags" android:layout_width="match_parent" android:layout_height="match_parent"/> </ScrollView> </LinearLayout> private void getPictureEmoji() { mEmotionAdapter.setList(AKSmileyParser.getInstance(getContext()).mSmileyTexts); mEmotionGridview.setAdapter(mEmotionAdapter); } AKSmileyParser是一个处理图片表情的工具类,之前好像有发过.这里不说,不是重点,甚至可以去除. 添加按钮的监听器: OnClickListener clickListener=new OnClickListener() { @Override public void onClick(View view) { int id=view.getId(); if (id==R.id.btn_emoji_picture) { mode=MODE_PICTURE; getPictureEmoji(); } else { mode=MODE_TEXT; int resId=R.raw.emoji_angry; if (id==R.id.btn_emoji_angry) { } else if (id==R.id.btn_emoji_love) { resId=R.raw.emoji_love; } else if (id==R.id.btn_emoji_pig) { resId=R.raw.emoji_pig; } else if (id==R.id.btn_emoji_wakeup) { resId=R.raw.emoji_wakeup; } else if (id==R.id.btn_emoji_kiss) { resId=R.raw.emoji_kiss; } else if (id==R.id.btn_emoji_happy) { resId=R.raw.emoji_happy; } else if (id==R.id.btn_emoji_embarrased) { resId=R.raw.emoji_embarrassed; } else if (id==R.id.btn_emoji_cry) { resId=R.raw.emoji_cry; } else if (id==R.id.btn_emoji_animal) { resId=R.raw.emoji_animal; } getTextEmoji(resId); } } }; private void getTextEmoji(int resId) { String[] txts=AKTxtSmileyParser.getInstance().getSmileyTexts(getContext(), resId); if (null==txts) { Toast.makeText(getContext(), "解析表情出错.", Toast.LENGTH_LONG).show(); return; } mEmotionAdapter.setList(txts); mEmotionGridview.setAdapter(mEmotionAdapter); } AKTxtSmileyParser是一个颜表情的解析类,这个类的功能就是将一个txt文本的内容解析出来. 文本内容:比如 (*≧m≦*) (>_<) (,,#゚Д゚) ヽ(o`皿′o)ノ o(>< )o o( ><)o AKTxtSmileyParser就是读取文件,一行一行读取出来,放入ArrayList<String> smileyList=new ArrayList<String>();中,然后mSmileyMap.put(id, smileyList.toArray(new String[smileyList.size()]));放入一个map中,因为颜表情有多类,所以把资源的id作为key,缓存到map中. public class GridAdapter extends BaseAdapter 就是一个简单的适配器. public View getView(int index, View convertView, ViewGroup parent) { GridHolder holder; if (convertView==null) { convertView=mInflater.inflate(R.layout.emoji_item, null); holder=new GridHolder(); holder.appImage=(ImageView) convertView.findViewById(R.id.itemImage); holder.textView=(TextView) convertView.findViewById(R.id.itemTxt); convertView.setTag(holder); } else { holder=(GridHolder) convertView.getTag(); } if (mode==MODE_PICTURE) { holder.appImage.setImageDrawable(context.getResources().getDrawable(AKSmiley.mSmileyMap.get(list[index]))); holder.textView.setText(null); holder.textView.setVisibility(GONE); } else { holder.appImage.setImageDrawable(null); holder.textView.setVisibility(VISIBLE); holder.textView.setText(list[index]); } final int pos=index; holder.appImage.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { onClickItem(view, pos); } }); holder.textView.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { onClickItem(view, pos); } }); return convertView; } 布局是将文字与图片合在一起了.也可以分开. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:id="@+id/itemImage" android:layout_margin="2dp" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/itemTxt" style="@style/emoji_tag_items" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> private void onClickItem(View view, int pos) { if (null==mContent) { Log.e(VIEW_LOG_TAG, "没有编辑框,无法输入表情."); return; } String txt=list[pos];//获取之前解析的内容 if (view instanceof ImageView) { refreshText(txt);//刷新输入框的文字内容 } else if (view instanceof TextView) { refreshText2(txt);//刷新输入框的图片表情内容,因为图片表情的表现形式,其它也是文字,但是是包含了特殊开始与结束的文字,所以如果想在输入一个字符后,还可以看到输入框中有图片表情,最好是重新设置 } } 到这里,差不多就结束了.可以根据自己的需要,调整表情面板的布局,比如可以添加按钮选中后的状态背景, 当然这里使用流布局也有个缺点,它是一边对齐,另一边无法对齐的. 本文也算是自定义ui的一个内容,组合原有控件制造出自定义控件. [img]http://dl2.iteye.com/upload/attachment/0087/2125/4933f022-d2c2-3d0f-8966-8b167d557765.png[/img] 由于git上的源码没有及时更新,附件上传了最新的布局.
发表评论
-
android 批量打渠道包
2014-09-16 17:27 5905打包,是一个经常会遇到的问题,写个脚本就可以解决了.不同的脚本 ... -
vlc for android录制视频与截图
2014-09-08 18:31 8031首先说明,这不算原 ... -
android百度地图转为高德地图
2014-08-11 11:09 2964使用百度地图也不少时间了,但是一直出现无法解决的问题,在官 ... -
编译 i9000的cm系统
2014-08-04 13:10 1596[color=red][b]此文 并不 ... -
mp4v2 保存h264流
2014-05-01 21:15 11827大侠已经完成了很多操作了,唯一不足的是,工程完整性差一些,而且 ... -
baidumap的缩放到看到所有点
2014-04-09 21:03 1464之前使用1.3.5版本的sdk,通过调用mapviewcont ... -
ViewPager 查看图片
2014-02-13 12:59 4525一个图片查看器 , app到处都是 , 但那是别人的. 现在的 ... -
机顶盒 页面 选中后的 动画
2013-12-05 09:39 2184前面已经说过了,对于机顶盒的焦点的处理. 相信有不少人看 ... -
引爆你的图片浏览, ListView 大图片
2013-11-05 07:58 1314之前发现,ListView里面的图片资源越占越大,特别是当 ... -
微博开放源码
2013-10-23 12:09 1035微博程序已经发布不少时间了,但一直也没有很多用户使用,主要在用 ... -
Mupdf 缩小apk包,减少字体
2013-10-20 15:53 3723在以前的apv中,字体占了很大的一部分,如果去除cjk字体 ... -
ActionBar appcompat 解决碎片化问题
2013-09-15 16:58 2178actionbarsherlock 这个在api11以下的系统 ... -
android机顶盒获取有线mac
2013-09-02 16:09 5503直接上代码: public static String ... -
android竖着的seekbar
2013-08-22 20:33 5534以前网上有位虾士发过一篇文章是关于竖着的seekbar,但是也 ... -
新浪微博oauth2.0 自动认证
2013-08-13 09:01 0oauth2.0作者认为它不先进,都放弃了.但是oauth2. ... -
flow 流布局.
2013-07-13 20:06 1306在git上看到一个FlowingViewGroup,代码有点旧 ... -
开发android机顶盒应用 事件,焦点处理
2013-07-13 19:58 19838机顶盒应用不同于手机 ... -
android 磁盘缓存.
2013-07-13 19:30 5291开发一个app,特别是图片的app,免不了要存储图片,内存缓存 ... -
TextView 文字淡入效果
2013-04-15 13:34 3498一个文本渐渐地从左到右的显示。 几步就可以了实现了。利用的是V ... -
制造垃圾短信
2013-01-28 14:25 1429往系统中插入一条短信息,然后在通知栏中通知,点击通知栏后可以在 ...
相关推荐
6. **Image Keyboard Support**:对于聊天和社交媒体应用,Android 7.1.1开始支持图像键盘,使得第三方键盘可以发送表情包和其他图像。 7. **A/B System Updates**:为了提高更新的安全性和可靠性,Android 7.1.1...
Android Logo的最早版本是一个绿色的小机器人,它以其独特的卡通形象和友好的表情赢得了全球用户的喜爱。这个机器人被称为“Droid”,它的设计灵感来源于科幻电影,象征着Android系统的开放性和未来感。随着时间的...
【Android EditTextQQDynamicSmiles源码解析】 在Android开发中,`EditText`是用于用户输入文本的基本组件。QQ动态表情(DynamicSmiles)功能则是在`EditText`基础上扩展的,它允许用户在输入文字的同时插入丰富的...
综上所述,"android edittext表情过滤"涉及字符编码、EditText的自定义过滤、正则表达式、性能优化以及兼容性处理等多个方面,开发者需要具备扎实的Android基础知识才能成功实现这一功能。在实际项目中,可以根据...
表情文字,也被称为颜文字或emoji,是通过特定字符组合或图形来表达情感或情绪的一种方式。在移动设备上,尤其是Android系统,表情文字已经广泛应用于各种应用中,为用户提供更加生动和丰富的交流体验。 二、...
在Android平台上,开发一款键盘表情应用涉及到多个技术层面,包括图像处理、自定义视图、触摸事件处理以及数据存储等。下面将详细讲解这些知识点。 1. 图像资源管理: 在表情键盘中,每一种表情都是一张图片。...
在Android平台上开发一款聊天应用,实现“高仿QQ聊天”的表情功能是一项常见的需求。QQ聊天以其丰富的表情系统闻名,能够增强用户的沟通体验,使聊天更加生动有趣。在本项目中,“android聊天表情”旨在创建一个类似...
本资源"Android EditText插入QQ表情源码.rar"提供了一种实现方式,允许用户在`EditText`中插入QQ表情,提升用户体验。 要实现这个功能,首先我们需要了解`EditText`的基本用法和属性设置,包括`android:inputType`...
本资源"Android EditText插入QQ表情源码.zip"提供了一个实现这一功能的示例代码,帮助开发者理解和实现在EditText中插入QQ表情的功能。 1. **QQ表情集成** - QQ表情通常以图片或者特殊编码(如EMOJI)的形式存在。...
本资源"安卓Android源码——EditText插入QQ表情源码.zip"提供了一种实现方法,允许用户在`EditText`中插入QQ表情,提升用户的交互体验。以下将详细解释这个功能的实现原理和关键知识点。 1. **表情库的构建**:首先...
在Android开发中,创建一个模仿微信表情雨控件的功能是一项有趣的挑战,这涉及到自定义视图、动画处理、以及对用户交互的响应。这个项目名为"EmoticonRainView-master",显然它是一个关于实现类似微信中动态下落表情...
在Android应用开发中,创建一个带有删除按钮和能插入表情的自定义控件是一个常见的需求,这能够提升用户的输入体验,特别是在社交应用或者聊天界面。本文将深入探讨如何实现这样的功能,主要涉及以下几个方面: 1. ...
在Android开发中,仿QQ表情的实现涉及到多个关键知识点,主要涵盖了UI设计、事件处理、数据存储以及自定义视图等方面。以下是对这些知识点的详细解释: 1. **UI设计**: - **GridView**:在Android中,GridView是...
【标题】"Android高级应用源码-在项目中使用Emoji表情【源代码】.zip" 涉及的核心知识点是Android应用开发中的Emoji表情集成与使用。在Android平台上,为应用添加Emoji支持可以让用户交流更加生动有趣。下面将详细...
// 添加更多表情... ``` 接下来,我们需要解析用户输入的文本,查找并替换表情字符。以下是一个简单的示例,展示了如何使用`SpannableString`进行替换: ```java public SpannableString replaceEmojis(String ...
"代码家“捡到肥皂”,“发现不对”,“肥皂滑落”的三种表情.zip"这个压缩包文件,虽然名字颇具趣味性,实际上它是一个关于Android应用开发的开源项目,具体涉及的是一个等级切换开关的实现。这个开关可以在三个...
《微信技术解析:C#与Android的P2P语音及动态表情实现》 在现代通讯技术中,即时通讯软件已经成为日常生活中不可或缺的一部分。本文将深入探讨一个基于C#的P2P聊天软件——"WeChat.zip",它不仅支持私聊和群聊功能...
在Android平台上,表情支持是一个重要的功能,特别是在社交应用和通讯工具中。"表情Android"的描述暗示了我们讨论的主题是关于如何在Android应用中实现对手机自带输入法表情的兼容。下面将详细介绍这个主题,包括...