Keyboard placement obscures view below EditText would like to keep visible
我的活动基本上是一个很长的输入字段。
在每一行上,我想在每个EditText下面显示一个TextView作为提示文本,我希望TextView在用户输入数据时始终保持可见。 不幸的是,软键盘模糊了提示文本,并始终将自己定位在EditText的正下方。 当软键盘出现并且内容被调整(通过windowSoftInputMode = adjustResize | adjustPan)而没有用户滚动时,是否有任何技术可以使EditText下面的TextView可见?
Vishavjeet让我走上正轨,建议我滚动显示可能与键盘重叠的视图。 下面是一个类似于我用来解决问题的功能。 当TextView上方的EditText获得焦点时,可以调用它:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // View targetView; // View that may be hidden by keyboard // ScrollView scrollContainerView; // Scrollview containing hiddenView // void assureViewVisible (View targetView, ScrollView, scrollContainerView) { Window rootWindow = activity.getWindow(); Rect rMyView = new Rect(); View rootview = rootWindow.getDecorView(); rootview.getWindowVisibleDisplayFrame(rMyView); // Area not taken up by keyboard int subTextPos[] = new int[2]; targetView.getLocationInWindow(subTextPos); // Get position of targetView int subTextHt = targetView.getHeight(); // Get bottom of target view if ((subTextPos[1]+subTextHt) > rMyView.bottom) { // Is targetView at all obscured? int scrollBy = (subTextPos[1]+subTextHt) - rMyView.bottom + 10; // add a small bottom margin mMeasurementViewScrollView.smoothScrollBy(0, scrollBy); // Scroll to subtext } } |
编辑:
通过更深入地理解问题,我认为您应该在用户单击Edittext时以编程方式添加滚动。 这是执行此操作的代码:
1 2 3 4 5 6 7 8 9 10 | private final void focusOnView() { new Handler().post(new Runnable() { @Override public void run() { your_scrollview.scrollTo(0, your_EditBox.getBottom()); }}); } |
根据我的个人经验,我认为没有这样做的方法。 你可以做的是将提示textview放到右边的editext。 或者在Edittext上使用提示占位符来使用现代方法:
在XML中,它只是
以编程方式,您可以使用
在上面的方法中传递R.string.somestring。