【发布时间】:2018-02-22 11:14:21
【问题描述】:
我有一段继承的代码,我一生都无法弄清楚如何调试这个问题。
我有一个带有 web 视图的线性布局。 webview里面是一个div,设置为:
style="overflow-y: scroll; -webkit-overflow-scrolling:touch" contenteditable="true".
但是,如果 WebView 中的文本是屏幕的全高,当我点击文本的底部时,键盘会显示但视图不会滚动到光标点。事实上,光标图标显示在软键盘的顶部。
现在,如果我尝试这是一个具有相同 div 标签的示例应用程序,它就可以正常工作。我不知道为什么遗留代码不滚动。它们都没有包裹在它们周围的滚动视图,但是带有 webview 的简单应用程序的支架工作得很好。
div 的类是:
.messageBody {
word-wrap: break-word;
-webkit-nbsp-mode: space;
-webkit-line-break: after-white-space;
height: 100%;
min-height: 200px;
}
更新: 所以如果我有
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:configChanges="orientation|screenSize|keyboard|keyboardHidden"
android:windowSoftInputMode="adjustPan">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
似乎“android:windowSoftInputMode="adjustPan" 导致键盘覆盖 web 视图并且光标被放置在软键盘的顶部。如果我将 adjustPan 取出它似乎可以工作。但是在旧代码中这个似乎没有什么区别,所以我试图了解如何查看遗留代码中的所有属性,以便将其与我可以在其中重新创建错误的示例应用程序进行比较。
更新图像
Webview,将指针放在文本最后一行中的一个单词上,观察软键盘打开,光标插入键盘顶部,视图不滚动。
<FrameLayout
android:id="@+id/composer_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:windowSoftInputMode="adjustPan"/>
【问题讨论】:
-
所以你说你试过了,它成功了,但是 try 项目不包含任何文本?
-
很抱歉,是的,它包含 3 段文本,所以它滚动得很好。但是,如果我向下滚动然后点击要编辑的文本,软键盘会显示在 web 视图的顶部。就像它没有调整大小,并且光标没有将文本移动到软键盘上方(认为自动平移或调整大小会这样做,但事实并非如此)。
-
你的 .messageBody 有宽度吗?您是否尝试过获得其他 css 样式然后 -webkit- 做同样的事情?因为某些css样式在android webview中不起作用
-
查看以上更新。
-
在哪里可以看到问题的解决方案?
标签: android android-webview android-softkeyboard