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).
- Cambiar el tamaño del texto del elemento en la vista de navegación
- GetMeasuredWidth devuelve un valor totalmente erróneo
- Se debe hacer clic en SearchView dos veces para abrir
- Android, programatically diseño de una vista de botón?
- error: Sólo el subproceso original que creó una jerarquía de vista puede tocar sus vistas
¿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?
- No se puede importar android.support.design.widget.NavigationView
- Obtener el id de una vista como String en el evento onClick
- El niño especificado ya tiene un padre
- ¿Cómo puedo inhabilitar una vista detrás de mi SlidingDrawer en Android?
- Stream de video de autorrotación TextureView en Nexus4 (pero no en Galaxy S4)
- ¿Cómo puedo obtener el punto / coordinar el usuario hizo clic en una vista de Android?
- Modificación de atributos anidados en un Layout incluido
- Android obtiene la vista de Preferencia en PreferenciaActividad
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); }
- Leer todos los números de teléfono del contacto en android
- No se puede obtener la vista de búsqueda en la barra de acciones para trabajar