Ho cercato di riprodurre il modo in cui l'app Contatti sulla versione 5.0 comprime la barra degli strumenti quando scorre la visualizzazione elenco.In che modo l'app per contatti Android L riduce la barra degli strumenti?
Gallery of screenshots demonstrating the desired interaction nota il crollo della barra degli strumenti in più fasi, in cui viene visualizzato ricerca + ultimo contatto, svanisce ultimo contatto, crolla ultimo contatto, crolla di ricerca, lasciando solo le linguette.
Finora, ho una barra degli strumenti posta sopra una panoramica di riciclo in un LinearLayout e la barra degli strumenti è utilizzata come barra di azione, non autonoma.
Non riesco a capire come intercettare l'evento di tocco sul recyclerview e farlo restringere la barra degli strumenti, quindi restituire l'evento di scorrimento a recyclerview. Ho provato a mettere l'intera cosa in una scrollview, ma poi il recyclerview non ha potuto calcolare correttamente l'altezza e non ha mostrato alcun contenuto. Ho provato a sovrascrivere onscroll sul recyclerview e ho scoperto che mi avviserà solo quando un evento di scorrimento è iniziato e mi fornirà il primo ID visibile della carta.
Il modo in cui guarda a destra, ma non riesco a lavorare per la vita di me, è questo:
getSupportActionBar().setHideOnContentScrollEnabled(true);
che restituisce:
Caused by: java.lang.UnsupportedOperationException: Hide on content scroll is not supported in this action bar configuration.
Utilizzando un ActionBar tradizionali, mettendo un barra degli strumenti sotto di esso, e l'impostazione hideoncontentscrollenabled anche non ha funzionato, lo scorrimento non ha mai attivato il metodo Nascondi sulla barra di azione.
- edit - Sono stato in grado di ottenere hideOnContentScrollEnabled lavorando su un listview con una barra di azione tradizionale, ma il comportamento non è lo stesso dell'app Contatti. Questo non è chiaramente il metodo che hanno usato, ma semplicemente fa scattare .hide() sulla barra di azione quando si verifica un evento di fling su un listview, che è notevolmente diverso dall'app dei contatti, che trascina la barra degli strumenti insieme all'evento di scorrimento. -/modifica -
Così ho abbandonato questa strada, e mettere fill_parent dall'altezza CardView, e animato un crollo sulla barra degli strumenti. Ma come faccio a farlo in modo che segua l'evento touch e poi restituisca l'evento tattile al recyclerview?
activity_main.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/actionBarSize"
android:background="@color/colorPrimary"
/>
<fragment android:name="me.myapplication.FragmentTab"
android:id="@+id/tab_fragment"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
fragment_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:padding="8dp"
android:background="#eeeeee"
>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
styles.xml
...
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
MainActivity.java
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
// Disable the logo in the actionbar, as per material guidelines
toolbar.getMenu().clear();
toolbar.setTitle("My toolbar");
setSupportActionBar(toolbar);
L'app [Google I/O 2014] (https://github.com/google/iosched) ha una funzionalità simile nella sua vista sessione. Potresti trovare alcune idee lì. –
Grazie, ho esaminato il codice sorgente e l'effetto, ma l'app iosched ha un diverso tipo di effetto e viene raggiunta in un modo diverso. In pratica, anima un tipo di effetto "nascondi" sulla barra di azione quando viene chiamato onScroll, che prende solo il primo blocco di elementi e non può tracciare realmente il dito. Lo stesso effetto può essere applicato tramite setHideOnContentScrollEnabled(). L'app contatti sembra invece scorrere verso l'alto l'intera finestra prima di riportare l'evento di scorrimento alla vista scorrevole. – Preston
Fuori dalla mia testa - cosa succede se non provi ad intercettare gli eventi touch di ListView/RecyclerView, ma sovrapponi la vista con GestureDetector e instradi gli eventi spostati mentre si toccano i widget giusti per ridurli/scorrerli in modo appropriato? Solo un'idea, non ho provato affatto. –