我想在软键盘激活时调整/重新调整布局大小,如下所示:
之前和之后:
在SO中找到了几个资源:
如何在显示软键盘时保持所有字段和文本可见
android软键盘出现时会破坏布局
软键盘打开时调整布局
但问题和答案相当模糊,这里的问题是我想要的更清晰的画面.
要求:
它应该适用于任何屏幕尺寸的手机.
注意到"FACEBOOK"和"注册Facebook"的保证金/填充空间在之前和之后都发生了变化.
不涉及滚动视图.
Venkatesh S.. 183
只需添加
android:windowSoftInputMode="adjustResize"
在AndroidManifest.xml中,您声明此特定活动,这将调整布局调整大小选项.
下面的一些源代码用于布局设计
朋友似乎只有带有"注册Facebook"的TextView在软键盘激活时自行调整,其他人保持不变.我希望其他人也能进行调整.任何解决方法?在激活键盘之前,整个布局应位于中心位置, (7认同)
+1这简单吗?任何额外的条件?你发布的图片是什么? (2认同)
朋友只是为了显示alignparentbottom ="true"如果屏幕没有正确调整..因此我放置了那个图像朋友 (2认同)
k朋友,谢谢大家,希望我们能再见面 (2认同)
Yani2000.. 34
几年前问了这个问题,"秘密Andro Geni"有一个很好的基础解释,"tir38"也对完整的解决方案做了很好的尝试,但是这里没有完整的解决方案.我花了几个小时搞清楚事情,这是我的完整解决方案,底部有详细解释:
在AndroidManifest.xml中,不要忘记设置:
android:windowSoftInputMode="adjustResize"
在
标签上你想要这样的布局.
思考:
我已经意识到这RelativeLayout
是通过所有可用空间的布局,然后在键盘弹出时调整大小.
并且LinearLayout
在调整大小过程中不会调整大小的布局.
这就是为什么你需要RelativeLayout
在ScrollView
通过所有可用屏幕空间后立即获得1 .并且你需要有一个LinearLayout
内部的RelativeLayout
其他内容,你的内部将在调整大小时被压碎.好的例子是"headerLayout".如果没有LinearLayout
内部RelativeLayout
"facebook"文本会被粉碎而且不会显示.
在问题中发布的"facebook"登录图片中我也注意到整个登录部分(mainLayout)相对于整个屏幕是垂直居中的,因此属性:
android:layout_centerVertical="true"
在LinearLayout
布局上.并且因为mainLayout在内部,LinearLayout
这意味着该部分不会被调整大小(再次看到相关图片).
只需添加
android:windowSoftInputMode="adjustResize"
在AndroidManifest.xml中,您声明此特定活动,这将调整布局调整大小选项.
下面的一些源代码用于布局设计
几年前问了这个问题,"秘密Andro Geni"有一个很好的基础解释,"tir38"也对完整的解决方案做了很好的尝试,但是这里没有完整的解决方案.我花了几个小时搞清楚事情,这是我的完整解决方案,底部有详细解释:
在AndroidManifest.xml中,不要忘记设置:
android:windowSoftInputMode="adjustResize"
在
标签上你想要这样的布局.
思考:
我已经意识到这RelativeLayout
是通过所有可用空间的布局,然后在键盘弹出时调整大小.
并且LinearLayout
在调整大小过程中不会调整大小的布局.
这就是为什么你需要RelativeLayout
在ScrollView
通过所有可用屏幕空间后立即获得1 .并且你需要有一个LinearLayout
内部的RelativeLayout
其他内容,你的内部将在调整大小时被压碎.好的例子是"headerLayout".如果没有LinearLayout
内部RelativeLayout
"facebook"文本会被粉碎而且不会显示.
在问题中发布的"facebook"登录图片中我也注意到整个登录部分(mainLayout)相对于整个屏幕是垂直居中的,因此属性:
android:layout_centerVertical="true"
在LinearLayout
布局上.并且因为mainLayout在内部,LinearLayout
这意味着该部分不会被调整大小(再次看到相关图片).
在您的Manifest中添加此行,您的Activity将被调用
android:windowSoftInputMode="adjustPan|adjustResize"
要么
你可以添加这一行 onCreate
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
Android Developer有正确的答案,但提供的源代码非常冗长,并没有实际实现图中描述的模式.
这是一个更好的模板:
由您自己决定用于"滚动"和"页脚"部分的视图.也知道你可能要设置ScrollView
s
fillViewPort.
它可以适用于所有类型的布局.
将其添加到AndroidManifest.xml中的activity标记中
机器人:windowSoftInputMode = "adjustResize"
例如:
将它添加到activitypage.xml中的布局标记上,该标记将更改其位置.
机器人:fitsSystemWindows = "真"
和
机器人:layout_alignParentBottom = "真"
例如:
这样就可以显示键盘先前隐藏的任何所需布局。
将此添加到AndroidManifest.xml中的活动标签中
android:windowSoftInputMode =“ adjustResize”
用ScrollView包围您的根视图,最好用scrollbars = none包围。ScrollView不会正确更改布局,除非用于解决此问题。
然后在要使其完全显示在键盘上方的视图上设置fitsSystemWindows =“ true”。这将使您的EditText在键盘上方可见,并使向下滚动到EditText下方但在带有fitsSystemWindows =“ true”的视图中的部分成为可能。
android:fitsSystemWindows =“ true”
例如:
...
如果要在出现键盘时在键盘上方显示fitsSystemWindows =“ true”视图的整个部分,则需要一些代码才能将视图滚动到底部:
// Code is in Kotlin setupKeyboardListener(scrollView) // call in OnCreate or similar private fun setupKeyboardListener(view: View) { view.viewTreeObserver.addOnGlobalLayoutListener { val r = Rect() view.getWindowVisibleDisplayFrame(r) if (Math.abs(view.rootView.height - (r.bottom - r.top)) > 100) { // if more than 100 pixels, its probably a keyboard... onKeyboardShow() } } } private fun onKeyboardShow() { scrollView.scrollToBottomWithoutFocusChange() } fun ScrollView.scrollToBottomWithoutFocusChange() { // Kotlin extension to scrollView val lastChild = getChildAt(childCount - 1) val bottom = lastChild.bottom + paddingBottom val delta = bottom - (scrollY + height) smoothScrollBy(0, delta) }
完整版式示例: