【问题标题】:Hiding keyboard in scrollview scrolling the page在滚动页面中隐藏键盘
【发布时间】:2016-07-20 04:21:06
【问题描述】:

我有一个带有 ViewPager 和水平 RecyclerViews 的 ScrollView 布局,我的问题是当我隐藏键盘时,页面会向下滚动一点。我尝试将 windowSoftInputMode 更改为 adjustNothing,它确实解决了问题,但随后键盘隐藏了 SearchView 建议。

由于某种原因,它只会在页面达到一定长度时发生,因为如果我删除一个 RecyclerView 或 ViewPager 就不会发生这种情况。

我为这个问题找到了两种解决方法,一种是在键盘弹出时将布局的可见性更改为消失,在隐藏时将其恢复为可见,第二种是在查询文本失去焦点时将键盘与 SearchView 一起隐藏,但我真的很想为这个问题找到一个合适的解决方案。

以下是问题的视频和我的布局代码:

https://www.youtube.com/watch?v=hyexsQz8ja0

<ScrollView
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:scrollbars="none">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:animateLayoutChanges="true">

    <RelativeLayout
        android:id="@+id/fragment_courses_relativeLayout_viewPager"
        android:layout_height="200dp"
        android:layout_width="match_parent">

        <ViewPager
            android:id="@+id/main_catalog_view_pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentTop="true" />

        <InkPageIndicator
            android:id="@+id/main_catalog_indicator"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="10dp"
            android:visibility="gone"/>
    </RelativeLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/fragment_courses_software_see_all"
        android:background="?attr/selectableItemBackground"
        android:visibility="gone"
        android:clickable="true"
        android:minHeight="48.0dip">
        <FrameLayout
            android:layout_gravity="center_vertical"
            android:orientation="horizontal"
            android:layout_width="0.0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1.0">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/course_type_software"
                android:textSize="20.0sp"
                android:textColor="?android:textColorPrimary"
                android:layout_marginStart="16dp" />
        </FrameLayout>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/see_all"
            android:textColor="@color/colorAccent"
            android:textAppearance="@style/TextAppearance.Button"
            android:layout_gravity="center_vertical"
            android:layout_marginEnd="@dimen/activity_horizontal_margin"
            android:layout_marginStart="@dimen/activity_horizontal_margin" />
    </LinearLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/fragment_courses_software_recyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:paddingTop="4dp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/fragment_courses_cyber_see_all"
        android:background="?attr/selectableItemBackground"
        android:visibility="gone"
        android:clickable="true"
        android:minHeight="48.0dip">
        <FrameLayout
            android:layout_gravity="center_vertical"
            android:orientation="horizontal"
            android:layout_width="0.0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1.0">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/course_type_cyber"
                android:textSize="20.0sp"
                android:textColor="?android:textColorPrimary"
                android:layout_marginStart="16dp" />
        </FrameLayout>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/see_all"
            android:textColor="@color/colorAccent"
            android:textAppearance="@style/TextAppearance.Button"
            android:layout_gravity="center_vertical"
            android:layout_marginEnd="@dimen/activity_horizontal_margin"
            android:layout_marginStart="@dimen/activity_horizontal_margin" />
    </LinearLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/fragment_courses_cyber_recyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:paddingTop="4dp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/fragment_courses_it_see_all"
        android:background="?attr/selectableItemBackground"
        android:visibility="gone"
        android:clickable="true"
        android:minHeight="48.0dip">
        <FrameLayout
            android:layout_gravity="center_vertical"
            android:orientation="horizontal"
            android:layout_width="0.0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1.0">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/course_type_it"
                android:textSize="20.0sp"
                android:textColor="?android:textColorPrimary"
                android:layout_marginStart="16dp" />
        </FrameLayout>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/see_all"
            android:textColor="@color/colorAccent"
            android:textAppearance="@style/TextAppearance.Button"
            android:layout_gravity="center_vertical"
            android:layout_marginEnd="@dimen/activity_horizontal_margin"
            android:layout_marginStart="@dimen/activity_horizontal_margin" />
    </LinearLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/fragment_courses_it_recyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:paddingTop="4dp"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/fragment_courses_tools_see_all"
        android:background="?attr/selectableItemBackground"
        android:visibility="gone"
        android:clickable="true"
        android:minHeight="48.0dip">
        <FrameLayout
            android:layout_gravity="center_vertical"
            android:orientation="horizontal"
            android:layout_width="0.0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1.0">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/course_type_tools"
                android:textSize="20.0sp"
                android:textColor="?android:textColorPrimary"
                android:layout_marginStart="16dp" />
        </FrameLayout>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/see_all"
            android:textColor="@color/colorAccent"
            android:textAppearance="@style/TextAppearance.Button"
            android:layout_gravity="center_vertical"
            android:layout_marginEnd="@dimen/activity_horizontal_margin"
            android:layout_marginStart="@dimen/activity_horizontal_margin" />
    </LinearLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/fragment_courses_tools_recyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:paddingTop="4dp"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/fragment_courses_system_see_all"
        android:background="?attr/selectableItemBackground"
        android:visibility="gone"
        android:clickable="true"
        android:minHeight="48.0dip">
        <FrameLayout
            android:layout_gravity="center_vertical"
            android:orientation="horizontal"
            android:layout_width="0.0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1.0">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/course_type_system"
                android:textSize="20.0sp"
                android:textColor="?android:textColorPrimary"
                android:layout_marginStart="16dp" />
        </FrameLayout>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/see_all"
            android:textColor="@color/colorAccent"
            android:textAppearance="@style/TextAppearance.Button"
            android:layout_gravity="center_vertical"
            android:layout_marginEnd="@dimen/activity_horizontal_margin"
            android:layout_marginStart="@dimen/activity_horizontal_margin" />
    </LinearLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/fragment_courses_system_recyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:paddingTop="4dp"/>

</LinearLayout>

【问题讨论】:

    标签: android scrollview


    【解决方案1】:

    我设法通过将以下属性添加到 ScrollView 的最顶部视图来解决问题,在我的例子中是 LinearLayout:

    android:focusableInTouchMode="true"
    

    原来这个问题出在 ScrollView 中的 RecyclerViews 上,并在此处向 Google 报告了 Issue 81854

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 2018-03-26
      • 2013-01-22
      • 2011-09-22
      相关资源
      最近更新 更多