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!