-
设置 acitivty 的 windowSoftInputMode 为 adjustResize|stateHidden
-
不要设置 activity 全屏否则设置啥模式都白扯nnd,就👇这货
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
-
如果界面设置 background 无论是给根view设置还是单独一个view设置, 键盘弹起背景会挤压闪一下并上移. 目前解决办法在代码中设置:
getWindow().getDecorView().setBackgroundResource(R.drawable.xx)
-
键盘弹起点击其他区域键盘不消失问题
override fun onTouchEvent(event: MotionEvent?): Boolean {
if (event?.getAction() == MotionEvent.ACTION_DOWN) {
if (getCurrentFocus() != null && getCurrentFocus().getWindowToken() != null) {
DeviceUtils.hideKeyboard(this) //隐藏键盘的代码
}
}
return super.onTouchEvent(event)
}
- 键盘弹起指定view在键盘上面 kotlin code 如:要弹起的view为 EdtiText mEtContent;
rootView!!.getViewTreeObserver().addOnGlobalLayoutListener {
val rect = Rect()
rootView?.getWindowVisibleDisplayFrame(rect)
val rootInvisibleHeight = ViewUtils.getDeviceHeight() - rect.bottom
if (rootInvisibleHeight > 300) {
val location = IntArray(2)
mEtContent?.getLocationOnScreen(location)
val y = location[1]
showContentEdit(y - rect.bottom + mEtContent!!.getHeight())
} else {
hideContentEdit()
}
}
private fun showContentEdit(keyboardheight: Int) {
mEtContent?.visibility = View.VISIBLE
val set = AnimatorSet()
val play = set.play(ObjectAnimator.ofFloat(mEtContent, "translationY", 0f, -keyboardheight.toFloat()))
set.duration = 200
set.addListener(object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator) {
mEtContent?.requestFocus()
}
})
set.start()
}
private fun hideContentEdit() {
if (isAnimRun) {
return
}
isAnimRun = true
val set = AnimatorSet()
val play = set.play(ObjectAnimator.ofFloat(mEtContent, "translationY", mEtContent!!.getTranslationY().toFloat(), 0f))
set.duration = 200
set.addListener(object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator) {
isAnimRun = false
}
})
set.start()
}
public static int getDeviceHeight() {
if (deviceHeight == 0) {
WindowManager wm = (WindowManager) PresentationApp.inst().getApp().getSystemService(Context.WINDOW_SERVICE);
Display d = wm.getDefaultDisplay();
DisplayMetrics realDisplayMetrics = new DisplayMetrics();
d.getRealMetrics(realDisplayMetrics);
deviceHeight = realDisplayMetrics.heightPixels;
}
return deviceHeight;
}