求安卓软件[类似于微信身份]

最近在写时,有一个需求是实现像手机QQ、微信那样的表情输入键盘,效果图:
表情键盘本身并不难做,无非就是一个带SlidingTab的ViewPager,困扰我的地方在于,如何正确处理系统软键盘与表情键盘之间的显隐关系。
Google了一下,大概有这么几种思路:
第一种:动态改变SoftInputMode
是国内网上转载比较多的方法,软键盘显示时将SoftInputMode设置为「stateVisible|adjustResize」,表情键盘显示时调整为「adjustPan」。
但在我实际使用过程中效果并不理想,一是我需要在一个ListView的底部实现表情键盘,这样动态更改SoftInputMode会导致ListView上下跳动;二是切换到别的界面再切换回来时软键盘的显隐状态偶尔会有冲突,最终我放弃了这种方法。
第二种:Dialog
,这个项目的实现方法是直接在软键盘上覆盖显示一个Dialog,避开了大部分的显示逻辑操作,思路非常独特,可惜我编译运行后发现显示效果并不好,除了动画效果,最大的问题仍然是是从别的界面切换过来时,与软键盘的显示有冲突
上面提到的两个项目给了我很大的启发,我反复尝试了微信、微博、手机QQ等应用的表情键盘逻辑,发现它们切换键盘并不会导致ListView跳动,如果没有别的什么黑科技的话,基本可以断定使用的SoftInputMode就是adjustPan。()
既然是adjustPan就好说了,软键盘显示的时候不会导致ListView跳动,那么Activity的底部必然有一个跟软键盘相同高度的View被软键盘覆盖了,这个View其实就是表情输入键盘,这样点击表情按钮的时候只需要显示隐藏软键盘,背后的表情框就显示出来了。
思路有了,接下来就是梳理一下所需要的技术点:
如何检测软键盘高度(用于动态设置表情键盘的高度)?在代码中如何手动显示/隐藏软键盘?如何防止从别的界面切换过来时,软键盘状态改变了有可能导致的显示冲突?如果这三个问题解决了,需求就基本实现了。
检测软键盘的高度
直接上代码:
private int getSupportSoftInputHeight() {
Rect r = new Rect();
mActivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
int screenHeight = mContext.getWindow().getDecorView().getRootView().getHeight();
int softInputHeight = screenHeight - r.
if (Build.VERSION.SDK_INT &= 20) {
softInputHeight = softInputHeight - getSoftButtonsBarHeight();
return softInputH
这里的原理是通过当前的Activity拿到其RootView的高度,减去Activity本身实际的高度,就等于软键盘的高度了。但在实际应用过程中发现,某些Android版本下,没有显示软键盘时减出来的高度总是144,而不是零,经过反复研究,最后发现这个高度是包括了虚拟按键栏的,所以在API Level高于18时,我们需要减去底部虚拟按键栏的高度(如果有的话)。
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private int getSoftButtonsBarHeight() {
DisplayMetrics metrics = new DisplayMetrics();
mContext.getWindowManager().getDefaultDisplay().getMetrics(metrics);
int usableHeight = metrics.heightP
mContext.getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
int realHeight = metrics.heightP
if (realHeight & usableHeight) {
return realHeight - usableH
将高度设置给表情键盘就比较简单了:
LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) mEmotionLayout.getLayoutParams();
linearParams.height = getSupportSoftInputHeight();
在代码中手动显示、隐藏软键盘
也是直接上代码了,这两个方法也比较容易查到:
private void showSoftInput() {
mInputManager.showSoftInput(mEditText, 0);
private void hideSoftInput() {
mInputManager.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);
解决切换程序时的显示冲突
在默认状态(StateUnspecified)下,在程序内打开软键盘然后点击Home键或多任务键切换出去时,软键盘会收起。再次进入程序界面也不会打开,前文提到的两个项目就是在这种情况下会出现问题。如何保证软键盘和表情键盘的同步,直观反应就是监听软键盘的高度变化,查了一下,果然可以监听:
mEditText.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
public void onGlobalLayout() {
int softInputHeight = getSupportSoftInputHeight();
if (softInputHeight != lastSoftInputHeight) {
// do Something
实际测试中,这个函数在运行时会调用很多次,我们只需要在高度变化时做处理即可。
如上图,一共有三种状态,表情键盘的状态分别为:gone、invisible和visible。分别判断这三个状态之间的转化关系,然后动态的设置Visiblity即可:
public void onGlobalLayout() {
int softInputHeight = getSupportSoftInputHeight();
if (softInputHeight != lastSoftInputHeight) {
if (softInputHeight &= 0) {
lastSoftInputHeight = softInputH
if (!notHideEmojiLayout) {
mEmotionLayout.setVisibility(View.GONE);
notHideEmojiLayout =
lastSoftInputHeight = softInputH
LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) mEmotionLayout.getLayoutParams();
linearParams.height = softInputH
mEmotionLayout.setVisibility(View.INVISIBLE);
if (linearParams.height == softInputHeight) {
mEmotionLayout.setVisibility(View.INVISIBLE);
linearParams.height = softInputH
sp.edit().putInt(SHARE_PREFERENCE_TAG, softInputHeight).apply();
由于Android设备的多样性,软键盘高度不一致,所以需要动态的设置表情键盘的高度,然而程序在第一次软键盘弹出后才能检测到软键盘高度,但这时由于表情键盘高度与软键盘不一致,会导致显示有点异常。所以程序会将检测到的高度保存到SharedPreference中,在Activity加载时读出高度即可。
不过即使是这样,在整个程序第一次进入这个界面时还是会显示异常,暂时的解决办法是在其他软键盘弹出的页面检测一次软键盘高度
如果你有更好的办法,请留言交流~
本文的完整的代码在我的Github上:,支持Gradle调用,喜欢的话不妨给个Star~
本文首发,转载请注明
一步一步教你实现Emoji表情键盘
Android开发技巧之像QQ一样输入文字和表情图像
android高仿微信表情输入与键盘输入(详细实现分析)
Android: 实现表情输入键盘的另外一种思路
android键盘表情流畅切换实现
Android监听软键盘的弹起和隐藏
仿微信表情输入键盘(支持 Gif 表情图文混排 )
android高仿微信表情输入与键盘输入详解-解决跳闪与表情切换问题
Android开发之浅仿QQ聊天UI和键盘控制
没有更多推荐了,微信6.2.2 微信6.2.2安卓版下载 安卓软件下载
扫描二维码下载
微信6.2.2安卓版下载介绍
《微信6.2.2》增加了右上角加号中,可以通过展示二维码来收钱,还有全新的朋友圈自动翻译功能。
微信6.2.2功能:
1、右上角加号中,可以通过展示二维码来收钱
2、拍好的小视频可以先保存下来,稍后再分享
3、多条聊天记录可以合并为一条消息转发
4、支持计步的手机,关注“微信运动”公众号,和好友PK运动成就
5、可以设置微信字体大小
推荐安卓应用
3533手机世界
Copyright & .com, All Rights Reserved安卓手机导出微信语音的方法
互联网 & 发布时间: 15:31:27 & 作者:佚名 &
有时候会用微信谈生意,都是语音联系的,我想倒出来存起来,万一以后用的到呢?下面分享安卓手机里的微信语音导出的方法,需要的朋友可以参考下
微信语音聊天常用于日常通讯中,有时候可能会想收藏或者保存某些语音,下面介绍一个简单的方法来达到这个目的
1、在手机上安装微信语音导出软件
软件名称:微信记录导出助手安卓版 V 绿色版软件大小:13.2MB更新时间:
2、打开软件,所有微信语音聊天记录会显示出来,完全类似于微信一样
3、预览播放,选择需要导出的语音记录,可以选择多个,然后点右下角的按钮,选择确定
4、导出的语音保存到了/sdcard/WXVExporter目录,可以在音乐播放器中播放,或者导入到电脑中
5、导出的语音文件可以删除
大家感兴趣的内容
12345678910
最近更新的内容您的位置: >
KakaoTalk v5.5.5 安卓中文版下载
KakaoTalk v5.5.5 安卓中文版
运行环境:Android平台
更新时间: 16:54:24
论坛转帖:
有无插件:无插件,请您放心使用!
分&享&到:
KakaoTalk for android 是一款类似于&&的手机软件,它基于电话号码的短信信使服务,使用KakaoTalk,可以与世界各地的iPhone和Android一对一联天,以及群聊。&
KakaoTalk 是基于网络的联系软件,方式跟手机短信相似,但非短信形式,基于网络,账号就是你的手机号码,使用时输入正确的手机号码,然后会接收到KakaoTalk发给你的短信,输入四位数字验证码即成功注册,与所有此类软件一样拥有共同缺点,对方也得使用KakaoTalk。
来消息即时push通知,发送图片,视频等各种多媒体 表情支持(iOS & Android) 自定义提醒声音 语音记事功能
日前,KakaoTalk 推出了电脑版,这里下载:
点击链接开始下载后使用快捷导航没有帐号?
只需一步,快速开始
查看: 12219|回复: 5
在线时间0 小时G币0 最后登录注册时间帖子阅读权限20UID
小学生, 积分 31, 距离下一级还需 19 积分
TA的每日心情开心 10:18签到天数: 1 天[LV.1]初来乍到
G币0 最后登录注册时间
马上注册,结交更多机友,下载更多应用,让你轻松玩转手机。
已有帐号?   下载游戏和软件,请【】进入机锋市场!
之前微信中的视频下载后,需要用第三方软件打开,这时系统会让我选择仅一次或者总是,我通常选择仅一次。下次还会询问我,今天选择了总是用youku播放,现在我想换回暴风影音,如何操作。知道的大神请告知下,感激不尽
在线时间24 小时G币1908 最后登录注册时间帖子阅读权限60UID
大学本科, 积分 622, 距离下一级还需 78 积分
TA的每日心情开心 10:32签到天数: 257 天[LV.8]以坛为家I
G币1908 最后登录注册时间
手机的设定--默认应用程序 在这里面把你要改的消除掉就可以了
在线时间0 小时G币0 最后登录注册时间帖子阅读权限1UID
头像被屏蔽
该用户从未签到
G币0 最后登录注册时间
提示: 作者被禁止或删除 内容自动屏蔽
在线时间0 小时G币0 最后登录注册时间帖子阅读权限20UID
小学生, 积分 31, 距离下一级还需 19 积分
TA的每日心情开心 10:18签到天数: 1 天[LV.1]初来乍到
G币0 最后登录注册时间
cm1238292 发表于
手机的设定--默认应用程序 在这里面把你要改的消除掉就可以了
主要是默认应该程序中没有微信和任何播放器可选,这个用第三方软件打开的貌似和其他默认程序设置不同。
在线时间0 小时G币0 最后登录注册时间帖子阅读权限20UID
小学生, 积分 31, 距离下一级还需 19 积分
TA的每日心情开心 10:18签到天数: 1 天[LV.1]初来乍到
G币0 最后登录注册时间
cm1238292 发表于
手机的设定--默认应用程序 在这里面把你要改的消除掉就可以了
主要是默认应该程序中没有微信和任何播放器可选,这个用第三方软件打开的貌似和其他默认程序设置不同。
在线时间115 小时G币18 最后登录注册时间帖子阅读权限60UID1510705
大学本科, 积分 494, 距离下一级还需 206 积分
TA的每日心情难过 21:07签到天数: 12 天[LV.3]偶尔看看II
G币18 最后登录注册时间
楼上说的不够详细,所以你没明白,你选择了默认某个播放器,那你进设置——应用程序里找到该播放器,然后最下面有清楚数据,清楚缓存,清楚默认设置。如果该程序是指定为默认程序,那清楚默认设置的选项就会高亮,否则为灰色不可操作!
Powered by}

我要回帖

更多关于 安卓模拟器微信下载 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信