How to show Toolbar's logo, icon, title, subti

2019-02-05 06:27发布

问题:

After Android Support Design Library was released, I wanted to implement an effect like a page of Twitter Profile, in which Toolbar's title and subtitle could be changed as screen scrolled vertically. So I tried to use CoordinatorLayout, AppBarLayout, CollapsingToolbarLayout and Toolbar from Android Support Design Library to achieve this effect. Everything worked as expected except that Toolbar's content couldn't be showed or changed as I wanted. I should have been wanting to display collapseIcon, navigationIcon, title, subtitle of Toolbar, but they didn't show up even though I had set them in the layout and programmatically. Just as the blog said,

Note that in those cases, you should call setTitle() on the CollapsingToolbarLayout, rather than on the Toolbar itself.

If you have checked the doc, you would find out CollapsingToolbarLayout only focus on settings of title, but can do nothing about collapseIcon, navigationIcon and subtitle.

So could someone tell me how to achieve this effect by Toolbar and CollapsingToolbarLayout? If they couldn't be able, then what other things could be? Anybody has any ideas about this?

Any tips will be appreciated. Thanks in advance.

回答1:

This issue was reported here as a bug. I have personally experienced this with one of my apps. Setting the topMargin for the toolbar works for me. As somebody commented on the bug report, here is the fix, as a function from the issue report.

private void fixApi21ToolBarBug(Toolbar toolbar){
    if(Build.VERSION.SDK_INT!=21) return; //only on api 21
    final int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
    final int result = (resourceId > 0) ? getResources().getDimensionPixelSize(resourceId) * 2 : 0;
    final CollapsingToolbarLayout.LayoutParams params = (CollapsingToolbarLayout.LayoutParams) toolbar.getLayoutParams();
    params.topMargin -= result;
    toolbar.setLayoutParams(params);
}

See the result here.



回答2:

Ran into the same issue. For me it was fixed by removing the android:fitsSystemWindows="true" from the layoutparameters. However, this will mean that the status bar will not be part of the collapsing Toolbar backdrop.