当EditText变得焦点时,CollapsingToolbarLayout不会崩溃

我在CoordinatorLayout使用CollapsingToolBar ,而且我的NestScrollView包含一些EditText作为子视图。 我所面对的是当edittext得到关注和keybaoard出现我的完整视图不向上滚动。

以下是代码和图像作为该布局的输出。

 <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="@dimen/app_bar_height" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" app:expandedTitleMarginEnd="64dp" app:expandedTitleMarginStart="48dp" app:contentScrim="?attr/colorPrimary" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <ImageView android:id="@+id/ivProductImage" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop" android:src="@drawable/stub_image" app:layout_collapseParallaxMultiplier="0.7" app:layout_collapseMode="parallax" /> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_collapseMode="pin" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView android:id="@+id/nested_scroll_view" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <LinearLayout android:id="@+id/containerLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_marginTop="10dp"> <EditText android:id="@+id/etProductTitle" style="@style/EditTextStyle" android:hint="@string/lbl_product_title" android:inputType="text" android:textSize="24dp" /> </android.support.design.widget.TextInputLayout> <android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginRight="10dp"> <EditText android:id="@+id/etProductDescription" style="@style/EditTextStyle" android:hint="@string/lbl_description" android:inputType="text" /> </android.support.design.widget.TextInputLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <android.support.design.widget.TextInputLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_weight="0.5"> <EditText android:id="@+id/etDeposit" style="@style/EditTextStyle" android:hint="@string/lbl_deposit" android:inputType="number" /> </android.support.design.widget.TextInputLayout> <android.support.design.widget.TextInputLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_weight="0.5"> <EditText android:id="@+id/etPricePerDay" style="@style/EditTextStyle" android:hint="@string/lbl_price_per_day" android:inputType="number" /> </android.support.design.widget.TextInputLayout> </LinearLayout> <android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginRight="10dp"> <EditText android:id="@+id/etLocation" style="@style/EditTextStyle" android:hint="@string/lbl_add_location" android:inputType="text" /> </android.support.design.widget.TextInputLayout> <TextView style="@style/SubHeading" android:layout_margin="10dp" android:text="@string/lbl_categories" android:textColor="@color/color_primary" /> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="315dp" android:layout_marginLeft="10dp" android:isScrollContainer="false" android:layout_marginRight="10dp" android:scrollbars="none" /> </LinearLayout> </android.support.v4.widget.NestedScrollView> 

在这里输入图像说明

Solutions Collecting From Web of "当EditText变得焦点时,CollapsingToolbarLayout不会崩溃"

RecyclerView是一个可滚动的小部件,这意味着,这些可滚动的小部件将不能与eachother(但是, RecyclerView是从NestedScrollingChild孩子)

检查这个问题的更多解释:

如何在NestedScrollView中使用RecyclerView?

但是,您可以将其与自定义 LinearLayoutManager

https://stackoverflow.com/a/32736113/4409113


顺便一提,

您可以在CoordinatorLayout内部和NestedScrollView之外使用NestedScrollView

希望有所帮助。

我认为毕竟这是最好的解决办法

 editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(final View v, boolean hasFocus) { if (hasFocus) { mAppBarLayout.setExpanded(false, true); // second one for animation } } }); 

我已经通过将OnFocusChangeListener添加到EditText解决了这个问题,如果它有焦点 – 只需用setExpanded方法折叠视图:

 editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(final View v, boolean hasFocus) { if (hasFocus) { mAppBarLayout.setExpanded(false, true); } } }); 

如果您希望CollapsingToolbarLayout在您的布局中的其他EditText的焦点每次都被折叠,那么您应该为它们中的每一个设置相同的OnFocusChangeListener