Tengo un coordinador de diseño con un recyclerview que me gustaría agregar mediante programación. La razón por la que se añade mediante programación es debido a que los diferentes fragmentos que inflar el coordinador de diseño, puede utilizar diferentes tipos de recyclerviews.

Típicamente por un recyclerview, con el fin de establecer este comportamiento me gustaría añadir que en el xml:

app:layout_behavior="@string/appbar_scrolling_view_behavior"

Que funciona bien. Sin embargo, estoy en una pérdida completa de cómo agregar este comportamiento al crear el recyclerviews mediante programación y, a continuación, agregarlos a la framelayout:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:id="@+id/coordLayout"
    android:layout_height="match_parent" android:fitsSystemWindows="true"
    tools:context=".MainActivity">

    <android.support.design.widget.AppBarLayout android:id="@+id/app_bar"
        android:fitsSystemWindows="true" android:layout_height="@dimen/app_bar_height"
        android:layout_width="match_parent" android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/toolbar_layout"
            android:fitsSystemWindows="true" android:layout_width="match_parent"
            android:layout_height="match_parent" app:layout_scrollFlags="scroll|exitUntilCollapsed"
            app:contentScrim="?attr/colorPrimary">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_height="?attr/actionBarSize"
                android:layout_width="match_parent"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/AppTheme.PopupOverlay" />

        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>
    <FrameLayout
        android:id="@+id/frameLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </FrameLayout>

</android.support.design.widget.CoordinatorLayout>
InformationsquelleAutor AndroidP | 2015-11-14

3 Comentarios

  1. 86

    Behavior es un parámetro de la CoordinatorLayout.LayoutParams. Puede establecer el comportamiento de una instancia de CoordinatorLayout.LayoutParams con setBehavior método.

    Adecuada para obtener un Behavior objeto que representa la misma cosa como @string/appbar_scrolling_view_behavior debe crear una instancia de AppBarLayout.ScrollingViewBehavior.


    Edit 1:

    No tengo realmente un ejemplo, pero yo tal vez escribir uno. Suponiendo que se tiene una View (por ejemplo,yourView) que ya está conectado a una CoordinatorLayout (por lo que ya ha LayoutParams).

    CoordinatorLayout.LayoutParams params = 
                                (CoordinatorLayout.LayoutParams) yourView.getLayoutParams();
    params.setBehavior(new AppBarLayout.ScrollingViewBehavior());
    yourView.requestLayout();

    Usted puede ser que necesite para ajustar que un poco (yo no lo he probado, pero debería funcionar).


    Edit 2:

    Sólo un pequeño descargo de responsabilidad porque no todo el mundo parece entender el ejemplo de la perfección.

    yourView mencionada en el ejemplo anterior es NO la CoordinatorLayout sí mismo. yourView es CoordinatorLayout's niño View.

    • ¿Tiene usted un ejemplo donde esto se hace mediante programación?
    • Siéntase libre de comprobar mi edición
    • Muchas gracias.
    • setBehavior está causando un xml parse error al cargar mi fragmento .. no es de trabajo. En el caso de los fragmentos con su propia clase y xml, ¿cómo lo hacemos? Veo que en la documentación no es un indocumentado public AppBarLayout.ScrollingViewBehavior (Context context, AttributeSet attrs)
    • El mismo comportamiento puede ser aplicado a LinearLayouts pero no he sido capaz de agregar mediante programación a la vez. Sabes por casualidad, ¿cómo? Me hizo una pregunta aquí: stackoverflow.com/questions/38530196/…
    • Puede yourView ser un ListView en lugar de RecyclerView?
    • Yo no he dicho nada acerca de RecyclerView pero supongo que estás preguntando si ListView también puede trabajar con CollapsingToolbarLayout. La respuesta es no. CollapsingToolbarLayout espera que usted use un View que es la aplicación de NestedScrollingChild de la interfaz. Se puede aplicar a ti mismo (para el ListView), pero me parece un dolor en el trasero, en comparación a reimplementing su pantalla con RecyclerView lugar.
    • lo que si puedo usar GridView en el interior de algunos otros ViewGroup? Me refiero a que el desplazamiento de la vista no es directamente el hijo de CoordinatorLayout, y todos ellos son creados a través de programación. Hay alguna forma de configurar el diseño behaviou? para que?
    • Sólo se puede establecer behavior directa de los niños de CoordinatorLayout.
    • que es muy malo. Hay alguna manera de que yo pueda utilizar AppBarLayout en mi situación? En realidad lo que necesito es sólo mover la barra de título de la pantalla
    • no es como algunos desagradable característica de CoordinatorLayout. Que es como todo el SDK de Android funciona. Sólo se puede establecer la disposición de los parámetros específicos para los hijos directos de un diseño particular. Te sugiero que vuelva a pensar en su diseño.
    • sí estoy de acuerdo en que. El problema es que el diseño actual. El formato actual es trabajar por mucho tiempo y no es la intención de ser cambiado en cerca de período
    • Quiero establecer el comportamiento de un punto de vista que voy a agregar a la Coordinadora de Diseño de forma dinámica. Así que estoy llamando a la mCoordinatorLayout.addView(customView) y quiero establecer el comportamiento de la vista personalizada. Sin embargo, la costumbre vista no parecen pensar que su diseño params son CoordinatorLayout.Params
    • pegar que como una pregunta, no como un comentario a esta respuesta

  2. 3

    Aceptado la respuesta es correcta, pero el código no es compilable. Así que aquí está un ejemplo completo

    CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) 
    view.getLayoutParams();
    
    params.setBehavior(new AppBarLayout.ScrollingViewBehavior(view.getContext(), null));

    2º parámetro es AttributeSet y está bien para tenerlo como null aunque no está marcado como Nullable en apoyo lib.

    • por qué el código de mi respuesta no es compilable? Parece ser que la compilación de bien para mí?
  3. 1

    Para habilitar y deshabilitar layout_behavior mediante programación con kotlin utilizar este código :

    fun enableLayoutBehaviour() {
        val param: CoordinatorLayout.LayoutParams = swipeRefreshView.layoutParams as CoordinatorLayout.LayoutParams
        param.behavior = AppBarLayout.ScrollingViewBehavior()
    }
    
    fun disableLayoutBehaviour() {
        val param: CoordinatorLayout.LayoutParams = swipeRefreshView.layoutParams as CoordinatorLayout.LayoutParams
        param.behavior = null
    }

    Nota: reemplace swipeRefreshView con su vista

Dejar respuesta

Please enter your comment!
Please enter your name here