Показать CollapsingToolbarLayout Название ТОЛЬКО при свертывании

в названии говорится все. Я пробовал setExpandedTitleColor и setCollapsedTitleColor (переход на прозрачность и обратно) без везения. Я не вижу никаких встроенных методов, которые будут делать то, что я ищу.

Я хочу показать только заголовок, когда CollapsingToolbarLayout полностью свернут, в противном случае он мне нужен.

Любые подсказки?

Ответ 1

Вы можете добавить 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 = 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;
        }
    }
});

Ответ 2

Мне удалось получить желаемый эффект, добавив следующее свойство в макет 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

Я попробовал решение dlohani, но мне это не нравилось из-за угасания. С помощью этого решения вы полностью удаляете выцветание.

Фокус в том, чтобы создать новый стиль с 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">

Ответ 4

У меня есть более простой ответ:

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

Счастливое кодирование!

Ответ 5

Я успешно добавляю затухающий текст, это было так просто. Я не могу поверить, что никто этого не придумал. Добавьте текстовый вид в панель инструментов и установите его на основе вертикального ввода-вывода в обратном вызове панели управления

mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {

        @Override
        public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {

            mTitleTextView.setAlpha(Math.abs(verticalOffset / (float)
                    appBarLayout.getTotalScrollRange()));
        }
    });

Ответ 6

Этот код работает для меня: Используйте цвет color.parse, потому что если ваш фоновый цвет отличается от другого, замените его белым, а ваш заголовок не отобразится

collapsingToolbarLayout.setExpandedTitleColor(Color.parseColor("#00FFFFFF"));

Или вы можете использовать для прозрачных collapsingToolbarLayout.setExpandedTitleColor(Color.TRANSPARENT);

Ответ 7

Здесь простейшее и рабочее решение также с api 23:

app: expandTitleTextAppearance должен наследовать TextAppearance.

Итак, в вашем файле styles.xml добавьте следующие строки:

<style name="TransparentText" parent="@android:style/TextAppearance">
   <item name="android:textColor">#00000000</item>
</style>

Затем в вашем CollapsingToolbarLayout добавьте эту строку.

app:expandedTitleTextAppearance="@style/TransparentText"

Что все люди!

Ответ 8

Вот мое решение:

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>

Ответ 9

Это работает для меня.

    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;
            }
        }
    });

Ответ 10

В моем 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"
        ...>

Существует также возможность исчезать/в тексте, а не просто показывать или скрывать его.