Whenever I start this activity, it always starts bottomed out--scrolled all the way to the bottom. I am not doing anything weird in the activity OnCreate (or anywhere for that matter) that I would expect to change the scroll position. I have tried setting focus to the topmost focusable control, and the scrollto method, but neither of them are working. Besides, none of my other activities has this problem. Here's the 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>
When Android starts an activity, some control needs to take focus. When there's no designated control to take focus, the system chooses the first eligible control that wants focus. If you set the following property in your LinearLayout - android:focusableInTouchMode="true"
your LinearLayout
will be focused on start and your activity won't scroll to EditText
in the bottom.
Instead of polluting items in your layout, you can add this into your Activity/Class:
ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView); scrollView.setFocusableInTouchMode(true); scrollView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
This way it isn't an element within your scrollView getting focus, it's your scrollView as a container which get's the first focus, moving onto the child view's after this.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With