translationz studio index front definicion bring android bringtofront

studio - view android definicion



BringToFront no funciona dentro de un diseƱo de coordinador (3)

Android Studio 2.0 Preview 4

Estoy usando para usar BringToFront para obtener un TextView para mostrar delante de los otros controles.

El documental bringToFront() dice que tiene que llamar a requestlayout invalidate . Lo que hago, pero no funciona.

tvLevel.bringToFront(); tvLevel.requestLayout(); tvLevel.invalidate();

Estoy usando este TextView dentro de un android.support.design.widget.CoordinatorLayout

Sin embargo, el siguiente código funciona. Pero solo soporta API 21 y superior. Pero necesito soportar la API 16.

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { tvLevel.setTranslationZ(4); tvLevel.invalidate(); }

O configurando la propiedad del atributo xml android:translationZ("4dp") funciona. Sin embargo, solo para API 21


Antes de KITKAT, este método debe ir seguido de llamadas a requestLayout () e invalidate () en el padre de la vista para forzar al padre a volver a dibujar con el nuevo pedido hijo.

Estos métodos tienen que ser llamados en el padre de la vista. Los estás llamando en la vista misma.

Esto debería funcionar.

tvLevel.bringToFront(); tvLevel.getParent().requestLayout(); tvLevel.getParent().invalidate();


bringToFront() trabaja para mí en android.support.design.widget.CoordinatorLayout . Mi entorno:

  • Android Studio 1.5.1
  • Dispositivo: Motorola con Android 4.1.2 (API 16)

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textStyle="bold" android:textSize="20sp"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher"/> </android.support.design.widget.CoordinatorLayout>

MainActivity.java:

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView = (TextView) findViewById(R.id.textView); textView.bringToFront(); }

Aquí están las capturas de pantalla:

Con textView.bringToFront();

Sin textView.bringToFront();


/** * Change the view''s z order in the tree, so it''s on top of other sibling * views. This ordering change may affect layout, if the parent container * uses an order-dependent layout scheme (e.g., LinearLayout). Prior * to {@link android.os.Build.VERSION_CODES#KITKAT} this * method should be followed by calls to {@link #requestLayout()} and * {@link View#invalidate()} on the view''s parent to force the parent to redraw * with the new child ordering. * * @see ViewGroup#bringChildToFront(View) */ public void bringToFront() { if (mParent != null) { mParent.bringChildToFront(this); } }

De acuerdo con esto puedes perderte la línea:

((View)myView.getParent()).requestLayout();

y funcionará, échale un vistazo.