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>