5

Ho avuto problemi con lo AppBarLayout/Toolbar/CoordinatorView. Vuoi lo per scorrere su scroll, e tornare immediatamente a scorrere verso il basso (come la maggior parte delle app di lettura, anche g + è un esempio). Tuttavia, questo è quello che sto ricevendo:Barra degli strumenti in cima a Appbar - CoordinatorLayout

normale:

Normal

Un piccolo libro:

A little scroll

completa di scorrimento:

Everything scrolled

Questo è il mio codice:

<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:fitsSystemWindows="true" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="main.MainActivity"> 

    <android.support.design.widget.AppBarLayout 
    android:id="@+id/id_appbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

     <android.support.v7.widget.Toolbar 
     android:id="@+id/id_toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     app:layout_scrollFlags="scroll|enterAlwaysCollapsed" 
     android:title="Hello World" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> 

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


    <include layout="@layout/main__activitycontent"/> 

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

main__activitycontent:

<android.support.v4.widget.NestedScrollView 
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:layout_height="match_parent" 
app:layout_behavior="@string/appbar_scrolling_view_behavior" 
tools:context="main.MainActivity" 
tools:showIn="@layout/main__activity"> 

    <TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="@dimen/text_margin" 
    android:text="@string/large_text"/> 

</android.support.v4.widget.NestedScrollView> 

Ho letto un sacco di post di blog, ma nessuno di loro sembra configurazioni lavora per me. Il hide su scroll up/show su scroll down funziona bene, solo lo Toolbar si sposta sulla appbar. Controllo della gerarchia di visualizzazione Android Vedo che il numero Toolbar si trova sopra la barra delle applicazioni blu scuro e si spostano insieme.

EDIT 1

Rimozione del fitsSytemWindows=true dal CoordinatorLayout conduce al comportamento previsto, ma l'appbar diventa bianca, non importa il colore bg per il CoordinatorLayout:

enter image description here

La mia ipotesi è che il comportamento in realtà non è cambiato, quello che è successo è che non copre più la barra delle applicazioni, quindi la barra degli strumenti non va su di essa.

EDIT 2

<resources> 

<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
</style> 

<style name="AppTheme.NoActionBar"> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
</style> 

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/> 

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"/> 

</resources> 

EDIT 3

package main; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 

import com.ee.oef.refactor.R; 

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main__activity); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.main__toolbar); 
    setSupportActionBar(toolbar); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main__menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
} 
+0

provare a rimuovere 'android: fitsSystemWindows =" true "' sembra che la barra degli strumenti passi sotto la barra delle applicazioni di sistema perché si imposta questo –

+0

Se rimuovo Android: fitsSystemWindows = "true" il comportamento funziona come previsto, ma l'appbar diventa bianco invece di colorPrimaryDark. Ho provato a cambiare il colore bg del CoordinatorLayout, ma rimane bianco. –

+0

hai definito ' @ color/color_primary_dark' nel tuo styles.xml in AppTheme? –

risposta

9

Il problema è nel:

app:layout_scrollFlags="scroll|enterAlwaysCollapsed" 

quale si potrebbe aggiungere questo alla tua CollapsingToolbarLayout. enterAlwaysCollapsedè una buona pratica per CollapsingToolbarLayout e non Toolbar.

UPDATE: e ho visto alcuni problemi nei layout e gli ID.

Per esempio, non è sicuro che hai visto o no, ma ti spiego fare quello.Il prima cosa è, id Toolbar s': id_toolbar che in onCreate è:

Toolbar toolbar = (Toolbar) findViewById(R.id.main__toolbar); 

Quindi, basta cambiarlo a:

<android.support.v7.widget.Toolbar 
      android:id="@+id/main__toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> 

Ps: Ho appena cancellato il titolo e Scrollflag cui il titolo viene da Manifest ->android:label e Ne Ed a cambiarlo. (se si desidera cambiarlo, farlo a livello di codice.)

e tornare subito a scorrere verso il basso (come la maggior parte delle applicazioni di lettura, g + è un esempio anche).

Basta aggiungere questo alla tua Toolbar:

app:layout_scrollFlags="scroll|enterAlways" 

E, infine, qui potete vedere la mia risposta su questo: https://stackoverflow.com/a/35241363/4409113

che abbiamo:

enter image description here

Aggiornamento: non ho usato:

android:fitsSystemWindows="true" 

Nel CoordinatorLayout troppo. come si può vedere l'esempio qui:

https://github.com/chrisbanes/cheesesquare/blob/master/app/src/main/res/layout/include_list_viewpager.xml

Aggiornamento: per risolvere il problema della barra degli strumenti bianchi, impostare su valori-V21/styles.xml:

<item name="android:statusBarColor">@color/colorPrimaryDark</item> 

Questo dà l'appropriata comportamento E aspetto.

+0

Sono riuscito a ottenere questo stato rimuovendo fitsSystemWindow = false su CoordinatorLayout. Tuttavia, la barra di stato non veniva colorata, perché il CoordinadorLayout è stato avviato sotto StatusBar. Ho trovato una soluzione alternativa impostando android: windowBackground su primaryDarkColor. Aggiornamento –

+0

, ho visto di nuovo il 'cheesesquare', sembra che non l'abbia aggiunto nel' CoordinatorLayout', ma l'ha aggiunto nel 'Drawer', comunque, la mia risposta è la risposta corretta su quelle bandiere credo. – Mohsen

+0

Sì, la tua risposta sulle bandiere è corretta. –

Problemi correlati