6

Sto seguendo il repository piacevole che mostra come eseguire il comportamento personalizzato della barra degli strumenti comprendente WhatsApp-ProfileCollapsingToolbar.Come impostare lo sfondo della barra degli strumenti compressi con comportamento personalizzato per adattarsi allo schermo intero

Quello che non mi piace è quando l'immagine sotto la barra degli strumenti (il carattere della barra degli strumenti è bianco) è bianca, quindi la barra degli strumenti non è visibile. Quindi sto cercando di impostare lo sfondo della barra degli strumenti su un po 'di colore.

Per prima cosa ho aggiunto alla widget_header_view.xmlandroid:background="@android:color/holo_red_light" e ora ho le cose come:

<?xml version="1.0" encoding="utf-8"?> 
<com.anton46.whatsapp_profile.HeaderView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@android:color/holo_red_light" 
    android:orientation="vertical"> 

    <TextView 
     android:id="@+id/name" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginEnd="@dimen/activity_horizontal_margin" 
     android:ellipsize="end" 
     android:maxLines="1" 
     android:textColor="@android:color/white" 
     android:textSize="@dimen/header_view_start_text_size" 
     android:textStyle="bold" /> 

    <TextView 
     android:id="@+id/last_seen" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:singleLine="true" 
     android:textColor="@android:color/white" /> 


</com.anton46.whatsapp_profile.HeaderView> 

E in activity_main.xml ho cambiato app:contentScrim="?attr/colorPrimary"-app:contentScrim="@android:color/holo_red_light"

Ma poiché questo repo utilizza i margini in WhatsappHeaderBehavior effetto è come:

enter image description here

Ma mi piacerebbe che fosse come:

enter image description here

EDIT 1:

soluzione con imbottiture proposti da https://stackoverflow.com/users/3436179/alexander in https://stackoverflow.com/a/37280227/2401535 non aiuta perché poi "galleggiante" barra degli strumenti copre pulsante Indietro come qui: toolbar covers back button

risposta

1

È necessario utilizzare il riempimento anziché il margine. A tal fine modificare WhatsuppHeaderBehavior.java come questo:

private int mStartPaddingLeft; 
private int mEndPaddingLeft; 
private int mPaddingRight; 
private int mStartPaddingBottom; 


    @Override 
    public boolean onDependentViewChanged(CoordinatorLayout parent, HeaderView child, View dependency) { 
     shouldInitProperties(); 

     int maxScroll = ((AppBarLayout) dependency).getTotalScrollRange(); 
     float percentage = Math.abs(dependency.getY())/(float) maxScroll; 
     float childPosition = dependency.getHeight() 
       + dependency.getY() 
       - child.getHeight() 
       - (getToolbarHeight(mContext) - child.getHeight()) * percentage/2; 

     if (Math.abs(dependency.getY()) >= maxScroll/2) { 
      float layoutPercentage = (Math.abs(dependency.getY()) - (maxScroll/2))/Math.abs(maxScroll/2); 
      child.setPaddingRelative((int)(layoutPercentage * mEndPaddingLeft) + mStartPaddingLeft,0,0,0); 
     } 
     child.setY(childPosition); 
     if (isHide && percentage < 1) { 
      child.setVisibility(View.VISIBLE); 
      isHide = false; 
     } else if (!isHide && percentage == 1) { 
      child.setVisibility(View.GONE); 
      isHide = true; 
     } 
     return true; 
    } 


private void shouldInitProperties() { 
     if (mStartPaddingLeft == 0) { 
      mStartPaddingLeft = mContext.getResources().getDimensionPixelOffset(R.dimen.header_view_start_margin_left); 
     } 

     if (mEndPaddingLeft == 0) { 
      mEndPaddingLeft = mContext.getResources().getDimensionPixelOffset(R.dimen.header_view_end_margin_left); 
     } 

     if (mStartPaddingBottom == 0) { 
      mStartPaddingBottom = mContext.getResources().getDimensionPixelOffset(R.dimen.header_view_start_margin_bottom); 
     } 

     if (mPaddingRight == 0) { 
      mPaddingRight = mContext.getResources().getDimensionPixelOffset(R.dimen.header_view_end_margin_right); 
     } 

     if (mTitleStartSize == 0) { 
      mTitleEndSize = mContext.getResources().getDimensionPixelSize(R.dimen.header_view_end_text_size); 
     } 

     if (mTitleStartSize == 0) { 
      mTitleStartSize = mContext.getResources().getDimensionPixelSize(R.dimen.header_view_start_text_size); 
     } 
    } 

utilizzare anche il metodo per setBackground barra degli strumenti in MainActivity

@Override 
    public void onOffsetChanged(AppBarLayout appBarLayout, int offset) { 
     int maxScroll = appBarLayout.getTotalScrollRange(); 
     float percentage = (float) Math.abs(offset)/(float) maxScroll; 

     if (percentage == 1f && isHideToolbarView) { 
      toolbarHeaderView.setVisibility(View.VISIBLE); 
      toolbar.setBackgroundColor(yourColor); 
      isHideToolbarView = !isHideToolbarView; 

     } else if (percentage < 1f && !isHideToolbarView) { 
      toolbarHeaderView.setVisibility(View.GONE); 
      toolbar.setBackgroundColor(yourColor); 
      isHideToolbarView = !isHideToolbarView; 
     } 
    } 
+0

Grazie, ma non aiuta, vedere la mia domanda modificato perché. –

+0

Il suo modo di lavorare su questo progetto github, in altro modo si dovrebbe rielaborare totalmente tutto il progetto. In questo post io uso il padding al posto del margine, se lo sfondo del margine di utilizzo sarà come nella tua domanda. – Alexander

+0

Non hai ottenuto - quando uso i margini ho problemi come http://i.stack.imgur.com/Yx4vZ.png; quando uso paddings (esattamente come mi hai proposto) ho problemi come http://i.stack.imgur.com/Jqn2a.png. –

0

Se non si sta affrettando per scadenza allora piuttosto usare google standard di collasso della barra degli strumenti.

http://antonioleiva.com/collapsing-toolbar-layout/

+0

Il mio esempio è "barra degli strumenti collasso standard di google". –