标题说明了一切。我已经尝试了setExpandedTitleColor
和setCollapsedTitleColor
(切换到透明),没有运气。我也看不到任何内置方法可以做我正在寻找的东西。
我只想在CollapsingToolbarLayout完全折叠时显示标题,否则,我需要隐藏它。
任何提示?
答案 0 :(得分:252)
您可以将OnOffsetChangedListener
添加到AppBarLayout
以确定何时折叠或展开CollapsingToolbarLayout
并设置其标题。
final CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapsingToolbarLayout);
AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.appBarLayout);
appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
boolean isShow = true;
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(" ");//careful there should a space between double quote otherwise it wont work
isShow = false;
}
}
});
答案 1 :(得分:39)
我尝试了dlohani的解决方案,但由于消失而不喜欢它。 使用此解决方案,您可以完全消除褪色。
诀窍是创建一个textSize等于0.1sp或0sp的新样式(这一个在SDK< 19上崩溃)和textColor transparent:
对于SDK< 19
<style name="CollapsingToolbarLayoutExpandedTextStyle" parent="AppTheme">
<item name="android:textColor">@android:color/transparent</item>
<item name="android:textSize">0.1sp</item>
</style>
对于SDK&gt; = 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">
答案 2 :(得分:34)
通过在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">
答案 3 :(得分:22)
我有一个更简单的答案:
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
快乐的编码!
答案 4 :(得分:17)
此代码适用于我: 使用color.parse颜色,因为如果您的背景颜色不同,则替换为白色并且您的标题不显示
collapsingToolbarLayout.setExpandedTitleColor(Color.parseColor("#00FFFFFF"));
或者你可以使用透明
collapsingToolbarLayout.setExpandedTitleColor(Color.TRANSPARENT);
答案 5 :(得分:15)
我成功添加了淡出的textview,它非常简单。我无法相信没有人想出这个。 在工具栏中添加文本视图,并根据appbar回调中的verticalOffset设置其alpha值
mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
mTitleTextView.setAlpha(Math.abs(verticalOffset / (float)
appBarLayout.getTotalScrollRange()));
}
});
答案 6 :(得分:11)
这里最简单,最实用的解决方案也是api 23:
app:expandedTitleTextAppearance必须继承TextAppearance。
因此,在styles.xml中添加以下行:
<style name="TransparentText" parent="@android:style/TextAppearance">
<item name="android:textColor">#00000000</item>
</style>
然后,在您的CollapsingToolbarLayout中,添加此行。
app:expandedTitleTextAppearance="@style/TransparentText"
那是所有人!
答案 7 :(得分:4)
这是我的解决方案:
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>
答案 8 :(得分:3)
以下解决方案完美无缺。
appbar.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
if (Math.abs(verticalOffset)-appBarLayout.getTotalScrollRange() == 0)
{
// Collapsed
setTitle("Title To Show");
}
else
{
// Expanded
setTitle("");
}
}
});
答案 9 :(得分:2)
只需添加以下代码:
CollapsingToolbarLayout collapsingToolbarLayout = findViewById(R.id.collaps_main);
collapsingToolbarLayout.setExpandedTitleColor(ContextCompat.getColor(this , android.R.color.transparent));
答案 10 :(得分:1)
这适合我。
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;
}
}
});
答案 11 :(得分:1)
在我的意见中,更优雅的解决方案就是这样。
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"
...>
还有可能淡出/淡出文本,而不仅仅是显示或隐藏它。
答案 12 :(得分:0)
这是适合我的kotlin版本:
appbar.addOnOffsetChangedListener(object : OnOffsetChangedListener {
var isShow = true
var scrollRange = -1
override fun onOffsetChanged(appBarLayout: AppBarLayout, verticalOffset: Int) {
if (scrollRange == -1) scrollRange = appBarLayout.totalScrollRange
if (scrollRange + verticalOffset == 0) {
toolbarLayout.title = "Title"
isShow = true
} else if (isShow) {
toolbarLayout.title = " " //These quote " " with _ space is intended
isShow = false
}
}
})