36

WebViewを使用してFacebookのログインページを表示するAndroidアプリケーションを開発しています。ページが美しく読み込まれ、ユーザー名/パスワードのテキストボックスを選択できますが、入力しても機能しません。つまり、それらには間違いなく入力フォーカスがあります(オレンジ色のフォーカスハイライトボックスと点滅するカーソルがあります)が、入力してもまったく何も起こりません。確かではありませんが、フォームボタンも再生されていると思います。フォームを送信するのではなく、単にページを更新しているように見えます。

明確にするために、私はFacebookを実行することに特に興味がありますが、他のWebサイト(Googleなど)も同じ動作を示すため、これはFacebookの問題ではないと確信しています。

誰かが問題になるかもしれないアイデアを持っていますか?

4

17 に答える 17

45

問題となったのは、明らかにWebViewにフォーカスがないことでした。

矢印キーを使用してテキストボックスにフォーカスを合わせると機能することがわかったので、フォーカスがないもの、おそらくWebViewにフォーカスがないものに問題があると理論付けました。案の定、次の行を追加すると問題が解決したようです。

webView.requestFocus(View.FOCUS_DOWN);

そもそも問題が発生した理由を正確に説明するのはまだ途方に暮れています-テキストボックスは、タップされたときからフォーカスを受け取ったときでも、「矢印」されたときでも機能するはずです-少なくとも、機能しているように見える解決策があります。

入力wfをありがとう。

于 2010-01-18T23:19:31.717 に答える
15

@Macこの1行を実行します:

webView.requestFocus(View.FOCUS_DOWN);

あなたの問題を解決しましたか?私の場合はそうではありませんでしたが、これはそうです:

mWebView.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; 
        }
});

あなたの参照のためだけに。

于 2010-10-20T05:55:46.863 に答える
14

これらはほとんど持っています

webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setUseWideViewPort(true);
webview.requestFocus(View.FOCUS_DOWN);

それでも機能しない場合は、以下の1つの方法を使用してください

代替案1

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;
        }
    });

代替案2

webview.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
            case MotionEvent.ACTION_UP:
                v.requestFocusFromTouch();  
                break;
        }               
        return false;
    }

});
于 2013-11-19T15:36:00.913 に答える
9

私の場合があなたの場合とまったく同じかどうかはわかりませんが、

1つのcss行を追加することで問題を解決できることがわかりました。

追加するだけです

input{
    -webkit-user-select: text;
}

私のCSSに、そして問題は解決しました!

于 2015-03-06T08:42:15.803 に答える
6

申し訳ありませんが、これはどれもうまくいきませんでした。これはあなたの文脈に依存すると思います。私の場合、問題はhtmlポップアップ(絶対div)内で発生しました。他のすべての入力フィールドは正常に機能していました。

問題を分析すると、それがWebビューのバグであることがわかりました。他の固定/絶対位置divを含む固定位置divは、ページの入力フィールドを壊します。したがって、私があなたに言ったルール(再定式化することを躊躇しない

でください):ページに固定位置のdivがあり、デフォルトでは配置されていないネストされたdiv(つまり、絶対、固定など)がある場合、次の絶対値のいずれか入力フィールドを含むページにdivを配置すると、予期しない動作が発生します。

したがって、入力フィールドをページの上部に配置するか(可能な場合)、他の固定/絶対divにネストされた絶対divを避けてください。それは役立つはずです。

さらに説明や潜在的な回避策が必要な場合は、ブログに投稿しました:http: //java-cerise.blogspot.com/2012/02/android-web-view-inputfields-refuse-to.html

于 2012-02-29T14:17:05.920 に答える
5

私の場合TabHost、バックスタックの前のフラグメントから、キーを押すたびにWebView入力からフォーカスを盗んでいました。これが私がそれを修正した方法です:

tabHost.addOnAttachStateChangeListener(new OnAttachStateChangeListener() {
  @Override
  public void onViewDetachedFromWindow(View v) {}

  @Override
  public void onViewAttachedToWindow(View v) {
    tabHost.getViewTreeObserver().removeOnTouchModeChangeListener(tabHost);
  }
});

このトピックの詳細については、 https://code.google.com/p/android/issues/detail?id=2516を参照してください。

于 2014-12-17T15:21:30.327 に答える
2

他のWebサイトでも同じ動作が表示されるため、問題があるかどうかはわかりませんが、JavaScriptを有効にしましたか?WebViewはデフォルトではそれを有効にしません。

WebView webView = (WebView)findViewById(R.id.yourWebView);
webView.getSettings().setJavaScriptEnabled(true);
于 2010-01-18T07:27:04.687 に答える
2

私はこの問題を解決するために多くの時間を費やしています。最後に、それはWebViewに関するものではないことに気づきました。私の場合、ダイアログ内にWebビューがあります。戻るボタンを処理してダイアログをキャンセルし、アクティビティも終了したい。そして私は以下のコードを書きました:

private void setOnBackPressed() {
    this.setOnKeyListener(new OnKeyListener() {
        @Override
        public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                dialog.dismiss();
                activity.finish();
            }
            return true;
        }
    });
}

したがって、キーボードを使用すると、このメソッドは何らかの理由ですべてのキーの押下を拒否し、テキストフィールドに表示されません。

戻り値をfalseに変更しただけです。だから、それは正しく動作しました。

それが役に立てば幸い!!

PS:このメソッドは、Dialogクラスを拡張する私のダイアログクラス内にあります

于 2015-08-16T14:34:21.277 に答える
2

ここに掲載されている他のすべてのソリューションを試しましたが、どれも機能しませんでした。

代わりに、WebViewを拡張し、KeyEventsを強制的にディスパッチするInputConnectionをオーバーライドしました。

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
  return new BaseInputConnection(this, false);
}
于 2017-04-27T14:53:50.717 に答える
1

Webビューが最初のページを読み込んでいるときにスプラッシュ画像を表示しているため、この問題が発生しました。onPageFinishedでWebビューをView.VISIBLEに設定していますが、テキストボックスにフォーカスできるにもかかわらず、入力できません。私も、webviewrequestFocusをView.FOCUS_DOWNに設定するための修正が機能することを確認できます。

NB。onResumeでWebビューをView.VISIBLEに設定した場合、問題は発生しませんが、私の場合、スプラッシュ画像がすぐに消えます。

于 2010-08-13T02:49:50.627 に答える
1

4.1.2と4.2.2でページを読み込んでいたのですが、1日検索したところ、ここで答えが見つかりました(コメント#18)

元の投稿からの引用:

私がレンダリングしていたさまざまなWebページのいくつかは、WebViewに適切に適合せずWebView、その結果、div(または他のhtmlコンポーネント)が入力フィールドに目に見えない形で配置されていました。入力フィールドはタッチすると選択されたように見えますが、テキスト入力はできません(トラックボールを使用してソフトキーボードを起動できたとしても)。

だから解決策。

webview.getSettings().setUseWideViewPort(true);

これで問題が完全に解消されるわけではありませんが、サイトが設計されているPCブラウザのように表示されます。オーバーレイの変更が少ない。

于 2013-07-16T19:39:46.147 に答える
0

異なる可能性のある問題を見つけましたが、同じように聞こえます。android 2.3ネイティブブラウザでは、ページ上の位置要素が固定されていると、選択ボックスが壊れることがあります。

2.3デバイスでのこの問題の回避策は、固定位置の親に空の子要素を許可しないことです。したがって、

<div style="position:fixed">
  <div>
    <span>not empty</span>
    <span></span>
  </div>
</div>

になります

<div style="position:fixed">
  <div>
    <span>not empty</span>
    <span>&nbsp;</span>
  </div>
</div>

これで私の問題は解決しました。

これがあなたの問題の問題であったかどうかはわかりません。これは事後1年以上経過していますが、現在アプリで別の固定位置の問題を扱っているので、共有したいと思いました。 tはそれに対する回避策を見つけました。

于 2013-06-18T22:16:43.313 に答える
0

私のコンテキスト(外部URLを含むWebビュー)では、このフラグメントは機能します:

    webview.setOnTouchListener(new View.OnTouchListener() {
       @Override
       public boolean onTouch(View v, MotionEvent event) {
           switch (event.getAction()) {
               case MotionEvent.ACTION_DOWN:
               case MotionEvent.ACTION_UP:
                   v.requestFocusFromTouch();  
                   break;
           }               
           return false;
       }

});

エラーは、タッチするたびにWebビューがフォーカスを失っていたためです。

于 2014-07-29T12:51:44.590 に答える
0

私は同様の問題に直面しました。テキスト入力がWebビューで機能しないということです。テキスト入力にフォーカスすると、キーボードが表示されますが、文字を入力することはできません。

長い間解決策を探した結果、これで問題が解決することがわかりました。

body {
    -webkit-transform: translate3d(0,0,0);
    -moz-transform: translate3d(0,0,0);
    -ms-transform: translate3d(0,0,0);
    -o-transform: translate3d(0,0,0);
    transform: translate3d(0,0,0);
}

私が理解したように、このルールにより、一部のデバイスはハードウェアアクセラレーションを実行します。translate3d(0,0,0)の詳細については、こちらをご覧ください。

一方、この記事によると、どこでもGPUアクセラレーションを使用することはお勧めしません。

于 2015-05-04T13:25:55.590 に答える
0

デフォルトでは、Androidでは、Webviewは基本的な構成でユーザー入力を許可します:-

android:focusable="true"
android:focusableInTouchMode="true"

&JavaScriptを有効にしましたが、私の場合、アクティビティ/フラグメントレベルのフォーカス可能性のブロックがないことを確認してください

android:descendantFocusability="blocksDescendants"

ちょうどこれを削除し、私のために働いた。したがって、そのようなケースをクロスチェックし、それに応じて修正してください。

于 2021-07-21T16:35:07.197 に答える
-1

EditTextで扱っている場合WebView、 Mozilla / 5.0(X11; Linux i686)v.requestFocusFromTouch ()を作成する必要がある場合は機能せずUSER_AGENT、Mozilla / 5.0(X11; Linux x86_64)の場合は正常に機能します。

于 2015-04-16T16:49:52.450 に答える
-1

それは私のプロジェクトでも起こりました。私は上記のすべての方法を試しましたが、どれも効果的ではありません。最後に、ネイティブダイアログの代わりにダイアログテーマアクティビティを使用して、この問題を解決しました。これが誰かを助けることができることを願っています!

于 2015-07-03T09:19:41.013 に答える