Wenn ich diese Aktivität starte, beginnt sie immer auf dem Boden - ganz nach unten gescrollt. Ich mache nichts Seltsames in der Aktivität OnCreate (oder irgendwo sonst), von der ich erwarten würde, dass sie die Bildlaufposition ändert. Ich habe versucht, den Fokus auf das oberste fokussierbare Steuerelement und die Scrollto-Methode zu setzen, aber keines von beiden funktioniert. Außerdem hat keine meiner anderen Aktivitäten dieses Problem. Hier ist das Layout:
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scroll"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/edit_refresh_update_header"
android:textSize="18sp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="\n"
android:textSize="4sp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Variable:"
android:textSize="18sp"/>
<Spinner
android:id="@+id/edit_refresh_variables_spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="\n"
android:textSize="4sp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Network:"
android:textSize="18sp"/>
<RadioGroup
android:id="@+id/widget1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical">
<RadioButton
android:text="Web"
android:id="@+id/edit_refresh_update_rb_web"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="NetRadioButtonSelected"
android:checked="true"/>
<RadioButton
android:text="Socket Server"
android:id="@+id/edit_refresh_update_rb_socket_server"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="NetRadioButtonSelected"/>
</RadioGroup>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="\n"
android:textSize="4sp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Socket server request type:"
android:textSize="18sp"/>
<Spinner
android:id="@+id/edit_refresh_socket_server_req_types_spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="\n"
android:textSize="4sp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Socket server body:"
android:textSize="18sp"/>
<EditText
android:layout_width="match_parent"
android:id="@+id/edit_refresh_update_ss_body"
android:layout_height="wrap_content"
android:enabled="false"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="\n"
android:textSize="4sp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Url:"
android:textSize="18sp"/>
<EditText
android:layout_width="match_parent"
android:id="@+id/edit_refresh_update_url"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="\n"
android:textSize="4sp"/>
<Button
android:text="Save refresh update"
android:id="@+id/edit_refresh_save_btn"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:layout_marginBottom="20dp"
android:layout_alignParentBottom="true"
android:onClick="SaveRefreshUpdate">
</Button>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="\n"
android:textSize="4sp"/>
</LinearLayout>
</ScrollView>
Antworten:
Wenn Android eine Aktivität startet, muss eine gewisse Kontrolle den Fokus haben. Wenn es kein bestimmtes Steuerelement gibt, das den Fokus übernehmen soll, wählt das System das erste in Frage kommende Steuerelement aus, das den Fokus haben soll. Wenn Sie die folgende Eigenschaft in Ihrem Linearlayout einstellen -
android:focusableInTouchMode="true"
IhrLinearLayout
auf Start und Ihre Aktivität wird nicht Rolle zu konzentrierenEditText
im Boden.quelle
LinearLayout
InnerenScrollView
und nicht in der Bildlaufansicht selbst hinzuzufügen .Anstatt Elemente in Ihrem Layout zu verschmutzen, können Sie dies zu Ihrer Aktivität / Klasse hinzufügen:
Auf diese Weise ist es kein Element in Ihrer scrollView, das den Fokus erhält, sondern Ihre scrollView als Container, der den ersten Fokus erhält und danach in die untergeordnete Ansicht wechselt.
quelle
Sie können diesen Code ausprobieren:
[N: B] [Referenzlink] 1
quelle
Zusammen mit dem, was devmiles.com gesagt hat.
Wenn Sie requestLayout () für eine Ansicht am unteren Rand Ihres linearen Layouts aufrufen, wird möglicherweise der Fokus aus Ihrer obersten Ansicht gestohlen. Rufen Sie einfach requestFocus () in der obersten Ansicht des linearen Layouts auf, nachdem Sie requestLayout () in einer unteren Ansicht aufgerufen haben.
quelle
Haben Sie versucht, die fullScroll-Methode zu verwenden? Http: //developer.android.com/reference/android/widget/ScrollView.html#fullScroll (int)
quelle
Wenn Sie für die Xamarin Android-Entwicklung eine @ Graeme-Lösung ausführen möchten, gehen Sie wie folgt vor:
quelle
Machen Sie es einfach in onCreate () nicht fokussierbar
und verwenden
Beim nächsten Mal wird kein Fragment oder keine Aktivität erstellt.
quelle
Fügen Sie diese beiden Zeilen in Ihre
ScrollView
quelle
Ich weiß nicht warum, aber du könntest damit experimentieren
in Ihrer
onCreate
blättern sie manuell , wo Sie , wie es zu sein.quelle
scrollView.requestFocus(View.FOCUS_UP)
löste mein Problem, als ich wollte, dass die Draufsicht sichtbar ist. Die Angabe eines Richtungsparameters für die MethoderequestFocus(int direction)
ist eine gute Möglichkeit, dieScrollView
Position zu steuern . Weitere Details hier .quelle
In meinem Fall hatte ich ein
VideoView
Inside aConstraintLayout
Inside aScrollView
. Das hatVideoView
immer den Fokus gestohlen, und es gibt Probleme damit . Die Lösung besteht darin, a zu verwendenTextureView
. Hoffentlich hilft das jemandem, es hat mich mindestens eine Stunde gekostet :)quelle