Cada vez que comienzo esta actividad, siempre comienza tocando fondo: se desplaza hasta el final. No estoy haciendo nada extraño en la actividad OnCreate (o en cualquier otro lugar) que esperaría cambiar la posición de desplazamiento. He intentado establecer el enfoque en el control enfocable superior y en el método scrollto, pero ninguno de ellos funciona. Además, ninguna de mis otras actividades tiene este problema. Aquí está el diseño:
<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>
Respuestas:
Cuando Android inicia una actividad, es necesario centrarse en cierto control. Cuando no hay un control designado para enfocarse, el sistema elige el primer control elegible que desea enfocarse. Si se establece la siguiente propiedad en su LinearLayout -
android:focusableInTouchMode="true"
suLinearLayout
se centrará en el arranque y el nivel de actividad que se desplaza aEditText
la parte inferior.fuente
LinearLayout
interior delScrollView
, no a la vista de desplazamiento en sí.En lugar de contaminar elementos en su diseño, puede agregar esto a su Actividad / Clase:
De esta manera, no es un elemento dentro de su scrollView que se enfoca, es su scrollView como contenedor el que obtiene el primer enfoque, moviéndose a la vista secundaria después de esto.
fuente
Puedes probar este código:
[N: B] [enlace de referencia] 1
fuente
Junto con lo que dijo devmiles.com.
Si llama a requestLayout () en una vista en la parte inferior de su diseño lineal, podría robar el foco de su vista superior. Así que simplemente llame a requestFocus () en la vista más superior en el diseño lineal después de llamar a requestLayout () en una vista inferior.
fuente
¿Ha intentado utilizar el método fullScroll? Http: //developer.android.com/reference/android/widget/ScrollView.html#fullScroll (int)
fuente
Para el desarrollo de Xamarin Android, si desea hacer la solución @Graeme, entonces:
fuente
Simplemente haz que no se pueda enfocar en onCreate ()
y use
y no se desplazará hacia abajo hasta Edittext la próxima vez que se cree un fragmento o actividad.
fuente
Agregue estas dos líneas en su
ScrollView
fuente
No sé por qué, pero podrías experimentar con
en tu
onCreate
para desplazarlo manualmente hasta donde quieras que esté.fuente
scrollView.requestFocus(View.FOCUS_UP)
resolvió mi problema cuando quería que la vista superior fuera visible. Especificar el parámetro de dirección al métodorequestFocus(int direction)
es una buena forma de controlar laScrollView
posición. Más detalles aquí .fuente
En mi caso tenía un
VideoView
interior unConstraintLayout
interior aScrollView
. ElVideoView
siempre estaba robando el foco, y hay problemas con él . La solución es utilizar unTextureView
. Espero que esto ayude a alguien, me costó al menos una hora :)fuente