用于做什么
在开发聊天页面时,开发者希望用户在输入法与功能面板(比如表情面板/更多选项面板等)切换过程中保持平滑过渡不闪烁。 参考了市场上主流的社交app效果及实现,综合互联网上的多种实现思路,最总整合成一个模版框架,该模版框架已经过测试使用。
效果展示
实现方法
通过监听 Window 窗口变化来获取输入法高度并动态调整布局来达到平滑过渡切换面板。
涉及的核心类有:
- PanelSwitchLayout ,即黄色区域 ,仅能包含 PanelContainer 和 PanelSwitchLayout 并实现一些辅助性功能。
- ContentContainer ,即蓝色区域 ,用于存放显示内容 ,比如列表内容等 。 并存放可触发切换的布局,比如输入框表情按钮等 。
- PanelContainer , 即绿色区域 , 仅用于存放可切换的面板 (PanelView),开发者自主定制 PanelView 面板。
以 activity_sample_layout.xml 为例子
1 | "1.0" encoding="utf-8" xml version= |
如何引用
在对应模块下
build.gradle
添加依赖。1
implementation 'com.effective.android:panelSwitchHelper:1.0.0'
在 activity#onStart 方法中初始化 PanelSwitchHelper 对象,在 activity#onBackPressed hook 返回键 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21private PanelSwitchHelper mHelper;
protected void onStart() {
super.onStart();
if (mHelper == null) {
mHelper = new PanelSwitchHelper.Builder(this)
.bindPanelSwitchLayout(R.id.panel_switch_layout) //绑定PanelSwitchLayout 对象
.bindPanelContainerId(R.id.panel_container) //绑定ContentContainer 对象
.bindContentContainerId(R.id.content_view) //绑定PanelContainer 对象
.build();
}
}
public void onBackPressed() {
if (mHelper != null && mHelper.hookSystemBackForHindPanel()) {
return;
}
super.onBackPressed();
}
期望
编写该项目只是希望能提高日常开发的效率,专注于处理业务 。如果更好的做法或者意见建议,欢迎写信到 yummyl.lau@gmail.com 。