软键盘隐藏了EditText的一半

我有一个listview,最后一个列表项包含EditText:

     

EditText的一半被隐藏。 我也无法滚动listview。 有解决方案吗

图片

解决方法是在Manifest中设置一个android:softInputMode属性到adjustResize ,并将布局(不是列表项布局)放在ScrollView中。

我有一个类似的问题,然后我使用android:windowSoftInputMode="adjustResize|stateHidden"如这里提到的..它对我来说非常好..

从我作为Android开发人员的早期开始,我一直在努力使用虚拟键盘。 我很惊讶Android仍然没有为此提供优雅而明确的解决方案。

所以这里的解决方法将把这个烂摊子放在身后。 它将在没有ScrollView变通方法或赠送全屏标志的情况下工作。

  1. 将这个真棒库添加到您的gradle文件中:

compile’net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:1.0.1′

  1. 确保您的活动具有以下键盘设置:

机器人:windowSoftInputMode = “adjustResize”

  1. 使用垂直LinearLayout包装EditText并添加具有Gone可见性的视图:

        
  2. 计算屏幕大小,以便计算推送EditText的视图的高度:

     private void storeScreenHeightForKeyboardHeightCalculations() { Rect r = new Rect(); View rootview = getActivity().getWindow().getDecorView(); rootview.getWindowVisibleDisplayFrame(r); mOriginalScreenHeight = r.height(); Rect rectangle = new Rect(); Window window = getActivity().getWindow(); window.getDecorView().getWindowVisibleDisplayFrame(rectangle); int statusBarHeight = rectangle.top; int contentViewTop = window.findViewById(Window.ID_ANDROID_CONTENT).getTop(); int titleBarHeight= contentViewTop - statusBarHeight; if (titleBarHeight == 0) { mOriginalScreenHeight -= (24 * Utils.getDensity(getContext())); } } 
    1. 为键盘打开和关闭事件添加一个监听器,然后在运行时设置EditText下面的View的高度,这样我们就可以在任何设备和自定义键盘上正确设置高度。 然后只需在键盘打开时使其可见:
 private void addkeyBoardlistener() { KeyboardVisibilityEvent.setEventListener( getActivity(), new KeyboardVisibilityEventListener() { @Override public void onVisibilityChanged(boolean isOpen) { if (isOpen) { Rect r = new Rect(); View rootview = getActivity().getWindow().getDecorView(); // this = activity rootview.getWindowVisibleDisplayFrame(r); int keyboardHeight = (mOriginalScreenHeight - r.height()); LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) keyboard_view.getLayoutParams(); params.height = (int) ((keyboardHeight + 5 * Utils.getDensity(getContext()))); keyboard_view.setLayoutParams(params); keyboard_view.setVisibility(View.VISIBLE); } else { keyboard_view.setVisibility(View.GONE); } } }); } 

这是结果:

结果:

在窗口启动时禁用键盘

 this .getWindow().setSoftInputMode(WindowManager.LayoutParams. SOFT_INPUT_STATE_ALWAYS_HIDDEN ); 

在Manifest中为您的Activity元素设置android:softInputMode属性。

有关有效值及其效果的完整列表,请参阅Manifest文档 。 您特别感兴趣的可能是adjustPanadjustResize