Sempre que eu começo esta atividade, ela sempre começa do fundo do poço - rolando até o fim. Eu não estou fazendo nada estranho na atividade OnCreate (ou em qualquer lugar) que eu esperaria mudar a posição do scroll. Eu tentei definir o foco para o controle focalizável superior e o método scrollto, mas nenhum deles está funcionando. Além disso, nenhuma das minhas outras atividades tem esse problema. Aqui está o 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>
Respostas:
Quando o Android inicia uma atividade, algum controle precisa assumir o foco. Quando não há um controle designado para obter o foco, o sistema escolhe o primeiro controle elegível que deseja o foco. Se você definir a seguinte propriedade em seu LinearLayout -
android:focusableInTouchMode="true"
seuLinearLayout
foco estará no início e sua atividade não rolará paraEditText
a parte inferior.fonte
LinearLayout
interior doScrollView
, não na própria visualização de rolagem.Em vez de poluir itens em seu layout, você pode adicionar isso à sua Atividade / Aula:
Desta forma, não é um elemento dentro do seu scrollView obtendo o foco, é o seu scrollView como um contêiner que obtém o primeiro foco, movendo-se para a visão filha depois disso.
fonte
Você pode tentar este código:
[N: B] [link de referência] 1
fonte
Junto com o que devmiles.com disse.
Se você chamar requestLayout () em uma visualização na parte inferior de seu layout linear, isso pode roubar o foco de sua visualização superior. Portanto, basta chamar requestFocus () na visualização superior no layout linear depois de chamar requestLayout () em uma visualização inferior.
fonte
Você já tentou usar o método fullScroll? Http: //developer.android.com/reference/android/widget/ScrollView.html#fullScroll (int)
fonte
Para o desenvolvimento do Xamarin Android, se você deseja fazer a solução @Graeme, então:
fonte
Basta torná-lo não focalizável em onCreate ()
E use
e não rolará para baixo para Editar texto na próxima vez, um fragmento ou atividade for criada.
fonte
Adicione essas duas linhas em seu
ScrollView
fonte
Não sei por que, mas você pode experimentar
no seu
onCreate
para rolar manualmente para onde você quiser.fonte
scrollView.requestFocus(View.FOCUS_UP)
resolveu meu problema quando queria que a vista de cima ficasse visível. Especificar o parâmetro de direção para o métodorequestFocus(int direction)
é uma boa maneira de controlar aScrollView
posição. Mais detalhes aqui .fonte
No meu caso eu tinha um
VideoView
dentro de umaConstraintLayout
dentro de umaScrollView
. EleVideoView
sempre roubou o foco e há problemas com ele . A solução é usar aTextureView
. Espero que isso ajude alguém, me custou pelo menos uma hora :)fonte