Всякий раз, когда я начинаю это действие, оно всегда начинается с самого низа - прокручивается до самого низа. Я не делаю ничего странного в действии 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
вниз.источник
LinearLayout
внутриScrollView
, а не в само представление прокрутки.Вместо того, чтобы загрязнять элементы в вашем макете, вы можете добавить это в свой 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.
Если вы вызываете 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;
источник
Просто сделайте это не фокусируемым в onCreate ()
editText.setFocusable(false);
и использовать
editText.setOnClickListener(new ....){ ...... editText.setFocusable(true); editText.setFocusableInTouchMode(true); editText.requestFocus(); showSoftKeyboard(); //Use InputMethodManager to open soft Keyboard ...... };
и он не будет прокручиваться до Edittext в следующий раз, когда будет создан фрагмент или действие.
источник
Добавьте эти две строки в свой
ScrollView
android:focusableInTouchMode="true" android:descendantFocusability="blocksDescendants"
источник
Я не знаю почему, но вы можете поэкспериментировать с
ScrollView sv = (ScrollView) findViewById(R.id.scroll); sv.scrollTo(0,0);
в вашем,
onCreate
чтобы вручную прокрутить его туда, где вы хотите.источник
scrollView.requestFocus(View.FOCUS_UP)
решил мою проблему, когда я хотел, чтобы был виден вид сверху. Указание параметра направления для методаrequestFocus(int direction)
- хороший способ контролироватьScrollView
положение. Подробнее здесь .источник
В моем случае я был
VideoView
внутриConstraintLayout
внутриScrollView
. ОниVideoView
всегда отвлекали внимание, и с этим есть проблемы . Решение - использоватьTextureView
. Надеюсь, это кому-то поможет, это стоило мне как минимум часа :)источник