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.