工具栏的colorPrimary出现在ImageView下方

时间:2018-03-20 03:37:55

标签: android android-toolbar android-collapsingtoolbarlayout android-appbarlayout android-nestedscrollview

  1. 在CollapsingToolbarLayout容器中使用工具栏和ImageView会导致工具栏的colorPrimary出现在ImageView下方:
  2. https://imgur.com/dQwWRzg

    1. 向上滚动页面,工具栏的colorPrimary逐渐消失:
    2. https://imgur.com/rzeOqLf

      https://imgur.com/eBpJB14

      1. 代码:
      2. activity_main.xml中

        <?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"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/white"
        android:fitsSystemWindows="true">
        
        <android.support.design.widget.AppBarLayout
            android:id="@+id/app_bar_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:fitsSystemWindows="true"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
        
            <android.support.design.widget.CollapsingToolbarLayout
                android:id="@+id/collapsing_toolbar"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fitsSystemWindows="true"
                app:contentScrim="?attr/colorPrimary"
                app:expandedTitleTextAppearance="@style/TextAppearance.AppCompat.Title"
                app:layout_scrollFlags="scroll|exitUntilCollapsed"
                app:titleEnabled="false">
        
                <ImageView
                    android:layout_width="match_parent"
                    android:layout_height="220dp"
                    android:fitsSystemWindows="true"
                    android:scaleType="centerCrop"
                    android:src="@drawable/bg_profile"
                    app:layout_collapseMode="parallax" />
        
                <android.support.v7.widget.Toolbar
                    android:id="@+id/toolbar"
                    android:layout_width="match_parent"
                    android:layout_height="?attr/actionBarSize"
                    app:contentInsetStartWithNavigation="0dp"
                    app:layout_collapseMode="pin"
                    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
        
            </android.support.design.widget.CollapsingToolbarLayout>
        
        </android.support.design.widget.AppBarLayout>
        
        <android.support.v4.widget.NestedScrollView
            android:id="@+id/nested_content"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:clipToPadding="false"
            android:scrollbars="none"
            android:scrollingCache="true"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">
        
        </android.support.v4.widget.NestedScrollView>
        
        <com.modon.circularimageview.CircularImageView
            android:id="@+id/image"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:src="@drawable/image"
            app:civ_border="true"
            app:civ_border_width="2dp"
            app:layout_anchor="@id/app_bar_layout"
            app:layout_anchorGravity="bottom|center" />
        
        </android.support.design.widget.CoordinatorLayout>
        

        Styles.xml

        <resources>
        
        <!-- Base application theme. -->
        <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
            <!-- Customize your theme here. -->
            <item name="colorPrimary">@color/colorPrimary</item>
            <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
            <item name="colorAccent">@color/colorAccent</item>
            <item name="windowActionModeOverlay">true</item>
            <item name="android:actionModeBackground">@color/blue_grey_600</item>
        </style>
        
        <style name="Toolbar.Light" parent="@style/AppTheme">
            <item name="colorControlNormal">@color/grey_60</item>
            <item name="android:textColorPrimary">@color/grey_60</item>
        </style>
        
        </resources>
        

        colors.xml

        <?xml version="1.0" encoding="utf-8"?>
        <resources>
        <color name="colorPrimary">#197333</color>
        <color name="colorPrimaryDark">#1565C0</color>
        </resources>
        

        MainActivity.java

        package com.profile;
        
        import android.os.Bundle;
        import android.support.design.widget.AppBarLayout;
        import android.support.design.widget.CollapsingToolbarLayout;
        import android.support.v4.view.ViewCompat;
        import android.support.v7.app.AppCompatActivity;
        import android.support.v7.widget.Toolbar;
        import android.util.Log;
        import android.view.Menu;
        import android.view.MenuItem;
        import android.widget.Toast;
        
        import com.modon.circularimageview.CircularImageView;
        
        public class MainActivity extends AppCompatActivity {
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        
            initToolbar();
            initComponent();
        }
        
        private void initToolbar() {
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            toolbar.setNavigationIcon(R.drawable.ic_menu);
            setSupportActionBar(toolbar);
            getSupportActionBar().setTitle("Profile");
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        }
        
        private void initComponent() {
            final CircularImageView image = (CircularImageView) findViewById(R.id.image);
            final CollapsingToolbarLayout collapsing_toolbar = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
            ((AppBarLayout) findViewById(R.id.app_bar_layout)).addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
                @Override
                public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
                    int min_height = ViewCompat.getMinimumHeight(collapsing_toolbar) * 2;
                    float scale = (float) (min_height + verticalOffset) / min_height;
                    image.setScaleX(scale >= 0 ? scale : 0);
                    image.setScaleY(scale >= 0 ? scale : 0);
                }
            });
        }
        
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.menu_search_setting, menu);
            return true;
        }
        
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            if (item.getItemId() == android.R.id.home) {
                finish();
            } else {
                Toast.makeText(getApplicationContext(), item.getTitle(), Toast.LENGTH_SHORT).show();
            }
            return super.onOptionsItemSelected(item);
        }
        
        }
        

0 个答案:

没有答案