Почему моя андроидная активность всегда начинается прокруткой вниз?
Всякий раз, когда я начинаю эту деятельность, она всегда начинает снижаться - прокручивается до конца. Я не делаю ничего странного в деятельности OnCreate (или где-нибудь в этом отношении), что я ожидаю изменить положение прокрутки. Я попытался настроить фокус на самый верхний настраиваемый элемент управления и метод scrollto, но ни один из них не работает. Кроме того, ни одна из моих других задач не имеет этой проблемы. Здесь макет:
<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>
Когда Android начинает свою деятельность, некоторый элемент управления должен сфокусироваться. Когда нет назначенного управления для фокусировки, система выбирает первый подходящий элемент управления, который хочет фокусироваться.
Если вы установили следующее свойство в LinearLayout - android:focusableInTouchMode="true"
, ваш LinearLayout
будет сфокусирован на запуске, и ваша активность не будет прокручиваться до EditText
внизу.
Вместо загрязняющих элементов в вашем макете вы можете добавить это в свой Activity/Class:
ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView);
scrollView.setFocusableInTouchMode(true);
scrollView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
Таким образом, это не элемент внутри вашего scrollView, получающего фокус, это ваш scrollView как контейнер, который получает первый фокус, после этого перемещаясь по дочернему виду.
Вы можете попробовать этот код:
scroller.post(new Runnable() {
public void run() {
scroller.fullScroll(ScrollView.FOCUS_DOWN);
}
});
[N: B] [ссылка ссылки] 1
Наряду с тем, что сказал devmiles.com.
Если вы установили следующее свойство в LinearLayout - android: focusableInTouchMode = "true", ваш LinearLayout будет сфокусирован на запуске, и ваша активность не будет прокручиваться до EditText в нижней части.
Если вы вызываете requestLayout() в представлении внизу своей линейной компоновки, он может украсть фокус с вашего максимального вида. Поэтому просто вызовите функцию requestFocus() в верхней части экрана в линейном макете после вызова функции requestLayout() в нижнем виде.
Вы пробовали использовать метод fullScroll? http://developer.android.com/reference/android/widget/ScrollView.html#fullScroll (int)
yourScrollView.fullScroll(ScrollView.FOCUS_UP);
Для разработки Xamarin Android, если вы хотите сделать решение @Graeme, выполните следующие действия:
// Set Focus to ScrollView
ScrollView scrollView = (ScrollView)FindViewById(Resource.Id.scrollView);
scrollView.FocusableInTouchMode = true;
scrollView.DescendantFocusability = Android.Views.DescendantFocusability.BeforeDescendants;
Я не знаю, почему, но вы можете экспериментировать с
ScrollView sv = (ScrollView) findViewById(R.id.scroll);
sv.scrollTo(0,0);
в вашем onCreate
, чтобы вручную прокрутить его туда, где вам нравится.