我創建了自己的WebView並設置了WebChromeClient和WebViewClient對象。當我啓動這個WebView時,當我觸摸它們(光標出現)時,HTML表單域會作出反應,但它們不會被選中,軟鍵盤也不會啓動。如果我使用軌跡球選擇窗體並按下它,鍵盤確實會出現。在WebView中點擊表單域並不顯示軟鍵盤
我試圖撥打myWebview.requestFocusFromTouch()
作爲this answer建議,但它返回false並沒有幫助。
我創建了自己的WebView並設置了WebChromeClient和WebViewClient對象。當我啓動這個WebView時,當我觸摸它們(光標出現)時,HTML表單域會作出反應,但它們不會被選中,軟鍵盤也不會啓動。如果我使用軌跡球選擇窗體並按下它,鍵盤確實會出現。在WebView中點擊表單域並不顯示軟鍵盤
我試圖撥打myWebview.requestFocusFromTouch()
作爲this answer建議,但它返回false並沒有幫助。
http://code.google.com/p/android/issues/detail?id=7189
這是在其他情況下,修復並不清楚。
webview.requestFocus(View.FOCUS_DOWN);
webview.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP:
if (!v.hasFocus()) {
v.requestFocus();
}
break;
}
return false;
}
});
AndroidChen的答案沒有工作,爲我所有,但我搜索(http://code.google.com/p/android/issues/detail?id=7189)提供的鏈接,我發現下面的類,它完美的作品(Android的升級Froyo的HTC布拉沃),而不僅僅是文字,還所有的按鈕,重定向等,一切完美的作品:d
class LiveWebView extends WebView
{
Context mContext;
public LiveWebView(Context context, String URL)
{
super(context);
mContext = context;
setWebViewClient(URL);
}
@Override
public boolean onCheckIsTextEditor()
{
return true;
}
@SuppressLint("SetJavaScriptEnabled")
boolean setWebViewClient(String URL)
{
setScrollBarStyle(SCROLLBARS_INSIDE_OVERLAY);
setFocusable(true);
setFocusableInTouchMode(true);
requestFocus(View.FOCUS_DOWN);
WebSettings webSettings = getSettings();
webSettings.setSavePassword(false);
webSettings.setSaveFormData(false);
webSettings.setJavaScriptEnabled(true);
webSettings.setSupportZoom(false);
webSettings.setUseWideViewPort(false);
setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP:
if (!v.hasFocus())
{
v.requestFocus();
}
break;
}
return false;
}
});
this.setWebViewClient(new WebViewClient()
{
ProgressDialog dialog = new ProgressDialog(mContext);
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
loadUrl(url);
return true;
}
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
{
Toast.makeText(mContext, "Oh no! " + description, Toast.LENGTH_SHORT).show();
}
public void onPageStarted(WebView view, String url, Bitmap favicon)
{
if (dialog != null)
{
dialog.setMessage("Loading...");
dialog.setIndeterminate(true);
dialog.setCancelable(true);
dialog.show();
}
}
public void onPageFinished(WebView view, String url)
{
if (dialog != null)
{
dialog.cancel();
}
}
});
this.setWebChromeClient(new WebChromeClient()
{
public void onProgressChanged(WebView view, int progress)
{
// Activities and WebViews measure progress with different scales.
// The progress meter will automatically disappear when we reach 100%
}
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result)
{
result.confirm();
return true;
}
});
loadUrl(URL);
return true;
}
}
,然後在對話中創建一個web視圖,我寫了這個代碼
AlertDialog.Builder alert = new AlertDialog.Builder(M_PaymentOptions.this);
alert.setNegativeButton("Back to Payment Options", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int id)
{}
});
alert.setTitle("BarclayCard Payment");
LiveWebView liveWevViewObject = new LiveWebView(M_PaymentOptions.this, redirecturl);
alert.setView(liveWevViewObject);
alert.show();
謝謝,Dv_MH!接受的答案也不適用於我,但是這個工作。 – 2014-05-12 08:48:12
同意10%的Dv_MH的回答。但是,所附的課程有點過分。所有我需要做的是延長的WebView &爲onCheckIsTextEditor()返回true
import android.content.Context;
import android.util.AttributeSet;
import android.webkit.WebView;
public class LiveWebView extends WebView {
public LiveWebView(Context context) {
super(context);
}
public LiveWebView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public LiveWebView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onCheckIsTextEditor() {
return true;
}
}
從那裏,我可以使用它作爲一個正常的WebView(甚至對話框)。
或者,用更少的代碼:
WebView web = new WebView(context) {
@Override
public boolean onCheckIsTextEditor() {
return true;
}
};
這是唯一真正爲我工作的人。其他一切都忽略了軟鍵盤。 – kingargyle 2014-08-06 15:10:33
這對我來說(而不是第一次回答)'DialogFrament' – David 2014-10-12 13:59:54
這也適用於我。我做了一點不同 – 2014-10-15 04:17:38
重要 我花了幾個小時尋找這一點,我通過確保解決它所有擴展「的ViewGroup」沒有財產
父佈局android:descendantFocusability =「blocksDescendants」防止兒童佈局變得集中
或 添加機器人:可調焦= 「true」 將的WebView
搜索我的項目「DescendantFocusability」刪除該行,它終於奏效。不是在一個webView中,我不知道如何結束在源代碼中的行。 – chaggy 2016-11-15 18:06:23
只需添加的WebView下看不見的EditText
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible" />
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
所有這些焦點相關的解決方案,並沒有對我的三星工作的注意事項3/Android 5.0
你有沒有做到這一點? :http://stackoverflow.com/questions/35465569/changing-the-input-source-of-form-fields-in-webview – debonair 2016-02-17 21:49:46