问题
下面是我的一段加载视图的逻辑,这个页面中的输入框获取焦点并弹出虚拟键盘之后,再关掉虚拟键盘,动态添加的view高度貌似会变,导致页面被虚拟键盘遮挡(或者说被折叠,被键盘覆盖)的一部分会变成背景色。
val inflater: LayoutInflater = getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater view = inflater.inflate(R.layout.paipai_apply_layout, null, false) val layoutParams: ViewGroup.LayoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
view.layoutParams = layoutParams binding.showView.removeAllViews() binding.showView.addView(view)
|
解决方案:
android:windowSoftInputMode="adjustPan"
|
2. 手动触发父布局的重新布局
若是需要设置adjustResize,可以使用下面的方法
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus) { binding.showView.requestLayout(); } } });
|
3. 使用CoordinatorLayout
如果你使用的是 CoordinatorLayout,它本身就有一套复杂的行为来处理这种布局变化。如果你将输入框放在 CoordinatorLayout 中,并正确设置了 Behavior,它可能会更好地处理键盘弹出和收起的情况。