studio - ¿Cómo colocar una vista sobre otra en el diseño relativo programáticamente en Android?
programacion android pdf 2018 (10)
Esto funciona para mí:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="220dp"
android:gravity="bottom"
android:orientation="vertical"
android:theme="@style/ThemeOverlay.AppCompat.Dark">
<ImageView
android:id="@+id/details_wrapper"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:paddingBottom="16dip"
android:scaleType="centerCrop"
android:src="@drawable/temp_nav_image">
</ImageView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/nav_header_vertical_spacing"
android:text="Kapil Rajput"
android:textStyle="bold"
android:textColor="@android:color/black"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"/>
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:textStyle="bold"
android:text="[email protected]"/>
</LinearLayout>
</RelativeLayout>
Estoy creando programáticamente la vista en Android. El diseño de los padres es un diseño relativo y estoy agregando dos vistas en él. La primera es la vista de lista y la segunda es la vista personalizada. Quiero que mi segunda vista personalizada aparezca en la parte superior de la lista, pero de alguna manera se oculta detrás de la vista de lista. ¿Cómo me aseguro de que mi vista personalizada esté en la parte superior?
Nuevamente: las vistas se colocan en el diseño en el orden en que se agregan. La pregunta es: ¿está realmente oculto o no se procesa? Compruebe LogCat y la consola para los errores. Si solo agrega esta vista personalizada única a su diseño, ¿se procesa sin ningún problema? Si es así, asegúrese de que realmente agrega su costumbre a la misma vista principal (grupo), al agregar su ListView. Si no obtiene más, proporcione el código de muestra correspondiente.
Prueba esto :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<YourCustomView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true" />
</RelativeLayout>
Trate de usar: View.bringToFront();
Use FrameLayout, el diseño del cuadro muestra la última vista agregada en la parte superior ..
Utilicé el diseño relativo y el orden de las vistas determina de alguna manera cuál está en la parte superior.
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
<SeekBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:splitTrack="false"
android:layout_alignParentTop="true"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"/>
En este diseño, la vista de texto estará en la parte superior de la barra de búsqueda
lo que deberías hacer es usar android:layout_below
o android:layout_above
. por lo que debe hacer esto:
RelativeLayout.LayoutParams params= new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.BELOW, R.id.below_id);
viewToLayout.setLayoutParams(params);
Y te sugiero que eches un vistazo a esta respuesta.
espero que esto ayude
Realice la vista principal como diseño relativo y agregue ambas vistas en xml. No funcionará para Diseño lineal. Y luego agregue FirstView.bringToFront () programtically.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/bg"
android:orientation="vertical"
android:padding="15dp">
<ImageView
android:id="@+id/imgIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_gravity="center"
android:layout_marginBottom="-30dp"
android:layout_marginTop="30dp"
android:src="@mipmap/login_logo" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/imgIcon"
android:layout_gravity="bottom"
android:background="#B3FFFFFF"
android:gravity="center"
android:orientation="vertical"
android:paddingLeft="10dp"
android:paddingRight="10dp">
<View 1/>
<View 2/>
</LinearLayout>
Java file
imgIcon.brigtToFront();
Solución 1: Vista # bringToFront () View.bringToFront()
debería funcionar si se usa correctamente. Quizás olvidó esto (fuente: http://developer.android.com/reference/android/view/View.html#bringToFront() ):
Antes de KITKAT, este método debe ir seguido de llamadas a requestLayout () e invalidate ()
Solución 2 - Vuelva a colocar la vista
Si View.bringToFront()
no funciona, intente eliminar y agregar la vista nuevamente. La ventaja es que también tiene el mismo código en las versiones pre-KITKAT.
Lo estoy haciendo de esta manera en mi código:
ViewGroup parentView = (ViewGroup) (listView.getParent());
parentView.removeView(addFab);
parentView.addView(addFab);
Las vistas se colocan en el orden en que se agregan a sus vistas principales. La última vista agregada estará en la parte superior. Es posible que también desee probar View.bringToFront()
http://developer.android.com/reference/android/view/View.html#bringToFront()