Ir al contenido principal

Android: Crear Layouts XML

Un layout define la arquitectura de la UI de una Activity, donde se definen todos los elementos que aparecerán en ella.

En Android se pueden crear estos elementos dinámicamente o con ficheros XML. Cuando hay elementos que no se conocen en tiempo de compilación, hay que crearlos dinámicamente (View, ViewGroup). Si la aplicación sabe a priori todos los elementos que va a tener, normalmente se utilizan los ficheros XML.

¿Qué características tienen estos ficheros XML?

  - Contienen los elementos y contenedores necesarios para formar una vista.
  - Permiten una mejor separación de la presentación y el código que controla el comportamiento.
  - Se crean en el directorio res/layout.
  - Cada fichero debe contener un solo elemento root, siendo éste un objeto View o ViewGroup:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:orientation="vertical" >

  - Los atributos de los elementos XML describen su apariencia y/o comportamiento.
  - Podemos crear nuestros propios elementos creando subclases de android.view.View.
  - El fichero R.java que se crea en gen/, permite acceder a los elementos de estos ficheros desde código Java.
  - Si queremos que un elemento sea accesible desde Java, tenemos que asignarle un identificador:
        * android:id="@+id/my_button" : debe crearse el elemento my_button y añadirse a R.java
        * android:id="@id/my_button" : hace referencia a un elemento ya existente en R.java
        * android:id="@android:id/empty" : hace referencia al id de un recurso propio de Android.R en vez del fichero local R.java.


¿Qué ocurre cuando compilamos la aplicación?
Cada XML se convierte en una View que debe ser cargada desde el método Activity.onCreate() con setContentView(). Para acceder a sus elementos, utilizamos el método findViewById() y el identificador del elemento (R.id.nombre).

EJEMPLO: Imaginemos que hemos creado un layout llamado res/layout/main.xml, con el siguiente botón:
<Button android:id="@+id/my_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/my_button_text"/>

Al compilar la aplicación, desde Java tendremos acceso a él de la siguiente manera:
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main); // Fichero layout main.xml
    Button btn=(Button) findViewById(R.id.my_button);
}

En siguientes posts aprenderemos más elementos que puede tener un Layout.

Referencia: http://developer.android.com/guide/topics/ui/declaring-layout.html

Comentarios

Entradas populares de este blog

Leer un fichero properties con java.util.Properties

Los ficheros .properties son simples ficheros de texto que se suelen utilizar para guardar parámetros de configuración, en forma de pares clave-valor. Ejemplo de fichero: configuration.properties #User parameters user.name=Ana user.language=spanish Si estamos usando Java, podemos utilizar la clase java.util.Properties para leer los parámetros de este fichero: private static final String USER_NAME = "user.name"; private static final String USER_LANGUAGE = "user.language"; public void showProperties() throws Exception { Properties p = new Properties(); InputStream is = App.class.getResourceAsStream("/configuration.properties"); p.load(is); is.close(); String userName = p.getProperty(USER_NAME); String userCountry = p.getProperty(USER_LANGUAGE); System.out.println("userName: "+userName); System.out.println("userLanguage: "+userCountry); } Después de ejecutar este método, obtendríamos la siguiente salida: ...

JSF 2.0: Managed Beans (III)

Anteriormente ya hemos visto que cuando se declara un bean, tenemos que darle un scope: application, session, view, request, none. Un scope es un mapeo entre nombres y objetos que se almacena durante un determinado periodo de tiempo. En este post vamos a explicar cada uno de ellos. Si declaramos el bean desde el fichero faces-config.xml, indicamos el scope en <managed-bean-scope> y si queremos hacerlo con anotaciones, utilizaremos @{Application,Session,View,Request,None}Scoped Application Con este scope, se guarda la información durante toda la vida de la aplicación web, independientemente de todas las peticiones y sesiones que se realicen. Este bean se instancia con la primera petición a la aplicación y desaparece cuando la aplicación web se elimina del servidor. Si queremos que el bean se instancie antes de que se muestre la primera página de la aplicación, usamos la propiedad eager a true. @ManagedBean(eager=true) ó <managed-bean eager="true"> Session...

JSF 2.0: Message bundles

Los message bundles son ficheros .properties que guardan mensajes del tipo clave=valor. Si centralizamos todos los mensajes de nuestra aplicación en estos ficheros, es más fácil poder localizarlos si queremos realizar algún cambio y también nos ayuda para la internacionalización de la aplicación. Ejemplo: messages.properties (en src/java/com/examples) con dos mensajes name=Tu nombre: age=Tu edad: ¿Cómo los declaramos? 1) En cada página JSF donde lo necesitemos <f:loadBundle basename="com.examples.messages" var="msgs"/> 2) De manera global en faces-config.xml <application>      <resource-bundle>           <base-name>com.examples.messages</base-name>           <var>msg</var>      </resource-bundle> </application> Esta opción es más eficiente ya que sólo crea el bundle una v...