Показывать заголовок CollapsingToolbarLayout только при сворачивании
название говорит само за себя. Я пробовал setExpandedTitleColor
и setCollapsedTitleColor
(переключение на и из прозрачного) без везения. Я не вижу никаких встроенных методов, которые будут делать то, что я ищу.
Я только хочу показать заголовок, когда CollapsingToolbarLayout полностью свернут, в противном случае мне нужно его скрыть.
какие-то намеки?
11 ответов:
вы можете добавить
OnOffsetChangedListener
toAppBarLayout
определить, когда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(" ");//carefull there should a space between double quote otherwise it wont work isShow = false; } } });
я попробовал решение длохани, но оно мне не понравилось из-за затухания. С помощью этого решения вы полностью удаляете выцветание.
хитрость заключается в создании нового стиля с textSize равным 0.1 sp или 0sp (это один сбой на SDK
для SDK
<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">
я смог получить желаемый эффект, добавив следующее свойство в 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">
У меня есть более простой ответ:
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
Удачи В Кодировании!
этот код работает для меня: Использовать цвет.разбор цвета, потому что если ваш цвет фона отличается, то заменить на белый и ваш заголовок не отображается
collapsingToolbarLayout.setExpandedTitleColor(Color.parseColor("#00FFFFFF"));
или вы можете использовать для прозрачного
collapsingToolbarLayout.setExpandedTitleColor(Color.TRANSPARENT);
Я успешно добавить исчезающий textview, это было так просто. Я не могу поверить, что никто не придумал этого. Добавьте текстовое представление на панели инструментов и установите его альфа на основе verticalOffset в AppBar callback
mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { mTitleTextView.setAlpha(Math.abs(verticalOffset / (float) appBarLayout.getTotalScrollRange())); } });
здесь самое простое и рабочее решение также с api 23:
app: expandedTitleTextAppearance должен наследовать TextAppearance.
Итак, в ваших стилях.xml добавить эти строки:
<style name="TransparentText" parent="@android:style/TextAppearance"> <item name="android:textColor">#00000000</item> </style>
затем, в вашем CollapsingToolbarLayout, добавьте эту строку.
app:expandedTitleTextAppearance="@style/TransparentText"
это все люди!
вот мое решение:
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>
ниже Решение работает отлично.
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(""); } } });
в моем oppinion немного более элегантное решение было бы что-то вроде этого.
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" ...>
существует также возможность исчезать / в тексте вместо того, чтобы просто показывать или скрывать его.
это работает для меня.
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; } } });