WebView
コンテンツのスクロール位置に関する問題が発生しています。ここには次のような問題があります。ページをある程度縦方向にスクロールしていて、スクロールが上下に動きます。それはポートレートモードにある正確な内容を示していません。私はconfigChanges="keyboardHidden|orientation|screenSize"
としてManifestファイルの変更を試みましたが、運はありません。私はをオーバーライドしましたが、それはうまくいきませんでした。私はこのquestionで受け入れられた答えを実装しましたが、使用していません。誰かが何をしなければならないのか、なぜそれはうまくいかないのでしょうか?これはGoogle Nexusタブ用で、必要な最小SDKバージョンは14です。 ありがとうございます。WebViewの位置を向きの変更で同じコンテンツに戻す
答えて
ビュークラスには、Parcelable
を返すonSaveInstanceState()
メソッドと、onRestoreInstanceState(Parcelable state)
メソッドを返して状態を復元するメソッドがあります。正しくリコールすると、保存された状態にはスクロール位置が含まれます。あなたがする必要があるすべてはあなたのフラグメントのonSaveInstanceState
方法でのWebViewのonSaveInstanceState()
への呼び出しから取得Parcelableを保存している:、
public void onSaveInstanceState(Bundle savedState) {
super.onSaveInstanceState(savedState);
WebView webView = (WebView) findViewById(...);
savedState.putParcelable("myKey", webView.onSaveInstanceState());
}
は、その後、あなたの
onCreateView
方法であなたはその状態を復元可能な場合:
public View onCreateView (LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
...
if (savedInstanceState != null) {
WebView webView = (WebView) findViewById(...);
Parcelable savedState = savedInstanceState.getParcelable("myKey");
if (savedState != null) {
webView.onRestoreInstanceState(savedState);
}
}
....
}
onSaveInstanceStateを使用して、のスクロールビューとの復元をonRestoreInstanceStateメソッドで保存するようにしてください。 はいが、その後は、そのビューを参照を取得し、活動が保存されてstate.Hopeにscrollviewのその後、セット位置を復元するときに、この場合に役立ちますuは?xmlの THR Scrollviewを使用しました。
私のコメントを見てくださいTomTascheの回答 – Lavanya
私のアプリで同じ問題に直面していることを覚えています。私が間違っていないなら、Philによって提案された解決策は(Androidのいくつかのバージョンでは)機能しません。
私は今、次のアプローチを使用しています:、のonCreateでoutState.putInt(EXTRA_SCROLL_POSITION, webView.getScrollY());
savedInstanceStateから最後のスクロール位置を取得して設定:onSaveInstanceStateで
- は、WebViewのの現在のスクロール位置を保存しますカスタムWebViewClient:
setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); if (!scrolled) { postDelayed(new Runnable() { @Override public void run() { scrollBy(0, scroll); } }, 250); scrolled = true; } } });
これは地獄のように醜いですが、それはちょっとのために働きます私(これは現在のズームレベルなどを考慮していません)。あなたが改善できるコードについてはたくさんありますが、それは基本的にトリックです。
私の活動は方向を変えてもそれは再現されません。onSaveInstanceStateを使用するにはどうしたらいいですか?onSaveInstanceStateは、別のアプリケーションにフォーカスを失ったときにのみ呼び出されます。私のアクティビティは再作成されないので、onRestoreInstanceStateも使用できません。 @TomTasche – Lavanya
ああ、そうだ。あなたはonRestoreInstanceStateの代わりに 'onConfigurationChanged'を使うことができますが、私はあなたがonSaveInstanceStateを何に置き換えることができるか分かりません。ごめんなさい! – TomTasche
- 1. 方向変更時にWebViewコンテンツのスクロール位置を維持する
- 2. webview内のコンテンツの位置を変更する - Electron/Chrome/JS/JQuery
- 3. WebViewの位置を変更するココア
- 4. マウスの位置を方向に戻して戻す
- 5. 前のページの同じ位置に戻る
- 6. ウィンドウのサイズを変更するときにdivを同じ位置に変更します。
- 7. xaringanスライドのフルスクリーンモードでコンテンツの位置を変更する方法
- 8. Xcodeのコンテンツはナビゲーションバーの同じ位置から開始され、
- 9. scrolltoitematindexpathが常に同じ位置に戻る
- 10. 画像の位置は背景の位置と同じです
- 11. 同じヒープ位置のMalloc?
- 12. 同じ時間にビューの位置を回転して変更しますか?
- 13. jQuery UIのオートコンプリート位置を変更する - 下向きではなくポップアップ
- 14. 文書のどこにでもDivを配置し、ウィンドウのサイズ変更後に同じ位置にする
- 15. ビューのタッチ位置をWebViewのHTML画面位置に変換する
- 16. コンソールベースのゲーム「同じ位置の行列を更新する」?
- 17. WebViewスクロール位置?
- 18. ナンバースクリプトでサイドドロワーの位置/位置を変更するには
- 19. Android Studioはスクロールバーの前のページと同じ位置に戻りますか?
- 20. CSSコンテンツの位置を変更します。
- 21. セルをタップした後のUICollectionViewの同じスクロール位置に戻る
- 22. 他のアクティビティから来た後に同じリサイクル・ビューの位置に戻る
- 23. 同じ位置に2つのマーカー
- 24. 私は、重力を変更しますが、ボタンの位置が同じ
- 25. アンドロイドでの位置変更のマーカー位置を変更する方法
- 26. 向きを変えるときの位置UIview
- 27. Androidと同じ位置Textview
- 28. 同じdivで複数回クリックしたときに変更を元に戻す
- 29. Androidで変更した後に同じアクティビティに戻ります
- 30. 同じ解像度で全部同じ位置に画像を置く
Tom Tascheの答えのコメントをご覧ください。 – Lavanya
フラグメントを使用していない場合はnoですが、これは機能しません。これが十分な大きさの問題であれば、フラグメントベースのバージョンを試してみる価値があるかもしれません(とにかくアクティビティ内のフラグメントに移動する必要があり、サポートライブラリは下位互換性を提供します)。 – Phil
私はこれを試しましたが、 'savedState.putParcelable(" myKey "、webView.onSaveInstanceState());行は、' onSaveInstanceState()がandroid.view.Viewのアクセスを保護しています 'というエラーを返します。 – primehalo