当软键盘激活时,我想调整/重新调整布局大小,如下所示:
Before and After:
在SO中找到了几个资源:
但问题和答案相当模糊,这里的问题是我想要的更清晰的画面 .
Requirements:
-
它应该适用于任何屏幕尺寸的手机 .
-
注意到"FACEBOOK"和"Sign Up for Facebook"处的边距/填充空间在之前和之后发生了变化 .
-
不涉及滚动视图 .
当软键盘激活时,我想调整/重新调整布局大小,如下所示:
Before and After:
在SO中找到了几个资源:
但问题和答案相当模糊,这里的问题是我想要的更清晰的画面 .
Requirements:
它应该适用于任何屏幕尺寸的手机 .
注意到"FACEBOOK"和"Sign Up for Facebook"处的边距/填充空间在之前和之后发生了变化 .
不涉及滚动视图 .
11 回答
只需添加
在AndroidManifest.xml中,您声明此特定活动,这将调整布局调整大小选项 .
下面的一些源代码用于布局设计
这个问题已经在几年前被问过了,“秘密Andro Geni”有一个很好的基础解释,“tir38”也对完整的解决方案做了很好的尝试,但是这里没有完整的解决方案 . 我花了几个小时搞清楚事情,这是我的完整解决方案,底部有详细解释:
在 AndroidManifest.xml 中,不要忘记设置:
在
<activity>
标签上,您想要这样的布局 .Thoughts:
我已经意识到
RelativeLayout
是跨越所有可用空间的布局,然后在键盘弹出时调整大小 .并且
LinearLayout
是在调整大小过程中未调整大小的布局 .这就是为什么你需要在
ScrollView
之后立即拥有1RelativeLayout
来跨越所有可用的屏幕空间 . 并且你需要在RelativeLayout
内部LinearLayout
否则你的内部会在调整大小时被压碎 . 好的例子是"headerLayout" . 如果内部没有LinearLayout
,那么RelativeLayout
"facebook"文本会被粉碎而不会显示 .在问题中发布的“facebook”登录图片中,我还注意到整个登录部分(mainLayout)相对于整个屏幕是垂直居中的,因此属性:
在
LinearLayout
布局上 . 因为mainLayout位于LinearLayout
内,这意味着该部分不会调整大小(再次查看相关图片) .在您的Manifest中添加此行,您的Activity将被调用
要么
你可以在
onCreate
中添加这一行Android Developer有正确的答案,但提供的源代码非常冗长,并没有实际实现图中描述的模式 .
这是一个更好的模板:
由您来决定用于"scrolling"和"footer"部分的视图 . 也知道你可能要设置
ScrollView
s fillViewPort .这使得可以显示以前由键盘隐藏的任何想要的布局 .
将其添加到AndroidManifest.xml中的activity标记中
使用ScrollView环绕根视图,最好使用scrollbars = none . 除了用于解决此问题之外,ScrollView将不会更改您的布局 .
然后在要在键盘上方完全显示的视图上设置fitsSystemWindows =“true” . 这将使您的EditText在键盘上方可见,并且可以向下滚动到EditText下面的部分,但在视图中使用fitsSystemWindows =“true” .
例如:
如果要在键盘出现的那一刻显示键盘上方的完整部分fitsSystemWindows =“true”视图,则需要一些代码将视图滚动到底部:
完整布局示例:
It can work for all kind of layout.
例如:
和
例如:
在我的情况下它有所帮助 .
main_layout.xml
在
manifest
文件中使用此选项现在最重要的部分!在
Activity
或Application
标记中使用这样的主题 .主题就是这样的
所以我错过了这个主题 . 这让我整天感到沮丧 .
您只需在AndroidManifest.xml文件中设置这些选项即可 .
建议不要使用
adjustPan
,因为用户可能需要关闭键盘才能看到所有输入字段 .更多信息:Android App Manifest
对我来说,它适用于这行代码:
只需将其放入onCreate方法即可 . 最好!
很多答案都是对的 . 在
AndroidManifest
我写道:在我的情况下,我在
styles.xml
中添加了一个主题,但您可以使用自己的主题:我注意到如果我使用全屏主题,则不会发生调整大小:
在我的情况下
adjustResize
工作,但adjustPan
没有 .对于 full-screen layouts ,请参阅Android How to adjust layout in Full Screen Mode when softkeyboard is visible或https://gist.github.com/grennis/2e3cd5f7a9238c59861015ce0a7c5584中的变通方法 .
也是https://medium.com/@sandeeptengale/problem-solved-3-android-full-screen-view-translucent-scrollview-adjustresize-keyboard-b0547c7ced32的作品,但是它的StatusBar是透明的,因此可以看到电池,时钟,Wi-Fi图标 .
如果使用“文件”>“新建”>“活动”>“全屏活动”创建活动,则使用代码中的位置:
你也不会取得成果 . 您可以在根容器中使用
android:fitsSystemWindows="true"
,但会显示StatusBar . 因此,请使用第一个链接中的变通方法 .我使用这个扩展类框架当我需要重新计算高度大小onLayout时,我覆盖onmeasure并使用getKeyboardHeight()减去keyboardHeight
我的创建框架需要使用软键盘调整大小
SizeNotifierFrameLayout