AwareKeyboard UIKit 提供了在安卓开发中使用输入面板场景下的UI组件支持,通过简单的集成实现对软键盘输入面板的管理
- 支持Android 5 - Android 12
- 提供Widget、Dialog场景下的基础UI组件
- 提供对软键盘状态、高度检测的监听器
- 在Android Studio工程的项目的 build.gradle 文件中添加 MavenCentral() 仓库
allprojects {
repositories {
mavenCentral()
}
}
- 在需要使用的子项目的 build.gradle 中添加依赖声明
dependencies {
implementation("io.github.shinyshine90:keyboard-aware-layout:latest.release")
}
AwareKeyboard UIKit 提供了两类使用场景的实现:
- 输入面板常驻于用户界面中,类似于Telegram、微信的聊天页的输入场景。
- 输入面板不常驻于用户界面,类似于抖音直播、B站评论区的输入场景,输入组件不在Activity的Window中。
通过继承KeyboardAwareLayout
声明用户界面,设计思路有点像声明式UI范式,简单使用如下,详细使用可参考Demo工程中的ChatDemoActivity
中contentView
的实现方式。
class XxxLayout constructor(context: Context, attrs: AttributeSet?) :
KeyboardAwareLayout(context, attrs) {
override fun createContentUi(): View {
return ContentUi(context)
}
override fun createKeyboardBottomUi(): KeyboardBottomUi {
return KeyboardBottomUi(
bottomBar = BottomBarUi(context),
bottomPanelBackgroundColor = Color.WHITE,
bottomPanelRegistrations = ArrayMap<Int, PanelUi>().apply {
this[R.id.xxxx] = createExactlyHeightPanel(PanelUi1(context), 500)
this[R.id.xxxx] = createAdjustKeyboardPanel(PanelUi2(context))
}
)
}
}
下图展示KeyboardAwareLayout基本工作原理
KeyboardAwareLayout继承了LinearLayout 并指定了布局方向为垂直布局。
createContentUi()方法指定返回主内容区域,初始化时被添加至LinearLayout,高度指定为填充剩余空间;
createKeyboardBottomUi()方法指定了下面板区域,由BottomBarUi 及 一些列PanelUi构成,其中 bottomPanelRegistrations属性用来关联BottomBarUi中子元素点击事件同PanelUi的联动关系。
详细使用可参考Demo工程中的DemoKeyboardDialog
class TestDialog(activity: Activity) : KeyboardDialog(activity) {
override fun createKeyboardAwareLayout(context: Context): KeyboardAwareLayout {
return object : KeyboardAwareLayout(context) {
override fun createContentUi(): View {
TODO("Not yet implemented")
}
override fun createKeyboardBottomUi(): KeyboardBottomUi {
TODO("Not yet implemented")
}
}
}
}