だから私には魅力的な問題があります。ビューを手動またはプログラムでスクロールしていませんが、WebViewは内部のデータが読み込まれた後に自動的にスクロールされます。
ビューページャーにフラグメントがあります。最初にページャーをロードすると、期待どおりに機能し、すべてが表示されます。しかし、「ページをめくる」と、データが読み込まれ、WebViewがページの上部にポップアップして、その上のビューを非表示にします。これは望ましくありません。
誰もこれを防ぐ方法を知っていますか?
私のレイアウトは次のようになります:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="@color/background" >
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical" >
<TextView
Android:id="@+id/article_title"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_marginRight="10dp"
Android:layout_marginLeft="10dp"
Android:layout_marginTop="10dp"
Android:layout_marginBottom="2dp"
Android:text="Some Title"
Android:textAppearance="?android:attr/textAppearanceLarge"
Android:textColor="@color/article_title"
Android:textStyle="bold" />
<LinearLayout
Android:id="@+id/LL_Seperator"
Android:layout_width="fill_parent"
Android:layout_height="1dp"
Android:layout_marginLeft="10dp"
Android:layout_marginRight="10dp"
Android:layout_marginTop="5dp"
Android:layout_marginBottom="5dp"
Android:background="@color/text"
Android:orientation="horizontal" >
</LinearLayout>
<WebView
Android:id="@+id/article_content"
Android:layout_width="match_parent"
Android:layout_marginRight="10dp"
Android:layout_marginLeft="10dp"
Android:layout_height="wrap_content" />
<TextView
Android:id="@+id/article_link"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_marginBottom="5dp"
Android:layout_marginTop="5dp"
Android:layout_marginRight="10dp"
Android:layout_marginLeft="10dp"
Android:text="View Full Article"
Android:textColor="@color/article_title"
Android:textStyle="bold" />
</LinearLayout>
</ScrollView>
また、私は何にも焦点を当てていません。デフォルトでは、ロード後にWebViewに自動的にスクロールするようです。これを防ぐにはどうすればよいですか?
これをLinearLayoutに追加するだけです:Android:focusableInTouchMode = "true"。わたしにはできる。
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:focusableInTouchMode="true"
Android:orientation="vertical" >
私は同じ問題を抱えていました。いくつかのアイデアを何時間も試した後、最終的に働いたのは、descendantFocusability
属性を持つLinearLayoutを含むScrollViewにblockDescendants
属性を追加するだけでした。あなたの場合:
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical"
Android:descendantFocusability="blocksDescendants" >
以来、問題は再発していません:)
ScrollViewを拡張する新しいクラスを作成してから、requestChildFocusをオーバーライドする必要があります。
public class MyScrollView extends ScrollView {
@Override
public void requestChildFocus(View child, View focused) {
if (focused instanceof WebView )
return;
super.requestChildFocus(child, focused);
}
}
次に、xmlレイアウトで、次を使用します。
<MyScrollView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="@color/background" >
それは私のために働く。 ScrollViewはWebViewに自動スクロールしなくなります。
メインレイアウトにこれらの行を追加すると、問題が解決します
Android:descendantFocusability="blocksDescendants"
このような:
<com.ya.test.view.MyScrollView
Android:layout_width="match_parent"
Android:layout_height="match_parent" >
<FrameLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:descendantFocusability="beforeDescendants"
Android:focusable="true"
Android:focusableInTouchMode="true" >
おそらく私が抱えていたのと同じ問題を抱えている人がいるので、私は手伝います。
私はAndroid:descendantFocusability = "beforeDescendants"をメインのScrollViewに次のように配置しようとしていました。
<ScrollView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:descendantFocusability="beforeDescendants">
/*my linearlayout or whatever to hold the views */
それが機能していなかったので、RelativeLayoutをScrollViewの親にし、親にもAndroid:descendantFocusability = "beforeDescendants"を配置する必要がありました。
だから私はそれを次のようにして解決しました:
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:descendantFocusability="blocksDescendants">
<ScrollView
Android:layout_width="match_parent"
Android:layout_height="match_parent">
/*my linearlayout or whatever to hold the views */
MyScrollViewには完全修飾名を使用する必要がありました。そうしないと、インフレ例外が発生しました。
<com.mypackagename.MyScrollView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="@color/background" >