当前位置:  开发笔记 > 编程语言 > 正文

软键盘出现时如何调整布局

如何解决《软键盘出现时如何调整布局》经验,为你挑选了6个好方法。

我想在软键盘激活时调整/重新调整布局大小,如下所示:

之前和之后:

在此输入图像描述在此输入图像描述


在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在调整大小过程中不会调整大小的布局.

这就是为什么你需要RelativeLayoutScrollView通过所有可用屏幕空间后立即获得1 .并且你需要有一个LinearLayout内部的RelativeLayout其他内容,你的内部将在调整大小时被压碎.好的例子是"headerLayout".如果没有LinearLayout内部RelativeLayout"facebook"文本会被粉碎而且不会显示.

在问题中发布的"facebook"登录图片中我也注意到整个登录部分(mainLayout)相对于整个屏幕是垂直居中的,因此属性:

android:layout_centerVertical="true"

LinearLayout布局上.并且因为mainLayout在内部,LinearLayout这意味着该部分不会被调整大小(再次看到相关图片).



1> Venkatesh S..:

只需添加

android:windowSoftInputMode="adjustResize"

在AndroidManifest.xml中,您声明此特定活动,这将调整布局调整大小选项.

在此输入图像描述

下面的一些源代码用于布局设计




    

    

        
    

    

    


朋友似乎只有带有"注册Facebook"的TextView在软键盘激活时自行调整,其他人保持不变.我希望其他人也能进行调整.任何解决方法?在激活键盘之前,整个布局应位于中心位置,
+1这简单吗?任何额外的条件?你发布的图片是什么?
朋友只是为了显示alignparentbottom ="true"如果屏幕没有正确调整..因此我放置了那个图像朋友
k朋友,谢谢大家,希望我们能再见面

2> Yani2000..:

几年前问了这个问题,"秘密Andro Geni"有一个很好的基础解释,"tir38"也对完整的解决方案做了很好的尝试,但是这里没有完整的解决方案.我花了几个小时搞清楚事情,这是我的完整解决方案,底部有详细解释:




    

        

            

                

            

        

        

            

                
            

            

            

AndroidManifest.xml中,不要忘记设置:

android:windowSoftInputMode="adjustResize"

标签上你想要这样的布局.

思考:

我已经意识到这RelativeLayout是通过所有可用空间的布局,然后在键盘弹出时调整大小.

并且LinearLayout在调整大小过程中不会调整大小的布局.

这就是为什么你需要RelativeLayoutScrollView通过所有可用屏幕空间后立即获得1 .并且你需要有一个LinearLayout内部的RelativeLayout其他内容,你的内部将在调整大小时被压碎.好的例子是"headerLayout".如果没有LinearLayout内部RelativeLayout"facebook"文本会被粉碎而且不会显示.

在问题中发布的"facebook"登录图片中我也注意到整个登录部分(mainLayout)相对于整个屏幕是垂直居中的,因此属性:

android:layout_centerVertical="true"

LinearLayout布局上.并且因为mainLayout在内部,LinearLayout这意味着该部分不会被调整大小(再次看到相关图片).



3> Ashish Jaisw..:

在您的Manifest中添加此行,您的Activity将被调用

android:windowSoftInputMode="adjustPan|adjustResize"

要么

你可以添加这一行 onCreate

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);


绝对不要同时使用`adjustPan`和`adjustResize`。这些是不同的模式。在这里阅读有关它们的更多信息:/sf/ask/17360801/在这里:https://developer.android.com/guide/topics/manifest/activity-element

4> tir38..:

Android Developer有正确的答案,但提供的源代码非常冗长,并没有实际实现图中描述的模式.

这是一个更好的模板:




    

        

                

        

        

            

        

    


由您自己决定用于"滚动"和"页脚"部分的视图.也知道你可能要设置ScrollViews fillViewPort.



5> 小智..:

它可以适用于所有类型的布局.

    将其添加到AndroidManifest.xml中的activity标记中

机器人:windowSoftInputMode = "adjustResize"

例如:


    将它添加到activitypage.xml中的布局标记上,该标记将更改其位置.

机器人:fitsSystemWindows = "真"

机器人:layout_alignParentBottom = "真"

例如:




6> Morten Holmg..:

这样就可以显示键盘先前隐藏的任何所需布局。

将此添加到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)
}

完整版式示例:



    

        

    

    

        

            

        

        

            

        

        

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有