Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android WebView文本区域不';不要弹出键盘_Android_Textarea_Webview - Fatal编程技术网

Android WebView文本区域不';不要弹出键盘

Android WebView文本区域不';不要弹出键盘,android,textarea,webview,Android,Textarea,Webview,当我显示WebView时,我没有看到软键盘弹出。硬键盘也不工作 通常的缺点是什么 我用来访问WebView的代码是: package com.example.blahblah; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.os.Handler; impor

当我显示
WebView
时,我没有看到软键盘弹出。硬键盘也不工作

通常的缺点是什么

我用来访问
WebView
的代码是:

package com.example.blahblah;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Window;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class createAccount extends Activity {

private static final String LOG_TAG = "Create Account";
private WebView mWebView;
private static final String URL = blah_app.urlSelected+"createAccount.html";    
private Handler mHandler = new Handler();

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    Toast.makeText(createAccount.this, "URL = " +URL, Toast.LENGTH_SHORT).show();
    getWindow().requestFeature(Window.FEATURE_PROGRESS);
    setContentView(R.layout.webview);
    getWindow().setFeatureInt(Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);

    mWebView = (WebView) findViewById(R.id.webview);

    WebSettings webSettings = mWebView.getSettings();
    webSettings.setSavePassword(true);
    webSettings.setSaveFormData(true);
    webSettings.setJavaScriptEnabled(true);
    webSettings.setSupportZoom(true);


    final Activity activity = this;
    mWebView.setWebChromeClient(new WebChromeClient() {
    public void onProgressChanged(WebView view, int progress) {

        activity.setProgress(progress * 1000);
      }
    });

    mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");
    mWebView.clearCache(true);
    setProgressBarVisibility(true);
    mWebView.setWebViewClient(new WebViewClient() {
          public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();
          }

           @Override  
           public void onPageFinished(WebView view, String url)  
           {  
               mWebView.loadUrl("javascript:(function () { " +
                       "setVariables("+blah_app.numberSelected+",'"+blah_app.urlSelected+"');" +
                       "})()");
           }
        });

    mWebView.loadUrl(URL);
}

final class DemoJavaScriptInterface {

    public void setData(String fname, String lname, String gacct, String phone) {

        SharedPreferences prefCreateAccount = PreferenceManager.getDefaultSharedPreferences(createAccount.this);
        SharedPreferences.Editor editor = prefCreateAccount.edit();
        editor.putString("FirstName", fname);
        editor.putString("LastName", lname);
        editor.putString("GmailAcct", gacct);
        editor.putString("Phone", phone);
        editor.commit();    

    }
    DemoJavaScriptInterface() {

    }

    /**
     * This is not called on the UI thread. Post a runnable to invoke
     * loadUrl on the UI thread.
     */
    public void clickOnAndroid() {
        mHandler.post(new Runnable() {
            public void run() {
                mWebView.loadUrl("javascript:wave()");
            }
        });
    }
}

/**
 * Provides a hook for calling "alert" from javascript. Useful for
 * debugging your javascript.
 */
final class MyWebChromeClient extends WebChromeClient {
    @Override
    public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
        Log.d(LOG_TAG, message);
        result.confirm();
        return true;
    }
}

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
        startActivity(new Intent(getApplication(), blah_app.class));
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
}

我也有类似的问题。。。。后来,我发现我的web视图显示的网页上的文本框被禁用


如果网页在浏览器中有相同的问题,请检查此项?

问题是,在加载webview时,它没有获得焦点,因此使用

webView.requestFocus(View.FOCUS_DOWN);

解决了问题。

完整的解决方案比萨那的解决方案多一点。它被记录为Android站点()上的一个bug:


我遇到了完全相同的问题,上述解决方案都不适合我。经过多年的努力,我终于找到了问题所在

我用WebView呈现的各种网页中,有一些不适合web视图,因此div(或其他html组件)被不可见地放置在输入字段上。尽管触摸输入字段时显示为选中,但它们不允许文本输入(即使我确实使用轨迹球将软键盘打开)

因此,解决方案

WebView.getSettings().setUseWideViewPort(true);
这并不能完全解决这个问题,但会使视图更像是专为网站设计的PC浏览器。覆盖层的变化较小


希望这对您有所帮助。

我很惊讶,即使在Android 4.1(在SGS3上测试)上,这个问题仍然存在,而重写onTouch()并不能为我解决这个问题

测试代码:

String HTML = "<html><head>TEST</head><body><form>";
HTML += "<INPUT TYPE=TEXT SIZE=40 NAME=user value=\"your name\">";
HTML += "</form></body></html>";

WebView wv = new WebView(getContext());
wv.loadData(HTML, "text/html", null);

final AlertDialog.Builder adb = new AlertDialog.Builder(getContext());
adb.setTitle("TEST").setView(wv).show();

我在果冻豆上也有同样的问题,但上面的解决方案都不适合我。这个解决方案在果冻豆上对我有效

WebView webView = new WebView(getActivity(), null, android.R.attr.webViewStyle);

有时默认情况下不应用android.R.attr.webViewStyle。这确保了始终应用样式。

对于那些在
WebView
处于
AlertDialog
中时寻找解决方案的人,这里的答案为我解决了这个问题:

一行答案,它工作得很好

// define webview for browser
wb = (WebView) findViewById(R.id.webView1);
wb.requestFocusFromTouch();

其中wb是我的
webView的对象

有相同的问题,但上述解决方案中没有一个有效。这对我来说很有用

    <CustomWebView
    android:id="@+id/webView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:focusable="true"
    android:focusableInTouchMode="true" />

试试这个-->firstname是字段的名称,确保它没有自动聚焦属性

    mWebView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            mWebView.loadUrl("javascript:document.getElementById(\"firstname\").focus();");
        }
    });

为了方便起见,由于其他解决方案在所有设备或任何条件下都存在问题,我总是使用一个小技巧来克服这个问题,而不涉及代码,只需将任何隐藏的
editText
添加到包含
webView
的布局中,该布局将自动将焦点授予整个视图,您将不必再担心
webView
文本字段:

<EditText
    android:id="@+id/kb_holder"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:inputType="text"
    android:maxLines="1"
    android:visibility="gone" /> 

因此,整个布局如下所示:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/kb_holder"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:inputType="text"
        android:maxLines="1"
        android:visibility="gone" />

    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</FrameLayout>


你的意思是当你在网页上或在文本区域内单击时,键盘不会弹出吗?也许他指的是网站中显示在网络视图中的html输入字段?@Sephny:当我单击文本区域时,键盘不会弹出,摩托罗拉里程碑上可用的硬键盘也不会工作!嗯,真奇怪。我运行了一些测试,用最简单的webview打开键盘没有问题。你能为你的网络视图添加代码吗?我自己也有这个问题,它是特定于网页的。我没能解决它。也许可以尝试通过代码将焦点设置为webview,或者也可以使用轨迹球进行导航。如果你找到了解决方案,请与我们分享。这个解决方案对nexus 7的jelly bean没有帮助,有人有其他想法吗?我在设备上遇到了这个问题。单靠这个办法是行不通的。但是按照Jeff Peiffer(上面)的建议添加OnTouchListener代码就成功了。它对我来说很有效,没有这行:
webView.requestFocus(View.FOCUS\u DOWN)。很遗憾,在尝试了以上所有答案后,我尝试了您的选项!!对我来说,这也是唯一有效的答案。我在运行时设置-->setFocusable(true);setFocusableInTouchMode(真);在Jelly Bean+中,其他解决方案都不起作用。这应该是公认的答案@RuslanK感谢您提供的解决方案,但我不知道MyWebView在哪里使用?我是这样使用webview的-如果我将MyWebview替换为webview mWebView=(webview)findViewById(R.id.webview),则会出现错误@Manisha:首先,应该用布局将xml文件中的“WebView”替换为“com.mypackage.MyWebview”。
<EditText
    android:id="@+id/kb_holder"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:inputType="text"
    android:maxLines="1"
    android:visibility="gone" /> 
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/kb_holder"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:inputType="text"
        android:maxLines="1"
        android:visibility="gone" />

    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</FrameLayout>