Tengo un TextView en la parte inferior de CoordinatorLayout .
Pero cuando muestro un SnackBar , cubrirá el TextView .
Sé que tengo que personalizar un Behavior para TextView y anular layoutDependsOn y onDependentViewChanged , pero no se soluciona muy bien.
¿Me podrías dar algún consejo si lo sabes? Gracias.
Si TextView es un hijo directo de un CoordinadorLayout, simplemente agregue
app:layout_dodgeInsetEdges="bottom"
en los atributos de TextView.
¡Magia!
Debe agregar un comportamiento a su LinearLayout e incrustarlo en un CoordinatorLayout .
Así es como lo haces.
MoveUpwardBehavior.clase
import android.os.Build; import android.support.design.widget.CoordinatorLayout; import android.support.design.widget.Snackbar; import android.view.View; public class MoveUpwardBehavior extends CoordinatorLayout.Behavior<View> { private static final boolean SNACKBAR_BEHAVIOR_ENABLED; @Override public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) { return SNACKBAR_BEHAVIOR_ENABLED && dependency instanceof Snackbar.SnackbarLayout; } @Override public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) { float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight()); child.setTranslationY(translationY); return true; } static { SNACKBAR_BEHAVIOR_ENABLED = Build.VERSION.SDK_INT >= 11; } }CustomLinearLayout.clase
import android.content.Context; import android.support.design.widget.CoordinatorLayout; import android.util.AttributeSet; import android.widget.LinearLayout; @CoordinatorLayout.DefaultBehavior(MoveUpwardBehavior.class) public class CustomLinearLayout extends LinearLayout { public CustomLinearLayout(Context context) { super(context); } public CustomLinearLayout(Context context, AttributeSet attrs) { super(context, attrs); } public CustomLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } }Muestra xml->actividad_inicio
Aquí user.example.charu.its2017huree es el nombre de mi paquete, reemplácelo con el suyo.
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:fitsSystemWindows="true" android:layout_height="match_parent"> <user.example.charu.its2017huree.CustomLinearLayout android:background="#098" android:gravity="bottom" android:id="@+id/linearLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Hello world" /> </user.example.charu.its2017huree.CustomLinearLayout>Finalmente en mi Actividad llamada HomeActivity
public class HomeActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); CustomLinearLayout customLinearLayout = (CustomLinearLayout) findViewById(R.id.linearLayout); Snackbar.make(customLinearLayout, "Text to display", Snackbar.LENGTH_LONG).show(); } }La fuente es de este ejemplo .