Android 应用程序中 WebView 中的 html 文本字段被软键盘隐藏

发布于 2024-08-30 18:58:15 字数 1992 浏览 2 评论 0原文

我有一个 Android 应用程序,它是带有 WebView 的 TabHost。我用它来加载一个特定的 html 文件,该文件的底部有一个文本字段。

当我触摸html文本字段时,软键盘会弹出,并隐藏文本字段,这样我就看不到我输入的内容了。

这是布局:

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/main"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
        <TabWidget
            android:focusableInTouchMode="false"
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="63dp" />
        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">
        <LinearLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/layout"
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >
                <WebView
                    android:id="@+id/webview"
                    android:layout_width="fill_parent" 
                    android:layout_height="fill_parent"
                    android:layout_weight="1" />
            </LinearLayout>
        </FrameLayout>      
    </LinearLayout>
</TabHost>

我尝试使用 android:windowSoftInputMode="adjustResize" 配置 AndroidManifest.xml 文件,但没有成功。我还尝试用 ScollView 替换布局中的 FrameLayout,但这导致我的 webview 在应用程序运行时无限期地增加大小。这可能是由于我在页面上运行了一些 JavaScript 造成的。

我注意到Android的网络浏览器有一个漂亮的行为 - 在网页中,弹出软键盘后,网页会平滑滚动,以便用户可以看到可聚焦的文本字段。我怎样才能在我的应用程序中出现这种行为?

I have an Android application that is a TabHost with a WebView. I use it to load a specific html file that has a text field in its bottom part.

When I touch the html textfield, the soft keyboard pops up, and hides the textfield, so that I cannot see what I have typed.

Here is the layout:

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/main"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
        <TabWidget
            android:focusableInTouchMode="false"
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="63dp" />
        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">
        <LinearLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/layout"
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >
                <WebView
                    android:id="@+id/webview"
                    android:layout_width="fill_parent" 
                    android:layout_height="fill_parent"
                    android:layout_weight="1" />
            </LinearLayout>
        </FrameLayout>      
    </LinearLayout>
</TabHost>

I have tried to configure the AndroidManifest.xml file with android:windowSoftInputMode="adjustResize" with no success. I have also tried replacing the FrameLayout in my layout with ScollView, but that caused my webview to increase in size indefinitely when the application is running.. this may be due to some javascript I have running on the page.

I have noticed that the android's web browser has a nifty behavior - in a web page, after the soft keyboard pops up, the web page scrolls smoothly so that the focusable textfield is visible to the user. How can I have this kind of behavior in my application?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

-黛色若梦 2024-09-06 18:58:15

我快疯了,没有任何效果 android:windowSoftInputMode="adjustResize" 可能有帮助,但请确保您的应用程序不是全屏显示。

删除我的应用程序的全屏解决了使用软键盘调整布局大小的问题。

<item name="android:windowFullscreen">false</item>

I was getting crazy nothing works android:windowSoftInputMode="adjustResize" may help but be sure to have your app not in full screen.

Removing full screen for my app solved the problem with the layout resize with softkeyboard.

<item name="android:windowFullscreen">false</item>
叹沉浮 2024-09-06 18:58:15

我找到了这个问题的解决方案。 (大约在我发布问题一周后;我今天才在 stackoverflow 中回答......)

我的代码中有一些部分改变了 WebView 的高度(为 TabBar 留出空间)。事实证明,当您在 WebView 上调用 setLayoutParams 时,即使您设置了 android:windowSoftInputMode="adjustResize",它也不会再更改其高度。

我通过将 TabBar 添加到 main.xml 布局文件(初始大小为 0)来避免更改 WebView 高度的需要。当我增加 TabBar 的大小时,WebView 的大小会自动减小,并且它会保留 android: windowSoftInputMode="adjustResize" 行为。

I found a solution for this issue. (about a week after I posted the question; I only got to answering in stackoverflow today...)

I had pieces in my code that changed the WebView's height (to have room for a TabBar). Turns out that when you invoke setLayoutParams on a WebView, it will no longer change its height even if you have android:windowSoftInputMode="adjustResize" set.

I circumvented the need to change the WebView's height by adding the TabBar to the main.xml layout file, with an initial size of 0. When I increase the TabBar's size, the WebView's size decreases automatically, and it preserves the android:windowSoftInputMode="adjustResize" behavior.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文