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?

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

  • Forzar un texto de edición para ocupar la pantalla completa dentro de una vista de desplazamiento
  • Práctica recomendada para la presentación dos vistas de texto en una fila
  • Android: reduce el espacio entre columnas en GridView
  • SwipeRefreshLayout detecta un evento de desplaza hacia abajo antes de iniciar onRefresh ()
  • ViewGroup más ligero para contenedores
  • Cómo puedo colocar el menú de desbordamiento debajo de la barra de herramientas en lugar del menú de desbordamiento para superponer la barra de aplicaciones
  • ¿Qué es android: layout_marginStart
  • RelativeLayout dentro de scrollview no se desplaza
  • ClassCastException: android.support.v7.widget.LinearLayoutCompat $ LayoutParams no se puede convertir en android.widget.LinearLayout $ LayoutParams
  • Centrando las vistas de RadioButton
  • ¿Qué significa layout_height = "0dp"?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.