Este documento presenta consejos para diseñar experiencias de usuario óptimas para tabletas Android. Proporciona recomendaciones sobre diseños horizontales, notificaciones enriquecidas, uso de imágenes, palpabilidad, temas visuales, barras de acción, fragmentos y funcionalidad de arrastrar y soltar. El objetivo es lograr "magia" en las tabletas aprovechando las capacidades únicas de la plataforma.
2. Brasil - #appsum11br
Argentina - #appsum11ar
México - #appsum11m
developer.motorola.com
Título de presentación Versión 1.0 24.02.09
3.
4. Estamos en un espacio
completamente nuevo.
Traiga abordo los elementos apropiados.
5. Alcance la magia
01 MANTENGA EL DETALLE ERGONÓMICO
02 INVOLUCRE LOS SENTIDOS
03 USE UNA ESTÉTICA FABULOSA
04 HÁGALO EVIDENTE
6. Alcance la magia
01 MANTENGA EL DETALLE ERGONÓMICO
Diseños horizontales
Notificaciones enriquecidas
Tamaños de texto
02 INVOLUCRE LOS SENTIDOS
Imágenes
Palpabilidad
03 USE UNA ESTÉTICA FABULOSA
Temas, temas, temas
04 HÁGALO EVIDENTE
Barras de acción
Fragmentos
Función arrastrar y colocar
7. Haga de cuenta que sus usuarios
usan la orientación horizontal
20. Notificaciones enriquecidas
Use el formato Notification.Builder
Notification.Builder builder = new
Notification.Builder( this );
Como AlertDialog.Builder
21. Notificaciones enriquecidas
Cree la notificación que desee
builder.setSmallIcon(R.drawable.icon)
.setContentTitle(título)
.setContentText(texto)
.setContentIntent(pintent) // Un intento pendiente
.setLargeIcon(myBitmap)
;
23. Notificaciones enriquecidas
Alcance la magia. Cree un botón interactivo
RemoteViews layout = new RemoteViews(
getPackageName(), R.layout.notification);
layout.setTextViewText(R.id.notification_title,
getString(R.string.app_name));
layout.setOnClickPendingIntent
(R.id.notification_button,
getDialogPendingIntent("Tapped") );
builder.setContent(layout);
24. Notificaciones enriquecidas
Estrategia para compatibilidad con versiones anteriores
private static boolean isHoneycomb =
android.os.Build.VERSION.SDK_INT > 10;
if (!isHoneycomb)
// inicie un intento de actividad
else
// inicie otra
25. Alcance la magia
01 MANTENGA EL DETALLE ERGONÓMICO
02 INVOLUCRE LOS SENTIDOS
Imágenes
Palpabilidad
03 USE UNA ESTÉTICA FABULOSA
04 HÁGALO EVIDENTE
26. La vista triunfa sobre los
demás sentidos.
Brain Rules
Dr. John Medina
29. Imágenes
Seleccione una estrategia de imagen
¿Una serie de imágenes y deje que Android gradúe
automáticamente el tamaño?
¿Personalizar una serie de recursos según los distintos tamaños y
densidades?
¿Captar la densidad más usada?
¿Recuperar dinámicamente imágenes en el tiempo de ejecución y la
graduación para el dispositivo?
30. Imágenes
Memoria frente a tamaño de archivo: un ejemplo
Ampliación automática
32 MB de memoria
324 KB de tamaño
Conjuntos de imágenes
23 MB de memoria
728 KB de tamaño
31. La ampliación automática consume
memoria.
Las configuraciones de imágenes
personalizadas aumentan el tamaño
del archivo.
32. Imágenes
Imágenes grandes de prueba en el tiempo de ejecución para
ahorrar memoria
BitmapFactory.Options options = new
BitmapFactory.Options();
options.inJustDecodeBounds = false;
options.inSampleSize = 4;
options.inScaled = true;
options.inTargetDensity = screenDensity;
Bitmap bitmap =
BitmapFactory.decodeResource(
getResources(),
R.drawable.clover, options);
33. Imágenes
Dónde colocar las imágenes y los iconos
Predeterminado, graduado
automáticamente
Iconos de alta resolución
Graduadas previamente
Hacer coincidir para la densidad
estilo con 3.0
36. Palpabilidad
Asegúrese de poder pulsar todos los objetivos
public View getView( int position,
View convertView, ViewGroup parent) {
ImageView i = new ImageView(mContext);
i.setImageResource(mImageIds[position]);
i.setLayoutParams(new Gallery.LayoutParams(
300, 200));
i.setScaleType(ImageView.ScaleType.FIT_XY);
i.setBackgroundResource(
mGalleryItemBackground);
return i;
}
37. Palpabilidad
Observe cómo se transfieren las imágenes a través de los
dispositivos
160 dpi - medio
16:9 relación de aspecto
38. Alcance la magia
01 MANTENGA EL DETALLE ERGONÓMICO
02 INVOLUCRE LOS SENTIDOS
03 USE UNA ESTÉTICA FABULOSA
Temas, temas, temas
04 HÁGALO EVIDENTE
41. Temas
Pero requieren aceleración del hardware
<application android:icon="@drawable/icon"
android:label="@string/app_name"
android:hardwareAccelerated="true" >
Sólo disponibles con
Honeycomb
42. Temas
Pero usted podría apuntar a varias versiones Android
<uses-sdk android:minSdkVersion="8"
android:targetSdkVersion="11" />
43. Temas
Cree varios temas para las versiones Android
<style … parent=
"@android:style/Theme">
<style … parent=
"@android:style/Theme.Holo">
44. Asegúrese de que todas las llamadas de
API que usa
funcionen con todas las versiones de API
que soporta.
45. Alcance la magia
01 MANTENGA EL DETALLE ERGONÓMICO
02 INVOLUCRE LOS SENTIDOS
03 USE UNA ESTÉTICA FABULOSA
04 HÁGALO EVIDENTE
Barras de acción
Fragmentos
Función arrastrar y soltar
46. Barra de acción
Apronte sus características de aplicación
Diálogo de
Icono de cuadro
aplicación desplegable
Vista de Elementos de
acción acción
48. Barras de acción
Paso 1. Apuntar a API nivel 11
<uses-sdk android:minSdkVersion="8"
android:targetSdkVersion="11" />
49. Barras de acción
Paso 2. Colocar los elementos del menú en la barra de acción
<item android:id="@+id/favorite"
android:title="@string/favorite"
android:icon="@drawable/ic_menu_star"
android:showAsAction="ifRoom" />
50. Barras de acción
Paso 3. Manejar la selección de opciones de la manera habitual
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.favorite:
// do something
return true;
…
}
52. Barras de acción
Alcance la magia, dé estilo
<style name="MyTheme"
parent="android:style/Theme.Holo" >
<item name="android:actionBarStyle">
@style/ActionBar</item>
</style>
<style name="ActionBar"
parent="android:style/Widget.Holo.ActionBar">
<item name="android:background">
@drawable/my_background</item>
</style>
53. Barras de acción
Alcance la magia, agregue un cuadro de diálogo
Use AlertDialog.Builder
Cree un cuadro de diálogo
personalizado en XML
Use un DialogFragment
54. Barras de acción
Pero ejecute los elementos Honeycomb sólo en Honeycomb
private static boolean isHoneycomb =
android.os.Build.VERSION.SDK_INT > 10;
if (isHoneycomb) {
// cree el cuadro de diálogo personalizado aquí
}
59. Fragmentos
En su Activity principal, encuentre sus fragmentos
Fragment gridFrag =
getFragmentManager().
findFragmentById(R.id.photogrid);
Fragment photoFrag =
getFragmentManager().
findFragmentById(R.id.the_frag);
60. Fragmentos
Verifique la orientación y ajuste las vistas
private boolean photoInline = false;
photoInline = (photoFrag != null &&
getResources().getConfiguration().orientation
== Configuration.ORIENTATION_LANDSCAPE);
if (photoInline) {
// haga algo
} else if ( photoFrag != null ) {
getView().setVisibility(View.GONE);
}
68. Arrastre y solte
Para comenzar, llame a startDrag()
Seleccionar un gesto que inicie un arrastre: ¿clic largo?
Crear un oyente: OnLongClickListener()
Crear objetos de ClipData y DragShadowBuilder
Iniciar el arrastre
public boolean onLongClick(View v) {
ClipData data = ClipData.newPlainText("foo","bar");
DragShadowBuilder shadowBuilder = new DragShadowBuilder(v);
v.startDrag(data, shadowBuilder, v, 0);
return true;
}
69. Arrastre y solte
Luego continúe con un listener y onDrag()
Crear un listener de arrastre (implementar OnDragListener)
Sobrecargue onDrag y maneje los eventos
class BoxDragListener implements OnDragListener {
public boolean onDrag(View self, DragEvent event) {
if (event.getAction() ==
DragEvent.ACTION_DRAG_STARTED) {
// haga algo
}
// maneje otros eventos
}
70. ¿Desea
formular
alguna
pregunta?
Brasil - #appsum11br
Argentina - #appsum11ar
México - #appsum11mx
community.developer.motorola.com