Android: setContentView y LayoutInflater
¿Cuál es la diferencia entre setContentView
y LayoutInflater
? ¿Y cuál es la razón por la que usamos inflater
en toast
personalizadas y setContentView
en la alertbox
personalizada?
- Elemento de fila personalizada de Android para ListView
- ¿Cómo puedo especificar layout_below de forma programática para un LinearLayout?
- Aplicación de tema transparente a la actividad: no se ajusta a pantalla completa en dispositivo
- ¿Por qué mi listview no se desplaza?
- Android Gridview - Linear layout_height que se ignora
- Ocultar teclado después de búsquedas de usuarios?
- Android - Diseño XML vs programático
- crear Json desde sqlite en Android
- Android Create Drawable XML with Image esquinas redondeadas
- Cómo crear Android ActionBar con vista personalizada y pestañas
- Square ImageView
- Cambiar el ancho de la disposición lineal en android
- Android obtener altura y ancho disponibles para retrato y paisaje
Usted necesita entender algunas cosas antes,
En Android
, cada Activity
tiene un ViewRoot
y normalmente una Window
, adjunta a él. Sin embargo, un SurfaceView
tiene su propia ventana. Por lo tanto, si una Activity
tiene un SurfaceView
tendrá más de una ventana.
Esta actividad se utiliza para la visualización en pantalla que ocupa toda la ventana. Las vistas se adjuntan a esta ventana. Cada ventana tiene una superficie y la superficie utiliza Canvas
para dibujar en la superficie. La ventana de la vista se adjunta a posee la superficie.
Básicamente, ViewRoot
es responsable de recopilar y enviar la entrada y View
es responsable de gestionar eventos de enfoque / clave, Canvas
sólo es responsable de "dibujar" la operación utilizando onDraw()
.
setContentView(View)
es un método exclusivamente disponible para Activity
. Internamente llama al setContentView(View)
de Window
. Este método establece el contenido de la actividad en una vista explícita. Esta vista se coloca directamente en la jerarquía de la vista de la actividad. Llamar a esta función "bloquea" varias características de la ventana que, a partir de este punto, no pueden cambiarse. Por lo tanto, se llama una sola vez.
LayoutInflater
se utiliza para instanciar el archivo XML de diseño en sus objetos de vista correspondientes. Básicamente el propósito es crear objetos de vista en tiempo de ejecución dependiendo del requisito. El mejor ejemplo es el AdapterViews
como ListView
, Spinner
etc, donde un único objeto de vista correspondiente a un solo registro se crea en tiempo de ejecución dependiendo del número de registros.
En el caso de Toast
, LayoutInflater
se utiliza si la vista secundaria va a ser alterada dinámicamente, por ejemplo. Cambiar la imagen en tiempo de ejecución. Si no se deben realizar cambios en las vistas secundarias, simplemente setView(View)
de tostada es suficiente para establecer la vista de disposición para tostadas.
Lo mismo que Toast
es con el AlertDialog
si observas con cuidado.
Espero que te ayude.
setContentView ()
se utiliza generalmente para cargar una actividad. inflate
only Layout formó un objeto de clase view y, si es necesario, setContentView (view). Se setContentView (
actividad general a través de la interfaz setContentView (
), pero la forma de controlar el diseño se establece para que funcione en no actividad, que necesita la carga dinámica de LayoutInflater
. Por ejemplo, cuando se utiliza la clase de adaptador para el hilandero probablemente tiene que usar LayoutInflater
.
SetContentView (): este método define su diseño de fondo.
LoayoutInflater: suponga que si utiliza listview y su necesidad mostrar la lista 10 item.then layoutIflat hacer el trabajo para mostrar 10 item
Inflater: es la necesidad de su Layou diseño, mantener el valor de layoutInflat
Tostada de encargo: es cómo su tono de la secuencia output.custom significa su deseo para la demostración de la salida del diseño output.stylist.
Lo siento hermano yo también no sabía alertbox.Thank usted varía mucho
SetContentView utiliza internamente Inflater para lograr su funcionalidad. Es un método de conveniencia, que tendrá la responsabilidad de asignar el elemento de vista de padre / raíz para el diseño que se infla. También inicializa el ActionBar.
Aquí está el código fuente de Android: Activity.java
public void setContentView(int layoutResID) { getWindow().setContentView(layoutResID); initActionBar(); }
Com / android / internal / policy / impl / PhoneWindow.java
@Override public void setContentView(int layoutResID) { if (mContentParent == null) { installDecor(); } else { mContentParent.removeAllViews(); } mLayoutInflater.inflate(layoutResID, mContentParent); final Callback cb = getCallback(); if (cb != null && !isDestroyed()) { cb.onContentChanged(); } }
Respecto a su segunda pregunta, usamos inflater en el diálogo personalizado de tostada y alerta personalizada. Por ejemplo:
Toast toast = new Toast(getApplicationContext()); toast.setView(inflater.inflate(R.layout.custom_toast, (ViewGroup) findViewById(R.id.toast_layout_root)));
Por ejemplo creación de diálogo de alertas personalizadas:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setView(inflater.inflate(R.layout.dialog_signin, null));
En el caso de Alert Dialog, no proporcionamos la raíz del diseño hinchado, ya que el diseño se agrega al elemento FrameLayout con id 'custom' como se especifica en el archivo alert_dialog.xml
- Cómo obtener cadena de JSONObject sin nombre específico
- Eclipse ADT no es Samsung s3 como dispositivo Android?