Android 输入法挤压屏幕解决方案

版权声明:本文出自Jinguangyue的博客,转载必须注明出处。 http://blog.csdn.net/coderyue https://blog.csdn.net/CoderYue/article/details/66265843

问题发生

Android 输入法问题真是太蛋疼了, 我有这样一个需求, 要在图片上加字, 上图看效果:
这里写图片描述

然后我要双击编辑的时候需要一个编辑框, 但是界面之前是没有任何编辑框的, 我的想法是在底部生成一个编辑框,然后编辑的时候让这个编辑框获取焦点, 弹出软键盘,然后这一步弹出软键盘可是进坑了, 变成了这样的效果, 积压了屏幕:

这里写图片描述

想到的解决方案一

查询相关知识可知为Activity设置 windowSoftInputMode, 有这样一些属性:

“stateUnspecified” 软键盘的状态(是否它是隐藏或可见)没有被指定。系统将选择一个合适的状态或依赖于主题的设置。这个是为了软件盘行为默认的设置。

“stateUnchanged” 软键盘被保持无论它上次是什么状态,是否可见或隐藏,当主窗口出现在前面时。

“stateHidden” 当用户选择该Activity时,软键盘被隐藏——也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity。

“stateAlwaysHidden” 软键盘总是被隐藏的,当该Activity主窗口获取焦点时。

“stateVisible” 软键盘是可见的,当那个是正常合适的时(当用户导航到Activity主窗口时)。

“stateAlwaysVisible” 当用户选择这个Activity时,软键盘是可见的——也就是,也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity。

“adjustUnspecified” 它不被指定是否该Activity主窗口调整大小以便留出软键盘的空间,或是否窗口上的内容得到屏幕上当前的焦点是可见的。系统将自动选择这些模式中一种主要依赖于是否窗口的内容有任何布局视图能够滚动他们的内容。如果有这样的一个视图,这个窗口将调整大小,这样的假设可以使滚动窗口的内容在一个较小的区域中可见的。这个是主窗口默认的行为设置。

“adjustResize” 该Activity主窗口总是被调整屏幕的大小以便留出软键盘的空间。

“adjustPan” 该Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。

然而设置adjustPan不调整屏幕大小, 此时编辑框就不会和软键盘一起弹上来, 而是留在底部, 可见这些属性并不能解决什么!
方案一失败。

想到的解决方案二

此时我想如果我不把编辑框放在底部而是放在软键盘弹出位置的上面可好, 如果放在上面那我要知道软键盘的高度, 这样才能把空间设置到相应的位置, 带着这个问题查了些资料,解决思路都是先设置adjustResize让界面调整大小来适应软键盘的弹出, 然后根据界面的根部view通过输入法弹出和收回屏幕上剩余空间的变化来得出软键盘高度, 获取软键盘高度相关网站:

http://stackoverflow.com/questions/7417123/android-how-to-adjust-layout-in-full-screen-mode-when-softkeyboard-is-visible/19494006#19494006

https://www.diycode.cc/topics/383

亲测之后得出的值也是有变化的,再者说我不能让软键盘弹出来了我才去计算它的高度, 这也是不合理的。

我能做到的解决方案

现在的问题就是软键盘弹出并且挤压了页面的相关控件, 我目前的解决方式有俩个:

第一是页面上在底部的控件都设置上margin, 此方法和保证它不随着软键盘一起被顶起。

第二我觉得如果有这样的需求那底部应该不放过多控件,而是用dialog或者popWindow来做。

以上2种方式都可以避免类似问题, 不过我这俩种方式让我感觉解决的很不爽, 应该还有更加巧妙的方式啊!!

猜你喜欢

转载自blog.csdn.net/CoderYue/article/details/66265843
今日推荐