软键盘弹出时如何将布局上移?

181

我在一个RelativeLayout中有几个设置了align bottom属性的元素,当软键盘弹出时,这些元素被软键盘遮盖了。

我希望它们能够往上移,以便在屏幕空间足够的情况下显示在键盘上方,或者使键盘上方的区域可滚动,用户仍然可以看到这些元素。

有关于如何解决这个问题的任何想法吗?


Android开发者博客更新参考。 - Jayabal
@Dinedal,你如何将相对布局的底部对齐属性设置为底部对齐? - KJEjava48
我发布了一个简单的解决方案,不需要向清单添加任何内容。只需一个简单的布局,Android 就会处理其余的事情。请参见 https://dev59.com/aWUp5IYBdhLWcg3wXGsZ#67798240。 - Jeffrey
24个回答

0

好的,虽然有点晚了,但我发现如果在编辑文本下面添加一个列表视图,那么键盘将移动该编辑文本下面的所有布局而不会移动列表视图。

<EditText
android:id="@+id/et"
android:layout_height="match_parent"
android:layout_width="match_parent"



/>

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"//can make as 1dp
    android:layout_below="@+id/et" // set to below editext
    android:id="@+id/view"
    >
**<any layout**

这是唯一对我有效的解决方案。


0
没有一个建议解决了我的问题。调整Pan几乎就像是工作中的调整Resize。如果我设置不进行任何调整,那么布局不会向上移动,但它会隐藏我当前正在编写的底部EditText。因此,在连续搜索了24小时之后,我找到了this source,并解决了我的问题。

0
可能有点晚了,但我想补充一些内容。 在Android Studio版本4.0.1和Gradle版本6.1.1中,如果您在Activity中添加以下标志,则windowSoftInputMode将无法按预期工作:
getWindow().setFlags(
                WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
        );

经过浪费了很多时间,我终于找到了这个技巧。为了让adjustResizeAdjustPan或任何windowSoftInputMode属性正常工作,你需要从你的活动中删除它。

你有没有办法让它正常工作,同时也保持旗帜的激活状态? - undefined

0
在我的情况下,我希望屏幕内容只在一个片段中被软键盘推上去,而不是在所有活动片段中都推上去。
所以我放弃了窗口参数的解决方案。
我的解决方案是,
  1. 将要推上去的内容包裹在Scrollview中。

  2. 在片段的onResume()方法中添加以下代码:

    val imm = activity?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    
     // 监听键盘弹出和收起事件..
     requireView().viewTreeObserver.addOnGlobalLayoutListener {
         // 检查ScrollView是否滚动到底部
         val isScrolledToBottom =
             binding.scrollView.scrollY >= binding.scrollView.getChildAt(0).height - binding.scrollView.height
    
         if (imm.isActive && !isScrolledToBottom) {
             binding.scrollView.smoothScrollTo(
                 0,
                 binding.scrollView.bottom
             )
         }
     }
    
这将在键盘显示时向上滚动内容,非常类似于Activity的window_adjust_pan标志。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接