it-swarm.com.ru

Как предотвратить прокрутку прокрутки в веб-просмотр после загрузки данных?

Так что у меня есть захватывающая проблема. Несмотря на то, что я не прокручиваю свое представление вручную или программно, мой 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 после его загрузки. Как мне это предотвратить?

102
Navarr

Вы можете просто добавить это в свой LinearLayout: Android: focusableInTouchMode = "true". Меня устраивает.

 <LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:focusableInTouchMode="true"
    Android:orientation="vertical" >
38
Peter Nguyen

У меня была та же проблема, после нескольких часов попыток реализовать несколько идей, что в итоге мне помогло, просто добавив атрибут descendantFocusability в ScrollView, содержащий LinearLayout со значением blockDescendants. В твоем случае:

<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:orientation="vertical"
    Android:descendantFocusability="blocksDescendants" >

С тех пор не было проблемы снова :)

264
mjp66

Вы должны создать новый класс extension 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.

25
user1417127

Добавление этих строк в основной макет решает проблему

Android:descendantFocusability="blocksDescendants"
5
arun-r

Как это:

<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" >
4
YaC King

Наверное, есть люди, у которых та же проблема, что и у меня, поэтому я помогу.

Я пытался поместить Android: downndantFocusability = "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: downndantFocusability = "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 */
3
Firecat

Мне пришлось использовать полное имя для 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" >
0
Cathal Coffey