Android 监控软件盘的关闭(更好的优化IM 消息展示)
2019-09-29 14:25
12 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014714188/article/details/101690064
Android 监控软件盘的关闭(更好的优化IM 消息展示)
由于本人在写IM聊天案例中,在聊天界面利用RecyclerView展示消息item。为了更好的展示消息item在软件盘的打开与关闭的移动,需要对软件盘进行监听。
首先,自定义EditTextView
package cn.xie.imchat.view; import android.content.Context; import android.util.AttributeSet; import android.view.KeyEvent; import android.widget.EditText; /** * 拦截键盘向下的 EditTextView * * @author xiejinbo * @date 2019/9/29 0029 13:44 */ public class MyEditTextView extends EditText { public MyEditTextView(Context context) { super(context); } public MyEditTextView(Context context, AttributeSet attrs) { super(context, attrs); } public MyEditTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public boolean onKeyPreIme(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == 1) { super.onKeyPreIme(keyCode, event); onKeyBoardHideListener.onKeyHide(keyCode, event); return false; } return super.onKeyPreIme(keyCode, event); } /** * 键盘监听接口 */ OnKeyBoardHideListener onKeyBoardHideListener; public void setOnKeyBoardHideListener(OnKeyBoardHideListener onKeyBoardHideListener) { this.onKeyBoardHideListener = onKeyBoardHideListener; } public interface OnKeyBoardHideListener { void onKeyHide(int keyCode, KeyEvent event); } }
布局实现
<cn.xie.imchat.view.MyEditTextView android:layout_toRightOf="@+id/input_voice" android:layout_toLeftOf="@+id/input_emotion" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:paddingLeft="5dp" android:id="@+id/input_text" android:layout_width="match_parent" android:layout_height="40dp" android:background="@drawable/round_input_bg" android:gravity="center_vertical" android:inputType="textNoSuggestions"/>
实际调用
//软件盘监听 inputText.setOnKeyBoardHideListener(new MyEditTextView.OnKeyBoardHideListener() { @Override public void onKeyHide(int keyCode, KeyEvent event) { //是否铺满屏幕监听 recyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { //铺满屏幕时 if (manager.findLastCompletelyVisibleItemPosition() < adapter.getItemCount() - 1) { manager.setStackFromEnd(true); recyclerView.setLayoutManager(manager); recyclerView.getViewTreeObserver().removeGlobalOnLayoutListener(this); } else { //未铺满时 manager.setStackFromEnd(false); recyclerView.setLayoutManager(manager); } } }); //滚动到最底部 if (chatMessageList.size() > 0) { recyclerView.smoothScrollToPosition(chatMessageList.size() - 1); } } });
相关文章推荐
- android 代码优化:关闭输出日志
- Android基于XMPP Smack Openfire下学习开发IM(四)单人聊天和多人聊天(发送消息、接收消息)
- 监控软件之 阻止系统屏保 阻止系统关闭显示器 阻止系统待机
- 启动一个服务监控android系统的打印日志--实现卸载软件提示
- fir.im Weekly - 如何进行 Android App 性能优化
- Android基于XMPP Smack Openfire下学习开发IM(四)单人聊天和多人聊天(发送消息、接收消息)
- Android电量监控与优化
- Android录制或播放语音消息时关闭其他媒体播放
- android 打开和关闭软件盘
- 微信团队原创分享:Android内存泄漏监控和优化技巧总结
- Android串口通讯,在线程里一直监听是否有消息发来,接收到消息到runOnUiThread处理跳转页面,页面跳转关闭之后,在发送消息尽然还会执行在打开页面?
- Android IM(四)单人聊天和多人聊天(发送消息、接收消息)
- Android应用之个人应用软件开发【全套程序展示及APK下载】
- 【XDA汉化组编写】Android软件汉化/精简/去广告/优化教程 & FAQ
- Android基于XMPP Smack Openfire下学习开发IM(四)单人聊天和多人聊天(发送消息、接收消息)
- [置顶]Android中Listview展示及其优化好处
- PC端使用adb启动和关闭Android机顶盒上的软件。
- android 消息提示框点击“确定”按钮后,不能及时关闭提示框的解决方案
- Android 软件行为监控系统 的原理 主要是利用binder机制原理添加一个filter
- Android基于XMPP Smack Openfire下学习开发IM(四)单人聊天和多人聊天(发送消息、接收消息)