CollapsingToolbarLayout не сжимается, когда EditText становится сфокусированным

Я использую CollapsingToolBar внутри CoordinatorLayout и у меня есть 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 "CollapsingToolbarLayout не сжимается, когда EditText становится сфокусированным"

RecyclerView – это прокручиваемый виджет, который означает, что эти прокручиваемые виджеты не будут работать с eachother. (Но RecyclerView – это ребенок из NestedScrollingChild )

Проверьте этот вопрос для получения дополнительных пояснений:

Как использовать RecyclerView внутри NestedScrollView?

Но вы можете использовать его с пользовательским LinearLayoutManager

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


Кстати,

Вы можете использовать этот RecyclerView внутри CoordinatorLayout и вне 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 представление с setExpanded метода setExpanded :

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

Если вы хотите, чтобы ваш CollapsingToolbarLayout был свернут каждый раз, когда ваш другой EditText из вашего макета фокусируется, вы должны установить один и тот же OnFocusChangeListener для каждого из них.