J'ai donc un problème fascinant. Bien que je ne fasse pas défiler ma vue manuellement ou par programme, ma WebView fait automatiquement défiler la vue après le chargement des données à l'intérieur.
J'ai un fragment dans un viewpager. Lorsque je charge le pager pour la première fois, il fonctionne comme prévu et tout est affiché. Mais une fois que je "retourne la page", les données se chargent et la WebView apparaît en haut de la page, cachant les vues au-dessus, ce qui n'est pas souhaitable.
Quelqu'un sait-il comment empêcher que cela se produise?
Ma mise en page ressemble à ceci:
<?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>
Je ne me concentre pas non plus sur quoi que ce soit. Par défaut, il semble faire défiler automatiquement vers WebView après son chargement. Comment éviter cela?
Réponses:
Vous pouvez simplement l'ajouter à votre LinearLayout: android: focusableInTouchMode = "true". Ça marche pour moi.
la source
J'ai eu le même problème, après des heures à essayer plusieurs idées, ce qui a finalement fonctionné pour moi était simplement d'ajouter l'
descendantFocusability
attribut au ScrollView contenant LinearLayout, avec la valeurblocksDescendants
. Dans ton cas:Je n'ai plus eu le problème depuis.
la source
RecyclerView
. Votre solution fonctionne également dans ce cas :)Vous devez créer une nouvelle classe extend ScrollView, puis Override requestChildFocus:
Puis dans votre mise en page xml, en utilisant:
Ça marche pour moi. Le ScrollView ne défilera plus automatiquement vers WebView.
la source
public ExtendedScrollView(Context context) { super(context); } public ExtendedScrollView( Context context, AttributeSet attributeSet) { super(context, attributeSet); } public ExtendedScrollView( Context context, AttributeSet attributeSet, int defStyle) { super(context, attributeSet, defStyle); }
L'ajout de ces lignes dans la mise en page principale résout le problème
la source
Comme ça:
la source
Il y a probablement des gens qui ont le même problème que moi, alors je vais vous aider.
J'essayais de mettre android: descendantFocusability = "beforeDescendants" dans mon ScrollView principal comme suit:
et cela ne fonctionnait pas, j'ai donc dû faire d'un RelativeLayout le parent de ScrollView, et placer l' androïde: descendantFocusability = "beforeDescendants" dans le parent également.
Je l'ai donc résolu en procédant comme suit:
la source
J'ai dû utiliser le nom complet pour MyScrollView, sinon j'ai eu une exception gonflée.
la source