NestedScrollView內巢狀RecyclerView,開啟頁面時不顯示在頂部的解決方法
阿新 • • 發佈:2018-12-16
由於新需求要求:個人資訊頁面最頂部要增加兩條姓氏全拼,姓名全拼,需求文件如下:
之前佈局用的是NestedScrollView內嵌RecyclerView,RecyclerView位於子佈局的第一個,顯示效果上沒有什麼問題。xml佈局如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/bg_grey" android:orientation="vertical"> <include layout="@layout/comment_back_toolbar" /> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.RecyclerView android:id="@+id/rv_personal_center" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/rgbefeff3" android:nestedScrollingEnabled="false" android:overScrollMode="never" /> </LinearLayout> </android.support.v4.widget.NestedScrollView> </LinearLayout>
本來也想把新需求的兩條用RecyclerView,但是佈局相差太多,邏輯處理上比較繁瑣,後來決定在RecyclerView上面增加兩個子佈局用來顯示姓氏全拼,姓名全拼,xml佈局如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/bg_grey" android:orientation="vertical"> <include layout="@layout/comment_back_toolbar" /> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <RelativeLayout android:id="@+id/personal_layout_lastname" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="30px" android:background="@color/white" > <TextView android:id="@+id/personal_layout_lastname_tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="姓氏全拼" android:textSize="44px" android:paddingLeft="44px" android:layout_marginTop="50px" android:layout_marginBottom="50px" android:textColor="@color/rgb666666"/> <ImageView android:id="@+id/personal_layout_lastname_img_arrow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:paddingRight="44px" android:layout_alignParentRight="true" android:src="@mipmap/icon_edit"/> <com.sinosig.ygqd.widget.ClearableEditTextWithIcon android:id="@+id/personal_layout_lastname_fix_info" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerVertical="true" android:layout_marginLeft="16dp" android:layout_marginRight="4dp" android:visibility="gone" android:inputType="text" android:maxLength="50" android:layout_toLeftOf="@+id/personal_layout_lastname_img_arrow" android:layout_toRightOf="@id/personal_layout_lastname_tv_title" android:background="@color/transparent" android:gravity="right|center_vertical" android:imeOptions="actionDone" android:lines="1" android:singleLine="true" android:textColor="@color/black" android:textSize="16sp" /> <TextView android:id="@+id/personal_layout_lastname_tv_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="例:zhang" android:layout_toLeftOf="@+id/personal_layout_lastname_img_arrow" android:layout_toRightOf="@+id/personal_layout_lastname_tv_title" android:textSize="43px" android:gravity="right" android:textColor="@color/rgb999999" android:layout_centerVertical="true" android:layout_marginLeft="30px" android:layout_marginRight="30px" android:maxLines="1" android:maxLength="20" android:ellipsize="end" /> <View android:layout_width="match_parent" android:layout_height="2px" android:layout_marginLeft="44px" android:layout_alignParentBottom="true" android:background="@color/rgbe1e1e1" /> </RelativeLayout> <RelativeLayout android:id="@+id/personal_layout_firstname" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/white" > <TextView android:id="@+id/personal_layout_firstname_tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="名字全拼" android:textSize="44px" android:paddingLeft="44px" android:layout_marginTop="50px" android:layout_marginBottom="50px" android:textColor="@color/rgb666666"/> <ImageView android:id="@+id/personal_layout_firstname_img_arrow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:paddingRight="44px" android:layout_alignParentRight="true" android:src="@mipmap/icon_edit"/> <com.sinosig.ygqd.widget.ClearableEditTextWithIcon android:id="@+id/personal_layout_firstname_fix_info" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerVertical="true" android:layout_marginLeft="16dp" android:layout_marginRight="4dp" android:visibility="gone" android:inputType="text" android:maxLength="20" android:layout_toLeftOf="@+id/personal_layout_firstname_img_arrow" android:layout_toRightOf="@id/personal_layout_firstname_tv_title" android:background="@color/transparent" android:gravity="right|center_vertical" android:imeOptions="actionDone" android:lines="1" android:singleLine="true" android:textColor="@color/black" android:textSize="16sp" /> <TextView android:id="@+id/personal_layout_firstname_tv_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="例:meina" android:layout_toLeftOf="@+id/personal_layout_firstname_img_arrow" android:layout_toRightOf="@+id/personal_layout_firstname_tv_title" android:textSize="43px" android:gravity="right" android:textColor="@color/rgb999999" android:layout_centerVertical="true" android:layout_marginLeft="30px" android:layout_marginRight="30px" android:maxLines="1" android:maxLength="50" android:ellipsize="end" /> <View android:layout_width="match_parent" android:layout_height="2px" android:layout_marginLeft="44px" android:layout_alignParentBottom="true" android:background="@color/rgbe1e1e1" /> </RelativeLayout> <android.support.v7.widget.RecyclerView android:id="@+id/rv_personal_center" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/rgbefeff3" android:nestedScrollingEnabled="false" android:overScrollMode="never" /> </LinearLayout> </android.support.v4.widget.NestedScrollView> </LinearLayout>
修改完需求後,在手機開啟頁面並沒有達到預期的效果,佈局沒有顯示在頂部,如下圖所示:
需要向下滑動才顯示出來
通過在網上查詢,找到了解決方法,原來在這種情況下 RecyclerView會率先獲取焦點,因此就會造成開啟頁面時不是顯示在頂部,而是到一個RecyclerView上。
解決方案就是將焦點從新手動放給頂部的控制元件
在NestedScrollView的第一個子佈局中加入android:focusable="true"
android:focusableInTouchMode="true"
在第一個RelativeLayout中新增上面兩句程式碼,修改後xml佈局如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/bg_grey" android:orientation="vertical"> <include layout="@layout/comment_back_toolbar" /> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <RelativeLayout android:id="@+id/personal_layout_lastname" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="30px" android:background="@color/white" android:focusable="false" android:focusableInTouchMode="true" > <TextView android:id="@+id/personal_layout_lastname_tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="姓氏全拼" android:textSize="44px" android:paddingLeft="44px" android:layout_marginTop="50px" android:layout_marginBottom="50px" android:textColor="@color/rgb666666"/> <ImageView android:id="@+id/personal_layout_lastname_img_arrow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:paddingRight="44px" android:layout_alignParentRight="true" android:src="@mipmap/icon_edit"/> <com.sinosig.ygqd.widget.ClearableEditTextWithIcon android:id="@+id/personal_layout_lastname_fix_info" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerVertical="true" android:layout_marginLeft="16dp" android:layout_marginRight="4dp" android:visibility="gone" android:inputType="text" android:maxLength="50" android:layout_toLeftOf="@+id/personal_layout_lastname_img_arrow" android:layout_toRightOf="@id/personal_layout_lastname_tv_title" android:background="@color/transparent" android:gravity="right|center_vertical" android:imeOptions="actionDone" android:lines="1" android:singleLine="true" android:textColor="@color/black" android:textSize="16sp" tools:text="我哥哥" /> <TextView android:id="@+id/personal_layout_lastname_tv_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="例:zhang" android:layout_toLeftOf="@+id/personal_layout_lastname_img_arrow" android:layout_toRightOf="@+id/personal_layout_lastname_tv_title" android:textSize="43px" android:gravity="right" android:textColor="@color/rgb999999" android:layout_centerVertical="true" android:layout_marginLeft="30px" android:layout_marginRight="30px" android:maxLines="1" android:maxLength="20" android:ellipsize="end" /> <View android:layout_width="match_parent" android:layout_height="2px" android:layout_marginLeft="44px" android:layout_alignParentBottom="true" android:background="@color/rgbe1e1e1" /> </RelativeLayout> <RelativeLayout android:id="@+id/personal_layout_firstname" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/white" > <TextView android:id="@+id/personal_layout_firstname_tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="名字全拼" android:textSize="44px" android:paddingLeft="44px" android:layout_marginTop="50px" android:layout_marginBottom="50px" android:textColor="@color/rgb666666"/> <ImageView android:id="@+id/personal_layout_firstname_img_arrow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:paddingRight="44px" android:layout_alignParentRight="true" android:src="@mipmap/icon_edit"/> <com.sinosig.ygqd.widget.ClearableEditTextWithIcon android:id="@+id/personal_layout_firstname_fix_info" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerVertical="true" android:layout_marginLeft="16dp" android:layout_marginRight="4dp" android:visibility="gone" android:inputType="text" android:maxLength="20" android:layout_toLeftOf="@+id/personal_layout_firstname_img_arrow" android:layout_toRightOf="@id/personal_layout_firstname_tv_title" android:background="@color/transparent" android:gravity="right|center_vertical" android:imeOptions="actionDone" android:lines="1" android:singleLine="true" android:textColor="@color/black" android:textSize="16sp" tools:text="我哥哥" /> <TextView android:id="@+id/personal_layout_firstname_tv_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="例:meina" android:layout_toLeftOf="@+id/personal_layout_firstname_img_arrow" android:layout_toRightOf="@+id/personal_layout_firstname_tv_title" android:textSize="43px" android:gravity="right" android:textColor="@color/rgb999999" android:layout_centerVertical="true" android:layout_marginLeft="30px" android:layout_marginRight="30px" android:maxLines="1" android:maxLength="50" android:ellipsize="end" /> <View android:layout_width="match_parent" android:layout_height="2px" android:layout_marginLeft="44px" android:layout_alignParentBottom="true" android:background="@color/rgbe1e1e1" /> </RelativeLayout> <android.support.v7.widget.RecyclerView android:id="@+id/rv_personal_center" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/rgbefeff3" android:nestedScrollingEnabled="false" android:overScrollMode="never" /> </LinearLayout> </android.support.v4.widget.NestedScrollView> </LinearLayout>
開啟頁面,顯示效果如下:
問題解決