コンテンツのスクロール位置に関する問題に直面してWebView
います。これは次のとおりです。縦向きモードでページをある程度下にスクロールしています。向きを横向きに変更すると、スクロールが上下に移動します。ポートレートモードにある正確なコンテンツは表示されません。マニフェストファイルを変更しようとしましconfigChanges="keyboardHidden|orientation|screenSize"
たが、うまくいきませんでした。オーバーライドしonConfigurationChanged()
ましたが、うまくいきませんでした。この質問で受け入れられた回答を実装しましたが、役に立ちません。誰かが何をしなければならないか、なぜそれがうまくいかないのかを提案できますか? これは Google Nexus Tab 用で、必要な最小 SDK バージョンは 14 です。ありがとうございます。
3 に答える
アプリで同じ問題に直面したことを覚えています。私が間違っていなければ、Phil が提案した解決策は機能しません (Android の一部のバージョンでは?)。
現在、次のアプローチを使用しています。
- onSaveInstanceState で、WebView の現在のスクロール位置を保存します。
outState.putInt(EXTRA_SCROLL_POSITION, webView.getScrollY());
onCreate で、savedInstanceState から最後のスクロール位置を取得し、カスタム 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()
を返すメソッドと、状態を復元Parcelable
するメソッドがあります。onRestoreInstanceState(Parcelable state)
正しく思い出せば、保存された状態にはスクロール位置が含まれます。必要なのonSaveInstanceState()
は、フラグメントのonSaveInstanceState
メソッドで WebView の呼び出しから取得した 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 メソッドで復元してみてください。Scrollview thr xml を使用しましたか?はいの場合は、そのビューへの参照を取得し、アクティビティの復元時にスクロールビューの位置を保存された状態に設定します。これが役立つことを願っています。