Android superponer una vista ontop de todo?

¿Puedes superponer una vista encima de todo en android?

En el iPhone tendría la nueva vista establecer su frame.origin a (0,0) y su anchura y altura a la anchura y altura de self.view . Agregarlo a self.view haría que actuara como una superposición, cubriendo el contenido detrás (o si tuviera un fondo transparente y luego mostrara la vista detrás).

¿Hay una técnica similar en android? Me doy cuenta de que las vistas son ligeramente diferentes (hay tres tipos (o más …) relativelayout, linearlayout y framelayout), pero ¿hay alguna manera de superponer una vista encima de todo indiscriminadamente?

Simplemente use RelativeLayout o FrameLayout . La última vista secundaria superpondrá todo lo demás.

Android soporta un patrón que Cocoa Touch SDK no: Gestión de diseño.
Disposición para el iPhone significa colocar todo lo absoluto (además de algunos factores strech). Layout en android significa que los niños se colocarán en relación unos con otros.

Ejemplo (segundo EditarTexto cubrirá por completo el primero):

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/root_view"> <EditText android:layout_width="fill_parent" android:id="@+id/editText1" android:layout_height="fill_parent"> </EditText> <EditText android:layout_width="fill_parent" android:id="@+id/editText2" android:layout_height="fill_parent"> <requestFocus></requestFocus> </EditText> </FrameLayout> 

FrameLayout es un tipo de pila de vista. Hecho para los casos especiales.

RelativeLayout es bastante potente. Usted puede definir reglas como la vista A tiene que alinear la parte inferior del diseño padre , la vista B tiene que alinear la parte inferior a la parte superior , etc

Actualización basada en comentario

Normalmente se establece el contenido con setContentView(R.layout.your_layout) en onCreate (se inflar el diseño para usted). Puede hacerlo manualmente y llamar a setContentView(inflatedView) , no hay diferencia.

La vista en sí puede ser una vista única (como TextView ) o una jerarquía de diseño compleja (diseños anidados, ya que todos los diseños son vistas).

Después de llamar a setContentView su actividad conoce el aspecto de su contenido y puede utilizar (FrameLayout) findViewById(R.id.root_view) para recuperar cualquier vista dentro de esta jerarquía (Patrón general (ClassOfTheViewWithThisId) findViewById(R.id.declared_id_of_view) ).

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/root_view" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:id = "@+id/Everything" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <!-- other actual layout stuff here EVERYTHING HERE --> </LinearLayout> <LinearLayout android:id="@+id/overlay" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" > </LinearLayout> 

Ahora cualquier vista que añada en LinearLayout con android:id = "@+id/overlay" aparecerá como superposición con gravedad = derecha en Linear Layout con android:id="@+id/Everything"

Puedes usar bringToFront :

  View view=findViewById(R.id.btnStartGame); view.bringToFront(); 

La mejor manera es ViewOverlay , puede añadir cualquier dibujable como superposición a cualquier vista como su superposición desde Android JellyBeanMR2 (Api 18).

Agregue mMyDrawable a mMyView como su superposición:

 mMyDrawable.setBounds(0, 0, mMyView.getMeasuredWidth(), mMyView.getMeasuredHeight()) mMyView.getOverlay().add(mMyDrawable) 

He probado los awnsers antes pero esto no funcionó. Ahora he utilizado jsut un LinearLayout en vez de un TextureView, ahora está trabajando sin ningún problema. Espero que ayude a otros que tienen el mismo problema. 🙂

  view = (LinearLayout) findViewById(R.id.view); //this is initialized in the constructor openWindowOnButtonClick(); public void openWindowOnButtonClick() { view.setAlpha((float)0.5); FloatingActionButton fb = (FloatingActionButton) findViewById(R.id.floatingActionButton); final InputMethodManager keyboard = (InputMethodManager) getSystemService(getBaseContext().INPUT_METHOD_SERVICE); fb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // check if the Overlay should be visible. If this value is false, it is not shown -> show it. if(view.getVisibility() == View.INVISIBLE) { view.setVisibility(View.VISIBLE); keyboard.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0); Log.d("Overlay", "Klick"); } else if(view.getVisibility() == View.VISIBLE) { view.setVisibility(View.INVISIBLE); keyboard.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY); } 
  • Navegación de Android Visualización del menú de configuración mediante programación
  • Cambiar el tamaño de un mapa de bits a un valor fijo, pero sin cambiar la relación de aspecto
  • Problema de visibilidad de Android con la casilla de verificación
  • Relación de aspecto fija
  • ¿Cómo usar la aleta de vista con tres diseños?
  • Cómo detectar cuándo un conmutador se desliza, no se hace clic
  • View.onMeasure () no se llama
  • Android: alinear el centro de la vista con el de otra vista
  • El onQueryTextSubmit en SearchView se procesa dos veces en Android Java
  • Disposición personalizada de Android - onDraw () nunca se llama
  • Cómo inflar vista desde XML en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.