SlideShare una empresa de Scribd logo
1 de 25
Descargar para leer sin conexión
Recursos en Android 101



         Fernando F. Gallego
              @ferdy182
Carpetas de recursos

●       Se encuentran en la carpeta /res
●       Se usan para almacenar imágenes, layouts, valores,
        internacionalización, animaciones, menús, etc.
●       Provee diferentes versiones de los recursos según unos
        calificadores
●       Nombrar las carpetas de la siguiente forma:
    ●     <nombre_carpeta>-<calificador>
    ●     Puedes añadir más de uno pero respetando un orden.

Ejemplos
    ●     drawable-hdpi: versión de alta densidad (~240dpi)
    ●     drawable-land-xhdpi: versión de extra alta densidad para el
          modo apaisado. (~320dpi)                                      Pro tip
    ●     values-es: Cadenas y valores cuando el locale es “es”         Excluye recursos
          (Español)                                                     que empiecen por
    ●     layout-large-land-car-night-finger-v11: Adivínalo!            _

                                                                        Tip
Más info: http://developer.android.                                     Carpetas sin
com/guide/topics/resources/providing-resources.html                     calificadores se
                                                                        consideran "por
                                                                        defecto"
Manejo automático de recursos

●   La carpeta de recursos correcta se selecciona
    automáticamente.
    ●    Salvo que lo evites
●   Las diferentes versiones del mismo recurso deben
    tener el mismo nombre de archivo.
●   La misma view en distintas versiones del layout debe
    tener el mismo id.
●   Si el recurso no encaja con ningún calificador, Android
    busca el que mejor encaje.
●   Los recursos se acceden de dos formas:
    ●    En código: R.string.app_name
    ●    En XML: @string/app_name

        Pro tip
        Accede a los recursos de la
        plataforma con android.R.anim.
        fade_in o @android:
        anim/fade_in
Soporte a distintas densidades de pantalla

●   Píxeles independientes de la densidad (dp)
    ●   El píxel independiente de la densidad es equivalente a un
        píxel físico en una pantalla de 160 dpi.
    ●   px = dp * (dpi / 160). Por ejemplo, en una pantall de 240 dpi, 1 dp
        equivalen a 1.5 píxeles físicos
    ●   Nunca NUNCA uses píxeles, usa dp en su lugar(o sp para
        tamaños de fuente).




    Tamaños relativos para bitmap drawables por densidad

    http://developer.android.com/guide/practices/screens_support.html
Dando soporte a múltiples tamaños de pantalla

●   Los calificadores para layouts sirven para ofrecer diferentes layouts para
    diferentes dispositivos y "evitar" la fragmentación.




    ●   Screen madness:
         ●  Usa smallestWidth: sw<N>dp (sw480dp, sw600dp)
         ●  Calificadores de Android 3.2 para diferentes layouts
               ●   320dp: típica pantalla de teléfono (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc).
               ●   480dp: Tablet tipo Dell Streak (480x800 mdpi).
               ●   600dp: tablet de 7” (600x1024 mdpi).
               ●   720dp: tablet de 10”(720x1280 mdpi, 800x1280 mdpi, etc)

         res/layout/main_activity.xml # Para móviles (smaller than 600dp available width)
         res/layout-sw600dp/main_activity.xml # Para tablets de 7” (desde 600dp de ancho y más grandes)
         res/layout-sw720dp/main_activity.xml # Para tablets de 10” (desde 720dp de ancho y más grandes)
Layouts eficientes

●   Los layouts se definen en archivos XML
    ● Bajo: /res/layout



●   Tipos de contenedores:
    ● LinearLayout: El más fácil de aprender. Muestra todas las vistas en

      horizontal o en vertical.
    ● RelativeLayout: Posiciona las vistas relativas a otras vistas. Bueno

      para crear layouts que se solapan con transparencias.
    ● FrameLayout: Layout básico. Apila las vistas una encima de otra. No

      muy útil.
    ● También TableLayout y GridLayout
Algoritmo de dibujo de Android

●   onMeasure: Cómo de grande quiere ser cada vista.
●   onLayout: Dibujado de cada vista.
Layouts eficientes (II)

●     Mantener la jerarquía de vistas
      plana acelera el dibujado de la
      interfaz
    ●    (aka usa RelativeLayout)

●     Reusa layouts
    ●  Puedes usar <include/> para
       añadir otro layout

<include android:id="@+id/cell1" layout="
@layout/workspace_screen" />


●     Evita anidar contenedores del
      mismo tipo
    ●   Usa <merge/>
    ●   "Engancha" sus descendientes
        a su ancestro
    ●   Buen combo con <include/>
Layouts eficientes(III)




●     No definas views que uses
      raramente
    ●   Usa ViewStub para cargar
        vistas bajo demanda

<ViewStub
    android:id="@+id/stub_import"
    android:layout="@layout/progress_overlay"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom" />




((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);
// or
View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();
Layouts eficientes (IV)

●   Usa el menor número de views posible. Usa compound drawables.




     <LinearLayout                                    <TextView
         android:layout_width="wrap_content"              android:layout_width="wrap_content"
         android:layout_height="wrap_content"             android:layout_height="wrap_content"
         android:layout_gravity="center_horizontal"       android:layout_gravity="center_horizontal"
         android:orientation="horizontal" >               android:drawableLeft="@drawable/ic_launcher"
         <ImageView                                       android:gravity="center"
             android:layout_width="wrap_content"          android:text="@string/hello_world" />
             android:layout_height="wrap_content"
             android:src="@drawable/ic_launcher" />
         <TextView
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:gravity="center"
             android:text="@string/hello_world"/>
     </LinearLayout>




    Más info:
    http://www.curious-creature.org/2009/03/16/android-layout-tricks-4-optimize-part-2/
Nine-patch Drawable

●       Archivos de imagen que se estiran selectivamente.
●       Define áreas para estirar y áreas donde irá el
        contenido.
●       La imagen se expande para albergar el contenido
        manteniendo formas complejas de la imagen como
        son esquinas o adornos.




    ●   Arriba e izquierda
         ●  Define las áreas que se estiran (pero no se
            encogen!)
    ●    Abajo y derecha
          ● Zona para el contenido, el resto es padding
State List Drawable
●   Se usan para ofrecer distintos drawables o colores según los diferentes
    estados de la vista.
●   El orden es importante. El primero que encaje.
●   Independientes de la densidad. Almacenar en
    /res/drawable/btn_nav_bg_selector.xml



             Disabled          Default        Pressed
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@drawable/btn_nav_forward_default" android:state_enabled="true"
         android:state_window_focused="false"/>
        <item android:drawable="@drawable/btn_nav_forward_disabled" android:state_enabled="false"
         android:state_window_focused="false"/>
        <item android:drawable="@drawable/btn_nav_forward_disabled" android:state_enabled="false"
         android:state_window_focused="true"/>
        <item android:drawable="@drawable/btn_nav_forward_pressed" android:state_pressed="true"/>
        <item android:drawable="@drawable/btn_nav_forward_pressed" android:state_enabled="true"
         android:state_focused="true"/>
        <item android:drawable="@drawable/btn_nav_forward_default" android:state_enabled="true"/>
        <item android:drawable="@drawable/btn_nav_forward_default" android:state_focused="true"/>
        <item android:drawable="@drawable/btn_nav_forward_default"/>
    </selector>
    android:background="@drawable/btn_nav_bg_selector"
Shape Drawable
●   Crea un drawable basado en una forma definida en XML (aún así requiere
    dotes artísticas!)




     <?xml version="1.0" encoding="utf-8"?>
     <shape xmlns:android="http://schemas.android.
                                                     Pro tip
     com/apk/res/android" >
                                                     Combinar con state list drawable:

         <gradient
                                                     <selector>
             android:angle="270"                         <item android:
             android:endColor="#2f6699"              state_pressed="true" >
             android:startColor="#449def" />                 <shape>
                                                                 ...
         <stroke                                             </shape>
             android:width="1dp"                         </item>
             android:color="#2f6699" />                  <item>
                                                             <shape>
         <corners android:radius="4dp" />                        ...
                                                             </shape>
         <padding                                        </item>
                                                     </selector>
              android:bottom="10dp"
              android:left="10dp"
              android:right="10dp"
              android:top="10dp" />
     </shape>
Clip Drawable
●   Recorta una porción de un drawable
●   Útil para personalizar barras de progreso

<?xml version="1.0" encoding="utf-8"?>
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:id="@android:id/background">
     <shape>
       <corners android:radius="20dip"/>
       <gradient android:startColor="#C0C0C0" android:centerColor="
#F8F8FF"
             android:centerY="0.75" android:endColor="#ffffff" android:
angle="90"/>
       <stroke android:width="1dp" android:color="#00aa00"/>
     </shape>
   </item>
   <item android:id="@android:id/progress">
     <clip>
       <shape>
         <corners android:radius="20dip"/>
         <gradient android:startColor="#CaCaC0" android:centerColor="
#2828FF"
               android:centerY="0.75" android:endColor="#325423" android:
angle="270"/>
       </shape>
     </clip>
   </item>
 </layer-list>

Más info:
http://vnamashko.blogspot.de/2012/05/customize-your-progress-bar.html
Inset Drawable
●   Estira un drawable en las direcciones
    indicadas
●   Útil para efectos biselados o pestañas
    tipo Holo


<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetBottom="0dp"
    android:insetLeft="-5dp"
    android:insetRight="-5dp"
    android:insetTop="-5dp" >

     <shape>
         <solid android:color="@color/stacked_green" />

         <stroke
             android:width="3dp"
             android:color="@color/accent_green" />
    </shape>
</inset>
    Más info:
    http://blog.stylingandroid.com/archives/1329
Otros drawables
●   Layer List
    ● Pinta diferentes drawables uno encima de otro en un solo drawable.

    ● Útil para componer.

●   Level List
    ● Similar al anterior pero solo muestra uno a la vez

    ● Útil para estados no estándar (ej. un semáforo)

●   Transition drawable
    ● Hace una transición con fundido entre dos drawables
                                                                    Layer List
    ● drawable.startTransition(500);

●   Clip drawable
    ● Recorta una porción de un drawable

    ● Útil para personalizar barras de progreso

●   Scale drawable
    ● Escala un drawable



    Más info:
    http://developer.android.
    com/guide/topics/resources/drawable-resource.html
Animaciones
                        <set xmlns:android="http://schemas.android.
                        com/apk/res/android" >
                            <scale
                                android:duration="5000"
                                android:fillAfter="false"
                                android:fromXScale="1.0"
●   Por interpolación           android:fromYScale="1.0"
    ● (tweening)                android:pivotX="50%"
                                android:pivotY="50%"
                                android:toXScale="3.0"
                                android:toYScale="3.0" />
                            <set>
                                <alpha xmlns:android="http://schemas.android.
                        com/apk/res/android"
                                    android:duration="3000"
                                    android:fromAlpha="0.2"
                                    android:toAlpha="1.0" />
                                <rotate
                                    android:duration="4000"
                                    android:fromDegrees="0"
                                    android:pivotX="50%"
                                    android:pivotY="50%"
                                    android:startOffset="700"
                                    android:toDegrees="-360"
                                    android:toYScale="0.0" />
                                <translate
                                    android:duration="3000"
                                    android:fromXDelta="100%"
                                    android:fromYDelta="60%"
                                    android:toXDelta="-20%"
                                    android:toYDelta="-30%"
                                    android:zAdjustment="bottom" />
                            </set>
                        </set>
Animaciones (II)

●   Animaciones basadas en frames
    ● AnimationDrawable


<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.
com/apk/res/android"
android:oneshot="false">
  <item android:drawable="@drawable/android_1“ android:
duration="100"/>
  <item android:drawable="@drawable/android_2“ android:
duration="100"/>
  <item android:drawable="@drawable/android_3“ android:
duration="100"/>
  <item android:drawable="@drawable/android_4“ android:
duration="100"/>
  <item android:drawable="@drawable/android_5“ android:
duration="100"/>
  <item android:drawable="@drawable/android_6“ android:
duration="100"/>
  <item android:drawable="@drawable/android_7“ android:
duration="100"/>
</animation-list>
Animaciones (III)
●    ValueAnimator
     ● Anima valores con un TypeEvaluator (Int, Float, ARGB, propio)

        ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f);
        animation.setDuration(1000);
        animation.start();

        ValueAnimator animation = ValueAnimator.ofObject(new
        MyTypeEvaluator(), startPropertyValue, endPropertyValue);
        animation.setDuration(1000);
        animation.start();


●    ObjectAnimator
     ● Anima propiedades de objetos usando un ValueAnimator


        ObjectAnimator anim = ObjectAnimator.ofFloat(foo, "alpha", 0f, 1f);
        anim.setDuration(1000);
        anim.start();


    ●    Retrocompatibilidad con la librería NineOldAndroids (http:
         //nineoldandroids.com/)
Estilos y temas

●   Estilos
    ● Similar a CSS

    ● Herencia con parent=“…”

    ● Usar el atributo style en XML: style="@style/CodeFont"




    ●   Hereda tus propios styles con .




    ●   Guardar en /res/values/styles.xml
Temas

●   Personaliza un tema predefinido
     <style name="Theme.Junaio" parent="android:Theme">
            <item name="android:windowBackground">@null</item>
            <item name="android:windowNoTitle">true</item>
            <item name="android:windowFullscreen">false</item>
            <item name="android:buttonStyleToggle">@style/Topbar.Button</item>
     </style>

●   Aplica temas a actividades concretas o a toda la aplicación
    ● <activity android:theme="@style/Theme.Junaio">

    ● <application android:theme="@style/Theme.Junaio">




Pro tip
Los temas predefinidos no están bien documentados y pueden ser liosos. No hay consistencia de
nombres
buttonStyle
buttonStyleToggle
radioButtonStyle
…
Soportando distintas versiones de la plataforma

●   Hasta Android 11:
    ● Theme.Black

    ● Theme.Light

●   De Android 11 al 13:
    ● Theme.Holo

    ● Theme.Holo.Light

●   Desde Android 14:
    ● Theme.Holo

    ● Theme.Holo.Light.DarkActionBar



●   Crea 3 carpetas para estilos:
     /res/values/styles.xml
          <style name="AppTheme" parent="android:Theme.Light" />
     /res/values-v11/styles.xml
          <style name="AppTheme" parent="android:Theme.Holo.Light" />
     /res/values-v14/styles.xml
          <style name="AppTheme" parent="android:Theme.Holo.Light.
         DarkActionBar" />
●   AndroidManifest.xml
     android:theme="@android:style/AppTheme"
Values
●   Valores que puedes definir en carpetas de recursos:
    ● Booleanos (true | false)
        <boolean name=“someboolean”>true</boolean>
        getResources().getBoolean(R.bool.someboolean) / @bool/someboolean

    ●   Color (#RGB | #RRGGBB | #ARGB | #AARRGGBB)
        <color name=“somecolor”>#FF898989</color>
        getResources().getColor(R.color.somecolor) / @color/somecolor

    ●   Dimensión (dp | sp | pt | px | mm | in)
        <dimen name=“somedimension”>15dp</dimen>
        getResources().getDimension(R.dimen.somesimension) /
        @dimen/somedimension

    ●   ID
        <item type=“id” name=“someid” />
        findViewById(R.id.someid) / @id/someid

    ●   Enteros
        <integer name=“someint”>42</integer>
Arrays

●   Array de enteros o strings
    ● getIntArray(R.array.someintarray)
●   Array tipado
    ● Distintos tipos
Gracias




     ¿Preguntas?
          Fernando F. Gallego
            twitter: @ferdy182

Más contenido relacionado

Similar a Recursos en Android 101

Similar a Recursos en Android 101 (20)

Portafolio
PortafolioPortafolio
Portafolio
 
LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"
 
7.android layout
7.android   layout7.android   layout
7.android layout
 
El Ferrocarril Contra Los Arboles Muertos2
El Ferrocarril Contra Los Arboles Muertos2El Ferrocarril Contra Los Arboles Muertos2
El Ferrocarril Contra Los Arboles Muertos2
 
Recursos alternativos
Recursos alternativosRecursos alternativos
Recursos alternativos
 
Pract 6
Pract 6Pract 6
Pract 6
 
Twig y otros "themas" en Drupal 8
Twig y otros "themas" en Drupal 8Twig y otros "themas" en Drupal 8
Twig y otros "themas" en Drupal 8
 
Tema 4 3_2_interfaces_de_usuario
Tema 4 3_2_interfaces_de_usuarioTema 4 3_2_interfaces_de_usuario
Tema 4 3_2_interfaces_de_usuario
 
Reportes android
Reportes androidReportes android
Reportes android
 
Reportes android
Reportes androidReportes android
Reportes android
 
Semana 3 Responsive Design y Media Queries
Semana 3   Responsive Design y Media QueriesSemana 3   Responsive Design y Media Queries
Semana 3 Responsive Design y Media Queries
 
2014 04 padrino
2014 04 padrino2014 04 padrino
2014 04 padrino
 
Tema 4 3_1_interfaces_de_usuario
Tema 4 3_1_interfaces_de_usuarioTema 4 3_1_interfaces_de_usuario
Tema 4 3_1_interfaces_de_usuario
 
Introduccion android
Introduccion androidIntroduccion android
Introduccion android
 
Pract 3
Pract 3Pract 3
Pract 3
 
Pract 3
Pract 3Pract 3
Pract 3
 
S5 android ui
S5 android uiS5 android ui
S5 android ui
 
Tema 4.5 interfaces
Tema 4.5 interfacesTema 4.5 interfaces
Tema 4.5 interfaces
 
Reportes de actividad
Reportes de actividadReportes de actividad
Reportes de actividad
 
Reportes de actividades
Reportes de actividadesReportes de actividades
Reportes de actividades
 

Último

definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramDIDIERFERNANDOGUERRE
 

Último (20)

definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ram
 

Recursos en Android 101

  • 1. Recursos en Android 101 Fernando F. Gallego @ferdy182
  • 2. Carpetas de recursos ● Se encuentran en la carpeta /res ● Se usan para almacenar imágenes, layouts, valores, internacionalización, animaciones, menús, etc. ● Provee diferentes versiones de los recursos según unos calificadores ● Nombrar las carpetas de la siguiente forma: ● <nombre_carpeta>-<calificador> ● Puedes añadir más de uno pero respetando un orden. Ejemplos ● drawable-hdpi: versión de alta densidad (~240dpi) ● drawable-land-xhdpi: versión de extra alta densidad para el modo apaisado. (~320dpi) Pro tip ● values-es: Cadenas y valores cuando el locale es “es” Excluye recursos (Español) que empiecen por ● layout-large-land-car-night-finger-v11: Adivínalo! _ Tip Más info: http://developer.android. Carpetas sin com/guide/topics/resources/providing-resources.html calificadores se consideran "por defecto"
  • 3. Manejo automático de recursos ● La carpeta de recursos correcta se selecciona automáticamente. ● Salvo que lo evites ● Las diferentes versiones del mismo recurso deben tener el mismo nombre de archivo. ● La misma view en distintas versiones del layout debe tener el mismo id. ● Si el recurso no encaja con ningún calificador, Android busca el que mejor encaje. ● Los recursos se acceden de dos formas: ● En código: R.string.app_name ● En XML: @string/app_name Pro tip Accede a los recursos de la plataforma con android.R.anim. fade_in o @android: anim/fade_in
  • 4. Soporte a distintas densidades de pantalla ● Píxeles independientes de la densidad (dp) ● El píxel independiente de la densidad es equivalente a un píxel físico en una pantalla de 160 dpi. ● px = dp * (dpi / 160). Por ejemplo, en una pantall de 240 dpi, 1 dp equivalen a 1.5 píxeles físicos ● Nunca NUNCA uses píxeles, usa dp en su lugar(o sp para tamaños de fuente). Tamaños relativos para bitmap drawables por densidad http://developer.android.com/guide/practices/screens_support.html
  • 5. Dando soporte a múltiples tamaños de pantalla ● Los calificadores para layouts sirven para ofrecer diferentes layouts para diferentes dispositivos y "evitar" la fragmentación. ● Screen madness: ● Usa smallestWidth: sw<N>dp (sw480dp, sw600dp) ● Calificadores de Android 3.2 para diferentes layouts ● 320dp: típica pantalla de teléfono (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc). ● 480dp: Tablet tipo Dell Streak (480x800 mdpi). ● 600dp: tablet de 7” (600x1024 mdpi). ● 720dp: tablet de 10”(720x1280 mdpi, 800x1280 mdpi, etc) res/layout/main_activity.xml # Para móviles (smaller than 600dp available width) res/layout-sw600dp/main_activity.xml # Para tablets de 7” (desde 600dp de ancho y más grandes) res/layout-sw720dp/main_activity.xml # Para tablets de 10” (desde 720dp de ancho y más grandes)
  • 6. Layouts eficientes ● Los layouts se definen en archivos XML ● Bajo: /res/layout ● Tipos de contenedores: ● LinearLayout: El más fácil de aprender. Muestra todas las vistas en horizontal o en vertical. ● RelativeLayout: Posiciona las vistas relativas a otras vistas. Bueno para crear layouts que se solapan con transparencias. ● FrameLayout: Layout básico. Apila las vistas una encima de otra. No muy útil. ● También TableLayout y GridLayout
  • 7. Algoritmo de dibujo de Android ● onMeasure: Cómo de grande quiere ser cada vista. ● onLayout: Dibujado de cada vista.
  • 8. Layouts eficientes (II) ● Mantener la jerarquía de vistas plana acelera el dibujado de la interfaz ● (aka usa RelativeLayout) ● Reusa layouts ● Puedes usar <include/> para añadir otro layout <include android:id="@+id/cell1" layout=" @layout/workspace_screen" /> ● Evita anidar contenedores del mismo tipo ● Usa <merge/> ● "Engancha" sus descendientes a su ancestro ● Buen combo con <include/>
  • 9. Layouts eficientes(III) ● No definas views que uses raramente ● Usa ViewStub para cargar vistas bajo demanda <ViewStub android:id="@+id/stub_import" android:layout="@layout/progress_overlay" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" /> ((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE); // or View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();
  • 10. Layouts eficientes (IV) ● Usa el menor número de views posible. Usa compound drawables. <LinearLayout <TextView android:layout_width="wrap_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal" android:orientation="horizontal" > android:drawableLeft="@drawable/ic_launcher" <ImageView android:gravity="center" android:layout_width="wrap_content" android:text="@string/hello_world" /> android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="@string/hello_world"/> </LinearLayout> Más info: http://www.curious-creature.org/2009/03/16/android-layout-tricks-4-optimize-part-2/
  • 11. Nine-patch Drawable ● Archivos de imagen que se estiran selectivamente. ● Define áreas para estirar y áreas donde irá el contenido. ● La imagen se expande para albergar el contenido manteniendo formas complejas de la imagen como son esquinas o adornos. ● Arriba e izquierda ● Define las áreas que se estiran (pero no se encogen!) ● Abajo y derecha ● Zona para el contenido, el resto es padding
  • 12. State List Drawable ● Se usan para ofrecer distintos drawables o colores según los diferentes estados de la vista. ● El orden es importante. El primero que encaje. ● Independientes de la densidad. Almacenar en /res/drawable/btn_nav_bg_selector.xml Disabled Default Pressed <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/btn_nav_forward_default" android:state_enabled="true" android:state_window_focused="false"/> <item android:drawable="@drawable/btn_nav_forward_disabled" android:state_enabled="false" android:state_window_focused="false"/> <item android:drawable="@drawable/btn_nav_forward_disabled" android:state_enabled="false" android:state_window_focused="true"/> <item android:drawable="@drawable/btn_nav_forward_pressed" android:state_pressed="true"/> <item android:drawable="@drawable/btn_nav_forward_pressed" android:state_enabled="true" android:state_focused="true"/> <item android:drawable="@drawable/btn_nav_forward_default" android:state_enabled="true"/> <item android:drawable="@drawable/btn_nav_forward_default" android:state_focused="true"/> <item android:drawable="@drawable/btn_nav_forward_default"/> </selector> android:background="@drawable/btn_nav_bg_selector"
  • 13. Shape Drawable ● Crea un drawable basado en una forma definida en XML (aún así requiere dotes artísticas!) <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android. Pro tip com/apk/res/android" > Combinar con state list drawable: <gradient <selector> android:angle="270" <item android: android:endColor="#2f6699" state_pressed="true" > android:startColor="#449def" /> <shape> ... <stroke </shape> android:width="1dp" </item> android:color="#2f6699" /> <item> <shape> <corners android:radius="4dp" /> ... </shape> <padding </item> </selector> android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" /> </shape>
  • 14. Clip Drawable ● Recorta una porción de un drawable ● Útil para personalizar barras de progreso <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background"> <shape> <corners android:radius="20dip"/> <gradient android:startColor="#C0C0C0" android:centerColor=" #F8F8FF" android:centerY="0.75" android:endColor="#ffffff" android: angle="90"/> <stroke android:width="1dp" android:color="#00aa00"/> </shape> </item> <item android:id="@android:id/progress"> <clip> <shape> <corners android:radius="20dip"/> <gradient android:startColor="#CaCaC0" android:centerColor=" #2828FF" android:centerY="0.75" android:endColor="#325423" android: angle="270"/> </shape> </clip> </item> </layer-list> Más info: http://vnamashko.blogspot.de/2012/05/customize-your-progress-bar.html
  • 15. Inset Drawable ● Estira un drawable en las direcciones indicadas ● Útil para efectos biselados o pestañas tipo Holo <?xml version="1.0" encoding="utf-8"?> <inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetBottom="0dp" android:insetLeft="-5dp" android:insetRight="-5dp" android:insetTop="-5dp" > <shape> <solid android:color="@color/stacked_green" /> <stroke android:width="3dp" android:color="@color/accent_green" /> </shape> </inset> Más info: http://blog.stylingandroid.com/archives/1329
  • 16. Otros drawables ● Layer List ● Pinta diferentes drawables uno encima de otro en un solo drawable. ● Útil para componer. ● Level List ● Similar al anterior pero solo muestra uno a la vez ● Útil para estados no estándar (ej. un semáforo) ● Transition drawable ● Hace una transición con fundido entre dos drawables Layer List ● drawable.startTransition(500); ● Clip drawable ● Recorta una porción de un drawable ● Útil para personalizar barras de progreso ● Scale drawable ● Escala un drawable Más info: http://developer.android. com/guide/topics/resources/drawable-resource.html
  • 17. Animaciones <set xmlns:android="http://schemas.android. com/apk/res/android" > <scale android:duration="5000" android:fillAfter="false" android:fromXScale="1.0" ● Por interpolación android:fromYScale="1.0" ● (tweening) android:pivotX="50%" android:pivotY="50%" android:toXScale="3.0" android:toYScale="3.0" /> <set> <alpha xmlns:android="http://schemas.android. com/apk/res/android" android:duration="3000" android:fromAlpha="0.2" android:toAlpha="1.0" /> <rotate android:duration="4000" android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:startOffset="700" android:toDegrees="-360" android:toYScale="0.0" /> <translate android:duration="3000" android:fromXDelta="100%" android:fromYDelta="60%" android:toXDelta="-20%" android:toYDelta="-30%" android:zAdjustment="bottom" /> </set> </set>
  • 18. Animaciones (II) ● Animaciones basadas en frames ● AnimationDrawable <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android. com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/android_1“ android: duration="100"/> <item android:drawable="@drawable/android_2“ android: duration="100"/> <item android:drawable="@drawable/android_3“ android: duration="100"/> <item android:drawable="@drawable/android_4“ android: duration="100"/> <item android:drawable="@drawable/android_5“ android: duration="100"/> <item android:drawable="@drawable/android_6“ android: duration="100"/> <item android:drawable="@drawable/android_7“ android: duration="100"/> </animation-list>
  • 19. Animaciones (III) ● ValueAnimator ● Anima valores con un TypeEvaluator (Int, Float, ARGB, propio) ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f); animation.setDuration(1000); animation.start(); ValueAnimator animation = ValueAnimator.ofObject(new MyTypeEvaluator(), startPropertyValue, endPropertyValue); animation.setDuration(1000); animation.start(); ● ObjectAnimator ● Anima propiedades de objetos usando un ValueAnimator ObjectAnimator anim = ObjectAnimator.ofFloat(foo, "alpha", 0f, 1f); anim.setDuration(1000); anim.start(); ● Retrocompatibilidad con la librería NineOldAndroids (http: //nineoldandroids.com/)
  • 20. Estilos y temas ● Estilos ● Similar a CSS ● Herencia con parent=“…” ● Usar el atributo style en XML: style="@style/CodeFont" ● Hereda tus propios styles con . ● Guardar en /res/values/styles.xml
  • 21. Temas ● Personaliza un tema predefinido <style name="Theme.Junaio" parent="android:Theme"> <item name="android:windowBackground">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:windowFullscreen">false</item> <item name="android:buttonStyleToggle">@style/Topbar.Button</item> </style> ● Aplica temas a actividades concretas o a toda la aplicación ● <activity android:theme="@style/Theme.Junaio"> ● <application android:theme="@style/Theme.Junaio"> Pro tip Los temas predefinidos no están bien documentados y pueden ser liosos. No hay consistencia de nombres buttonStyle buttonStyleToggle radioButtonStyle …
  • 22. Soportando distintas versiones de la plataforma ● Hasta Android 11: ● Theme.Black ● Theme.Light ● De Android 11 al 13: ● Theme.Holo ● Theme.Holo.Light ● Desde Android 14: ● Theme.Holo ● Theme.Holo.Light.DarkActionBar ● Crea 3 carpetas para estilos: /res/values/styles.xml <style name="AppTheme" parent="android:Theme.Light" /> /res/values-v11/styles.xml <style name="AppTheme" parent="android:Theme.Holo.Light" /> /res/values-v14/styles.xml <style name="AppTheme" parent="android:Theme.Holo.Light. DarkActionBar" /> ● AndroidManifest.xml android:theme="@android:style/AppTheme"
  • 23. Values ● Valores que puedes definir en carpetas de recursos: ● Booleanos (true | false) <boolean name=“someboolean”>true</boolean> getResources().getBoolean(R.bool.someboolean) / @bool/someboolean ● Color (#RGB | #RRGGBB | #ARGB | #AARRGGBB) <color name=“somecolor”>#FF898989</color> getResources().getColor(R.color.somecolor) / @color/somecolor ● Dimensión (dp | sp | pt | px | mm | in) <dimen name=“somedimension”>15dp</dimen> getResources().getDimension(R.dimen.somesimension) / @dimen/somedimension ● ID <item type=“id” name=“someid” /> findViewById(R.id.someid) / @id/someid ● Enteros <integer name=“someint”>42</integer>
  • 24. Arrays ● Array de enteros o strings ● getIntArray(R.array.someintarray) ● Array tipado ● Distintos tipos
  • 25. Gracias ¿Preguntas? Fernando F. Gallego twitter: @ferdy182