Ich habe also ein faszinierendes Problem. Trotz der Tatsache, dass ich meine Ansicht nicht manuell oder programmgesteuert scrolle, wird meine WebView automatisch gescrollt, nachdem die darin enthaltenen Daten geladen wurden.
Ich habe ein Fragment in einem Viewpager. Wenn ich den Pager zum ersten Mal lade, funktioniert er wie erwartet und alles wird angezeigt. Sobald ich die Seite "umblättere", werden die Daten geladen und das WebView wird oben auf der Seite angezeigt, wodurch die Ansichten darüber ausgeblendet werden, was unerwünscht ist.
Weiß jemand, wie man das verhindert?
Mein Layout sieht so aus:
<?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>
Ich konzentriere mich auch nicht auf irgendetwas. Standardmäßig scheint es nach dem Laden automatisch zum WebView zu scrollen. Wie verhindere ich das?
Antworten:
Sie können dies einfach zu Ihrem LinearLayout hinzufügen: android: focusableInTouchMode = "true". Für mich geht das.
quelle
Nachdem ich stundenlang mehrere Ideen ausprobiert hatte, hatte ich das gleiche Problem. Schließlich funktionierte es für mich, einfach das
descendantFocusability
Attribut mit dem Wert zu den ScrollViews hinzuzufügen , die LinearLayout enthaltenblocksDescendants
. In deinem Fall:Das Problem ist seitdem nicht mehr aufgetreten.
quelle
RecyclerView
auf. Ihre Lösung funktioniert auch in diesem Fall :)Sie sollten eine neue Klasse erstellen, ScrollView erweitern und dann requestChildFocus überschreiben:
Verwenden Sie dann in Ihrem XML-Layout Folgendes:
Das ist für mich in Ordnung. Die ScrollView scrollt nicht mehr automatisch zur WebView.
quelle
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); }
Das Hinzufügen dieser Zeile im Hauptlayout löst das Problem
quelle
So was:
quelle
Wahrscheinlich gibt es Leute, die das gleiche Problem haben, das ich hatte, also werde ich helfen.
Ich habe versucht, android: descantFocusability = "beforeDescendants" wie folgt in meine ScrollView einzufügen:
und es funktionierte nicht, also musste ich ein RelativeLayout zum übergeordneten Element der ScrollView erstellen und das android: descantFocusability = "beforeDescendants" auch im übergeordneten Element platzieren.
Also habe ich es folgendermaßen gelöst:
quelle
Ich musste den vollständig qualifizierten Namen für MyScrollView verwenden, sonst bekam ich eine Inflate-Ausnahme.
quelle