CollapsingToolbarLayout:展开时更改主页按钮颜色

Den*_*Loh 20 android android-collapsingtoolbarlayout

我已经实现了CollapsingToolbarLayoutChris Banes示例代码中的新功能.

但是,背景图像视图的图像都具有白色背景.工具栏主题是ThemeOverlay.AppCompat.Dark.ActionBar图标也是白色的,因此当CollapsingToolbarLayout完全展开时我看不到主页按钮.

随着app:expandedTitleTextAppearance我可以设置标题字段的颜色.是否还可以设置主页按钮和菜单图标的颜色?

kas*_*hlo 5

以下是在展开和折叠布局时如何更改抽屉和选项图标颜色的示例:

protected void onCreate(Bundle savedInstanceState) {
            AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.app_bar_layout);
            appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
                @Override
                public void onOffsetChanged(AppBarLayout appBarLayout, int offset)
                {
                    Drawable upArrow = ResourcesCompat.getDrawable(getResources(), R.drawable.drawer_icon, null);
                    if (offset < -200)
                    {
                        upArrow.setColorFilter(Color.parseColor("#000000"), PorterDuff.Mode.SRC_ATOP);
                        getSupportActionBar().setHomeAsUpIndicator(upArrow);

                        Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.option_menu_icon);
                        drawable.setColorFilter(Color.parseColor("#000000"), PorterDuff.Mode.SRC_ATOP);
                        toolbar.setOverflowIcon(drawable);
                    }
                    else
                    {

                        upArrow.setColorFilter(Color.parseColor("#ffffff"), PorterDuff.Mode.SRC_ATOP);
                        getSupportActionBar().setHomeAsUpIndicator(upArrow);
                        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

                        Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.option_menu_icon);
                        drawable.setColorFilter(Color.parseColor("#ffffff"), PorterDuff.Mode.SRC_ATOP);
                        toolbar.setOverflowIcon(drawable);
                    }
        }
});
Run Code Online (Sandbox Code Playgroud)


Cil*_*nco 0

在我看来,只有更改主页按钮、菜单图标和溢出按钮的可绘制对象,这才有可能。幸运的是,Google 为我们提供了一个名为Tinted Drawables的新 API ,它允许我们设置可绘制图像或九块图像的颜色。下面是它的工作原理:

<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@android:drawable/ic_menu_camera"
    android:tint="@color/menu_icon_color"/>
Run Code Online (Sandbox Code Playgroud)

Drawable现在您可以像布局中的任何其他定义一样使用这个新定义。对于主页按钮和溢出按钮,您还必须覆盖样式定义,如下所示:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:homeAsUpIndicator">@drawable/tinted_home_button</item>
    <item name="android:actionOverflowButtonStyle">@style/OverFlowButton</item>
</style>

<style name="OverFlowButton" parent="AppTheme">
    <item name="android:src">@drawable/tinted_overflow_button</item>
</style>
Run Code Online (Sandbox Code Playgroud)

遗憾的是,所有这些内容(样式定义除外)仅在 API 级别 21+ 上可用,并且未包含在支持库中。如果你必须支持低于 Lollipop 的设备,我认为最好的方法是使用Android Assets Studio,你可以自己给图标着色并将它们下载为 png 文件。