Tengo un diseño lineal que consiste en vista de imagen y vista de texto, uno debajo del otro en un diseño lineal.
<LinearLayout android:orientation="horizontal" ... >
<ImageView
android:id="@+id/thumbnail"
android:layout_weight="0.8"
android:layout_width="0dip"
android:layout_height="fill_parent">
</ImageView>
<TextView
android:id="@+id/description"
android:layout_weight="0.2"
android:layout_width="0dip"
android:layout_height="wrap_content">
</TextView>
Es posible que falten algunas reglas, esto es para dar una idea de cómo se ve el diseño. Quiero otra pequeña vista de texto de digamos 50dip de largo y ancho, colocada sobre la vista de imagen, por "sobre" quise decir el índice z más que la vista de imagen, quiero colocar esto, en el centro y arriba (superpuesto) la vista de imagen.
Quiero saber cómo podemos colocar una vista sobre la otra, con un índice Z variable (preferiblemente en diseño lineal).
fuente
Intenta
.bringToFront()
:http://developer.android.com/reference/android/view/View.html#bringToFront%28%29
fuente
RelativeLayout funciona de la misma manera, gana la última imagen en el diseño relativo.
fuente
Cambiar el orden de sorteo
Una alternativa es cambiar el orden en que las vistas son dibujadas por el padre. Puede habilitar esta función desde ViewGroup llamando a setChildrenDrawingOrderEnabled (verdadero) y anulando getChildDrawingOrder (int childCount, int i) .
Ejemplo:
Salida:
Llamar
OrderLayout#setDrawOrder(int)
con 0-1-2 resulta en:fuente
Puede usar a
view.setZ(float)
partir del nivel 21 de API. Aquí puede encontrar más información.fuente
Compatibility: API < 21: No-op
. Así que creo que no funcionaráResolví el mismo problema agregando
android:elevation="1dp"
a qué vista la quieres sobre otra. Pero no puede mostrarse por debajo de 5.0, y tendrá una pequeña sombra, si puede aceptarlo, está bien.Entonces, la solución más correcta que es @kcoppock, dijo.
fuente
Pruebe esto en un diseño relativo:
Esto funciona para mi.
fuente
Hay una manera de usar LinearLayout. Simplemente configure el marginTop de su elemento anterior en el valor negativo correspondiente y asegúrese de que el elemento que desea en la parte superior esté detrás del elemento que desea en su XML.
fuente
AFAIK no puede hacerlo con diseños lineales, tendrá que optar por un diseño relativo .
fuente
Si está agregando la Vista mediante programación, puede usar
yourLayout.addView(view, 1);
donde
1 is the index
.fuente
Utilizo esto, si desea que solo se muestre una vista al frente cuando sea necesario:
containerView es el contenedor de vistas que se ordenarán, topView es la vista que quiero tener como la parte superior del contenedor.
para que se organicen varias vistas, está a punto de usar setChildrenDrawingOrderEnabled (verdadero) y reemplazar getChildDrawingOrder (int childCount, int i) como se mencionó anteriormente.
fuente