Halo gaes, kesempatan kali ini saya mau berbagi pengalaman saat bermain-main dengan scrollview android, dimana saat saya beralih dari activity ke activity lainnya. Anehnya ketika saya masuk ke sebuah activity yang ada scrollviewnya focus pertama kali yang ditampilkan adalah konten di tengah.. jadi istilah jawanya agak mlotrok… ibarat pakai celana itu mlotrok.. kwkwwk njirr, masak setiap kali buka activity ini user harus scroll up dulu kan terkesan jelek banget ya UXnya.
Oke singkat cerita seperti biasa, saya melakukan jurus google fu
dan ketemu tuh solusinya. Oke kita highlight terlebih dahulu kode di activity yang saya maksud diatas, misalnya seperti ini.
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollViewLuogo"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff" >
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="150dp"
android:layout_height="100dp"
android:layout_marginLeft="14dp"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
android:adjustViewBounds="true"
android:maxHeight="200dp"
android:maxWidth="200dp"
android:scaleType="fitXY"
android:src="@android:drawable/ic_menu_gallery" />
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="vertical" >
<TextView
android:id="@+id/nomeTVActivityLuogo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textSize="17sp"
android:textColor="#005788" />
<TextView
android:id="@+id/indirizzoTVActivityLuogo"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/linearLayout2"
android:layout_marginTop="10dp"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageViewMappaLuogo"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_marginBottom="10dp"
android:layout_marginLeft="14dp"
android:layout_marginRight="14dp"
android:layout_marginTop="5dp"
android:scaleType="fitXY"
android:src="@drawable/sfondo_mappa" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="14dp"
android:text="Immagini"
android:textColor="#97d6f9" />
<View
android:layout_width="fill_parent"
android:layout_height="2dp"
android:layout_marginLeft="14dp"
android:layout_marginRight="14dp"
android:layout_marginTop="5dp"
android:background="#97d6f9" />
<com.example.mappine.ExpandableHeightGridView
android:id="@+id/gridViewLuogo"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginBottom="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
android:numColumns="3" >
</com.example.mappine.ExpandableHeightGridView>
</LinearLayout>
</RelativeLayout>
Saya sudah mencoba menggunakan beberapa fungsi yang saya pikir itu relevan sekali untuk problem solving kasus saya itu, seperti scrollView.fullScroll(ScrollView.FOCUS_UP)
tapi hasilnya nihil, saya juga sempat coba cara ini scrollView.scrollTo(0, 0)
tapi hasilnya masih sama saja.
The Solution
Pada dasarnya masalahnya adalah terletak di child GridView / ListView yang secara otomatis bakal request fokus ke induknya, terjadi saat seluruh layout completed terender, jadi menangani behavior ini sangat tidak efektif jika dilakukan secara programatik, sehingga cara paling ampuh singkat padat dan jelas dalah men-disable fokus.
listView.setFocusable(false)