6

Ich folge netten Repo, die zeigt, wie benutzerdefinierte Verhalten der minimierten Symbolleiste WhatsApp-ProfileCollapsingToolbar.Wie Hintergrund der reduzierenden Symbolleiste mit benutzerdefiniertem Verhalten für den gesamten Bildschirm festlegen

Was ich nicht mag ist, wenn Bild unten Symbolleiste (Symbolleiste Schriftart ist weiß) ist weiß, dann Symbolleiste nicht sichtbar ist. Also versuche ich den Hintergrund der Toolbar auf eine Farbe zu setzen.

Zuerst habe ich hinzugefügt, um widget_header_view.xmlandroid:background="@android:color/holo_red_light" und jetzt habe ich es mag:

<?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> 

Und in activity_main.xml ich app:contentScrim="?attr/colorPrimary"-app:contentScrim="@android:color/holo_red_light"

Aber wie diese Repo verwendet Margen in WhatsappHeaderBehavior Effekt ist wie geändert haben:

enter image description here

Aber ich möchte es so sein:

enter image description here

EDIT 1:

Lösung mit Polsterungen von https://stackoverflow.com/users/3436179/alexander in https://stackoverflow.com/a/37280227/2401535 hilft nicht vorgeschlagen, weil dann „schwebende“ Symbolleiste auf die Schaltfläche hier wie deckt zurück: toolbar covers back button

Antwort

1

Sie sollten Padding anstelle von Rand verwenden. Zu diesem Zweck bearbeiten WhatsuppHeaderBehavior.java wie folgt aus:

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); 
     } 
    } 

Auch setBackground Verfahren zur Symbolleiste 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

Danke, aber es hilft nicht, siehe meine Frage, warum. –

+0

Es funktioniert wie auf diesem GitHub-Projekt, auf andere Weise sollten Sie alle Projekte komplett überarbeiten. In diesem Beitrag verwende ich Padding statt Margin, wenn der Margin-Hintergrund in Ihrer Frage verwendet wird. – Alexander

+0

Sie haben nicht bekommen - wenn ich Ränder benutze habe ich Probleme wie http://i.stack.imgur.com/Yx4vZ.png; Wenn ich Paddings benutze (genau wie du vorgeschlagen hast) habe ich ein Problem wie http://i.stack.imgur.com/Jqn2a.png. –