申明:本文部分内容为网络相关资料整理,并结合本人实际工作总结而成。请引用或者转载注明出处,对于文章内容有疑问请留言。
一、问题
今天项目中遇到个小问题,就是在vivo手机中,一个ScrollView页面初始化之后,不在顶部,在其他如荣耀、三星机型上就没有这种问题。考虑到,这中间应该是有机型不同的因素,但是能不能从代码层面进行解决呢?
演示问题的示例代码如下:
<ScrollView
android:background="@color/cFFF0F0F0"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_width="match_parent"
android:overScrollMode="never"
android:scrollbarThumbVertical="@drawable/shape_scroll_bar"
android:scrollbars="vertical">
<LinearLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical">
<GridView
android:id="@+id/gv_base_info"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:numColumns="3"></GridView>
</LinearLayout>
</ScrollView>
二、分析
导致ScrollView初始化不在顶部原因可能不止一个,在本人实际项目中,布局文件中的ScrollView还嵌套了两个GridView,并且ScrollView也是在初始化时就处于GridView区域。由此,推测是不是GridView搞了什么鬼?也就是说,ScrollView最上面的View未能获取焦点?
三、解决
1.根据分析,有可能是GridView获取了焦点,导致ScrollView处于GridView区域。于是,给GridView禁止获取焦点。所以在代码中:
mGridView.setFocusable(false);
并且,两个GridView都需要这样设置。
2.同时,我们让ScollView中最顶部的View(如LinearLayout)获取焦点:
<ScrollView
android:background="@color/cFFF0F0F0"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_width="match_parent"
android:overScrollMode="never"
android:scrollbarThumbVertical="@drawable/shape_scroll_bar"
android:scrollbars="vertical">
<LinearLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
android:focusable="true"
android:focusableInTouchMode="true">
<GridView
android:id="@+id/gv_base_info"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:numColumns="3"></GridView>
</LinearLayout>
</ScrollView>
或者:
linearLayout.setFocusable(true);
linearLayout.setFocusableInTouchMode(true);