android - layout_collapsemode - coordinatorlayout example
CollapsingToolbarLayout no se colapsa cuando EditText se enfoca (3)
Creo que después de todas las investigaciones esta es la mejor solución.
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(final View v, boolean hasFocus) {
if (hasFocus) {
mAppBarLayout.setExpanded(false, true); // second one for animation
}
}
});
Estoy usando CollapsingToolBar
dentro de CoordinatorLayout
y tengo NestScrollView
contiene algunos EditText
como vistas secundarias. A lo que me enfrento es cuando el texto de edición se enfoca y el teclado aparece cuando mi vista completa no se desplaza hacia arriba.
A continuación se muestra el código y la imagen como salida de ese diseño.
<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>
OnFocusChangeListener
esto al agregar OnFocusChangeListener
a EditText
y si tiene el foco, simplemente contraiga la vista con el método setExpanded
:
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(final View v, boolean hasFocus) {
if (hasFocus) {
mAppBarLayout.setExpanded(false, true);
}
}
});
Si desea que su CollapsingToolbarLayout
se contraiga cada vez que se EditText
su otro EditText
de su diseño, debe establecer el mismo OnFocusChangeListener
en cada uno de ellos.
RecyclerView
es un widget desplazable, lo que significa que estos widgets desplazables no funcionarán entre sí. (Sin embargo, RecyclerView
es un elemento secundario de NestedScrollingChild
)
Marque esta pregunta para más explicación:
¿Cómo usar RecyclerView dentro de NestedScrollView?
Pero, puedes usarlo con
LinearLayoutManager
personalizado
https://.com/a/32736113/4409113
Por cierto,
Podría usar ese RecyclerView
dentro del CoordinatorLayout
y fuera del NestedScrollView
.
Espero que ayude.