Kapanpun saya memulai aktivitas ini, itu selalu dimulai dari bawah - digulir ke bawah. Saya tidak melakukan sesuatu yang aneh dalam aktivitas OnCreate (atau di mana pun dalam hal ini) yang saya harapkan untuk mengubah posisi gulir. Saya telah mencoba mengatur fokus ke kontrol terfokus paling atas, dan metode scrollto, tetapi tidak satupun dari mereka berfungsi. Selain itu, tidak ada aktivitas saya yang memiliki masalah ini. Berikut tata letaknya:
<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>
Jawaban:
Saat Android memulai suatu aktivitas, beberapa kontrol perlu difokuskan. Jika tidak ada kontrol yang ditunjuk untuk mengambil fokus, sistem akan memilih kontrol pertama yang memenuhi syarat yang menginginkan fokus. Jika Anda menyetel properti berikut di LinearLayout Anda -
android:focusableInTouchMode="true"
AndaLinearLayout
akan difokuskan pada awal dan aktivitas Anda tidak akan bergulir keEditText
bawah.sumber
LinearLayout
dalamScrollView
, bukan ke tampilan gulir itu sendiri.Alih-alih mencemari item dalam tata letak Anda, Anda dapat menambahkan ini ke Aktivitas / Kelas Anda:
ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView); scrollView.setFocusableInTouchMode(true); scrollView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
Dengan cara ini, bukan elemen dalam scrollView Anda yang mendapatkan fokus, scrollView Anda sebagai wadah yang mendapatkan fokus pertama, pindah ke tampilan anak setelah ini.
sumber
Anda dapat mencoba kode ini:
scroller.post(new Runnable() { public void run() { scroller.fullScroll(ScrollView.FOCUS_DOWN); } });
[N: B] [tautan referensi] 1
sumber
Seiring dengan apa yang dikatakan devmiles.com.
Jika Anda memanggil requestLayout () pada tampilan di bagian bawah tata letak linier Anda, hal itu mungkin mencuri fokus dari tampilan paling atas Anda. Jadi panggil saja requestFocus () pada tampilan paling atas dalam layout linier setelah memanggil requestLayout () pada tampilan yang lebih rendah.
sumber
Sudahkah Anda mencoba menggunakan metode fullScroll? Http: //developer.android.com/reference/android/widget/ScrollView.html#fullScroll (int)
yourScrollView.fullScroll(ScrollView.FOCUS_UP);
sumber
Untuk pengembangan Xamarin Android, jika Anda ingin melakukan solusi @Graeme maka:
// Set Focus to ScrollView ScrollView scrollView = (ScrollView)FindViewById(Resource.Id.scrollView); scrollView.FocusableInTouchMode = true; scrollView.DescendantFocusability = Android.Views.DescendantFocusability.BeforeDescendants;
sumber
Buat saja tidak bisa difokuskan di onCreate ()
editText.setFocusable(false);
dan gunakan
editText.setOnClickListener(new ....){ ...... editText.setFocusable(true); editText.setFocusableInTouchMode(true); editText.requestFocus(); showSoftKeyboard(); //Use InputMethodManager to open soft Keyboard ...... };
dan tidak akan menggulir ke bawah ke Teks Ed di lain waktu, sebuah fragmen atau aktivitas dibuat.
sumber
Tambahkan dua baris ini di file
ScrollView
android:focusableInTouchMode="true" android:descendantFocusability="blocksDescendants"
sumber
Saya tidak tahu mengapa tetapi Anda bisa bereksperimen
ScrollView sv = (ScrollView) findViewById(R.id.scroll); sv.scrollTo(0,0);
di Anda
onCreate
untuk menggulirnya secara manual ke tempat yang Anda inginkan.sumber
scrollView.requestFocus(View.FOCUS_UP)
memecahkan masalah saya ketika saya ingin tampilan atas terlihat. Menentukan parameter arah ke metoderequestFocus(int direction)
adalah cara yang baik untuk mengontrolScrollView
posisi. Lebih lengkapnya di sini .sumber
Dalam kasus saya, saya memiliki a
VideoView
inside aConstraintLayout
inside aScrollView
. ItuVideoView
selalu mencuri fokus, dan ada masalah dengannya . Solusinya adalah dengan menggunakan aTextureView
. Semoga ini membantu seseorang, setidaknya saya menghabiskan satu jam :)sumber