仅在折叠时显示CollapsingToolbarLayout标题
标题说明了一切。 我试过setExpandedTitleColor
和setCollapsedTitleColor
(切换到透明),没有运气。 我看不到任何内置的方法可以做我想要的。
我只想在CollapsingToolbarLayout完全折叠时显示标题,否则,我需要隐藏它。
任何提示?
您可以将OnOffsetChangedListener
添加到AppBarLayout
以确定CollapsingToolbarLayout
何时CollapsingToolbarLayout
或展开并设置其标题。
final CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapsingToolbarLayout); AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.appBarLayout); appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { boolean isShow = false; int scrollRange = -1; @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { if (scrollRange == -1) { scrollRange = appBarLayout.getTotalScrollRange(); } if (scrollRange + verticalOffset == 0) { collapsingToolbarLayout.setTitle("Title"); isShow = true; } else if(isShow) { collapsingToolbarLayout.setTitle(" ");//carefull there should a space between double quote otherwise it wont work isShow = false; } } });
我能够通过将以下属性添加到xml布局来获得所需的效果:
app:expandedTitleTextAppearance="@android:color/transparent"
所以我的CollapsingToolbarLayout看起来像这样
<android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsingToolbarLayout" android:layout_width="match_parent" android:layout_height="match_parent" app:expandedTitleTextAppearance="@android:color/transparent" app:layout_scrollFlags="scroll|exitUntilCollapsed">
我尝试了dlohani的解决scheme,但是因为淡出而不喜欢它。 有了这个解决scheme,你完全消除了褪色。
诀窍是创build一个textSize等于0.1sp或0sp的新样式(这个在SDK <19)上崩溃,textColor透明:
对于SDK <19
<style name="CollapsingToolbarLayoutExpandedTextStyle" parent="AppTheme"> <item name="android:textColor">@android:color/transparent</item> <item name="android:textSize">0.1sp</item> </style>
对于SDK> = 19
<style name="CollapsingToolbarLayoutExpandedTextStyle" parent="AppTheme"> <item name="android:textColor">@android:color/transparent</item> <item name="android:textSize">0sp</item> </style>
然后将其应用于布局中的CollapsingToolbarLayout:
<android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" app:expandedTitleTextAppearance="@style/CollapsingToolbarLayoutExpandedTextStyle" app:layout_scrollFlags="scroll|exitUntilCollapsed">
我有一个更简单的答案:
final CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.toolbar_layout); collapsingToolbarLayout.setTitle("Your Title"); collapsingToolbarLayout.setExpandedTitleColor(getResources().getColor(R.color.transperent)); // transperent color = #00000000 collapsingToolbarLayout.setCollapsedTitleTextColor(Color.rgb(0, 0, 0)); //Color of your title
快乐编码!
我成功添加了一个淡出的textview,这是如此简单。 我不能相信没有人提出这个问题。 在工具栏中添加文本视图,并根据appbarcallback中的verticalOffset设置它的alpha值
mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { mTitleTextView.setAlpha(Math.abs(verticalOffset / (float) appBarLayout.getTotalScrollRange())); } });
这段代码适用于我:使用color.parse颜色,因为如果你的背景颜色不同,那么用白色代替,你的标题不显示
collapsingToolbarLayout.setExpandedTitleColor(Color.parseColor("#00FFFFFF"));
或者你可以使用透明collapsingToolbarLayout.setExpandedTitleColor(Color.TRANSPARENT);
这里最简单的工作解决scheme也与api 23:
app:expandedTitleTextAppearance必须inheritanceTextAppearance。
所以,在你的styles.xml中添加这些行:
<style name="TransparentText" parent="@android:style/TextAppearance"> <item name="android:textColor">#00000000</item> </style>
然后,在您的CollapsingToolbarLayout中,添加此行。
app:expandedTitleTextAppearance="@style/TransparentText"
这就是所有人!
这是我的解决scheme:
collapsingToolbar.setCollapsedTitleTextAppearance(R.style.personal_collapsed_title); collapsingToolbar.setExpandedTitleTextAppearance(R.style.personal_expanded_title); <style name="personal_collapsed_title"> <item name="android:textSize">18sp</item> <item name="android:textColor">@color/black</item> </style> <style name="personal_expanded_title"> <item name="android:textSize">0sp</item> </style>
这对我有用。
final Toolbar tool = (Toolbar)findViewById(R.id.toolbar); CollapsingToolbarLayout c = (CollapsingToolbarLayout)findViewById(R.id.collapsing_toolbar); AppBarLayout appbar = (AppBarLayout)findViewById(R.id.app_bar_layout); tool.setTitle(""); setSupportActionBar(tool); c.setTitleEnabled(false); appbar.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { boolean isVisible = true; int scrollRange = -1; @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { if (scrollRange == -1) { scrollRange = appBarLayout.getTotalScrollRange(); } if (scrollRange + verticalOffset == 0) { tool.setTitle("Title"); isVisible = true; } else if(isVisible) { tool.setTitle(""); isVisible = false; } } });
在我看来,更优雅的解决scheme就是这样的。
public class MyCollapsingToolbarLayout extends CollapsingToolbarLayout { private final int toolbarId; @Nullable private Toolbar toolbar; public MyCollapsingToolbarLayout(Context context, AttributeSet attrs) { super(context, attrs); setTitleEnabled(false); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CollapsingToolbarLayout, 0, R.style.Widget_Design_CollapsingToolbar); toolbarId = a.getResourceId(android.support.design.R.styleable.CollapsingToolbarLayout_toolbarId, -1); a.recycle(); } @Override public void setScrimsShown(boolean shown, boolean animate) { super.setScrimsShown(shown, animate); findToolbar(); if (toolbar != null) { toolbar.setTitleTextColor(shown ? Color.WHITE : Color.TRANSPARENT); } } private void findToolbar() { if (toolbar == null) { toolbar = (Toolbar) findViewById(toolbarId); } } }
用法看起来像这样
<butter.droid.widget.BurtterCollapsingToolbarLayout app:toolbarId="@+id/toolbar" ...>
也可以淡入/淡出,而不是只显示或隐藏它。