scrollflags coordinatorlayout collapsible collapsemode appbarlayout android collapsingtoolbarlayout android-collapsingtoolbarlayout

android - coordinatorlayout - layout collapsemode parallax



Mostrar título de barra de herramientas contraída SOLAMENTE cuando está contraído (11)

Agregué con éxito una vista de texto que se desvanecía, fue muy simple. No puedo creer que a nadie se le haya ocurrido esto. Agregue una vista de texto en la barra de herramientas y establezca su alfa en función de la vertical Offset en la devolución de llamada de la barra de aplicaciones

mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { mTitleTextView.setAlpha(Math.abs(verticalOffset / (float) appBarLayout.getTotalScrollRange())); } });

El título lo dice todo. He intentado setExpandedTitleColor y setCollapsedTitleColor (cambiando hacia y desde transparente) sin suerte. Tampoco puedo ver ningún método incorporado que haga lo que estoy buscando.

Solo quiero mostrar el título cuando CollapsingToolbarLayout está completamente contraído, de lo contrario, lo necesito oculto.

¿Alguna pista?


Aquí está mi solución:

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>


Aquí la solución más simple y funcional también con api 23:

aplicación: extendedTitleTextAppearance tiene que heredar TextAppearance.

Entonces, en su styles.xml agregue estas filas:

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

Luego, en su CollapsingToolbarLayout, agregue esta fila.

app:expandedTitleTextAppearance="@style/TransparentText"

¡Eso es todo amigos!


En mi opinión, una solución un poco más elegante sería algo como esto.

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

Y el uso se vería así

<butter.droid.widget.BurtterCollapsingToolbarLayout app:toolbarId="@+id/toolbar" ...>

También existe la posibilidad de desvanecer / introducir texto en lugar de solo mostrarlo u ocultarlo.


Este código funciona para mí: use color.parse color porque si el color de fondo es diferente, reemplácelo con blanco y su título no se mostrará

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

O puede usar para collapsingToolbarLayout.setExpandedTitleColor(Color.TRANSPARENT);


Esto funciona para mi.

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


La siguiente solución funciona perfectamente.

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


Probé la solución de dlohani, pero no me gustó por la desaparición. Con esta solución, eliminas el desvanecimiento por completo.

El truco consiste en crear un nuevo estilo con textSize igual a 0.1sp o 0sp (este se bloquea en SDK <19) y textColor transparent:

Para SDK <19

<style name="CollapsingToolbarLayoutExpandedTextStyle" parent="AppTheme"> <item name="android:textColor">@android:color/transparent</item> <item name="android:textSize">0.1sp</item> </style>

Para SDK> = 19

<style name="CollapsingToolbarLayoutExpandedTextStyle" parent="AppTheme"> <item name="android:textColor">@android:color/transparent</item> <item name="android:textSize">0sp</item> </style>

Luego aplíquelo a CollapsingToolbarLayout en su diseño:

<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">


Pude obtener el efecto deseado al agregar la siguiente propiedad al diseño xml:

app:expandedTitleTextAppearance="@android:color/transparent"

entonces mi CollapsingToolbarLayout se ve así

<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">


Puede agregar OnOffsetChangedListener a AppBarLayout para determinar cuándo se contrae o expande CollapsingToolbarLayout y establece su título.

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


Tengo una respuesta más simple:

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

¡Feliz codificación!