【问题标题】:Android Scroll Webview Editrable to cursor - soft keyboardAndroid Scroll Webview Editrable to cursor - 软键盘
【发布时间】: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


【解决方案1】:
  • 我更改了 minSDK 版本,因为我无法在我的 设备。

  • 我已将 CDN 更改为本地加载,因为有时 CDN
    无法在 webview 中加载。

  • 我已将方向更改为纵向。

  • 我已经评论了你的安卓配置。

  • 我评论了你的引导类的容器。我有
    将css和js放在一个单独的文件中。

  • 我已更改您的脚本在 html 中的位置,因为
    将 js 文件放在 body 标记之后时加载速度更快。

我已经创建了这个带有更改的 repo:https://github.com/Steven0213/bootstrapExample

如果您需要更多改进或不正确,请告诉我

【讨论】:

  • 所以你给我的解决方案确实适用于示例,但是它仍然不能调整我们遗留代码中的 webview 消息体的大小。我认为这可能与我们正在使用片段有关,然后将 xml 文件的内容区域替换为具有上述消息正文的 composition.html 文件。我认为 Android 没有通知 webview 片段显示键盘,因此它可以将 webview 窗口的大小调整为 5 或 6 行,然后在您键入时滚动。不知道从这里去哪里..
  • 那么您的意思是代码在您需要的应​​用程序中不起作用?我真的不明白你的意思是调整 webview 窗口的大小?
  • 很抱歉造成混乱。该视图是一个“简单”的回复窗口,其中我们在顶部有“TO,SUBJECT”,然后是一个呈现文本并占据屏幕剩余 2/3 的 web 视图。如果随后打开键盘(因为 webview 只是一个可编辑的消息体),软键盘会覆盖 webview 并且 webview 不会滚动,如果您单击文本的下部,它也不会捕捉到光标调出键盘,从而隐藏光标。
  • 因此,如果我理解正确,它在您的 webview 中不起作用,因为您的屏幕只有 2/3 webview。所以你的软键盘在你的整个 webview 之上?
  • 正确。我希望webview能够“调整大小”并允许滚动以及将光标定位到用户在显示软键盘之前单击的位置。再次记住,我们在该 webview 片段中拥有的只是一个可编辑的引导消息体。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-15
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多