principais dicas para uis do android

72
Principais dicas para UIs do Android Adquirindo a mágica nos tablets MOTOROLA e o logotipo estilizado M são marcas comerciais ou marcas registradas da Motorola Trademark Holdings, LLC. Todas as outras marcas comerciais são propriedade dos seus respectivos proprietários. © 2011 Motorola Mobility, Inc. Todos os direitos reservados. Suzanne Alexandra Evangelista da Tecnologia Android Motorola Mobility

Upload: motorola-mobility-motodev

Post on 27-May-2015

3.230 views

Category:

Technology


7 download

TRANSCRIPT

Page 1: Principais dicas para UIs do Android

Principais dicas para UIs do Android Adquirindo a mágica nos tablets

MOTOROLA e o logotipo estilizado M são marcas comerciais ou marcas registradas da Motorola Trademark Holdings, LLC. Todas as outras marcas comerciais são propriedade dos seus respectivos proprietários. © 2011 Motorola Mobility, Inc. Todos os direitos reservados.

Suzanne AlexandraEvangelista da Tecnologia AndroidMotorola Mobility

Page 2: Principais dicas para UIs do Android

Título da apresentação Versão 1.0 24.02.09

Brasil - #appsum11brArgentina - #appsum11ar

México - #appsum11mdeveloper.motorola.com

Page 3: Principais dicas para UIs do Android

Nós estamos em um lugar totalmentenovo.

Leve as coisas certas a bordo.

Page 4: Principais dicas para UIs do Android

Adquira a mágica

01 PENSE NA ERGONOMIA

02 ENVOLVA OS SENTIDOS

03 USE APARÊNCIAS INCRÍVEIS

04 TORNE-O ÓBVIO

Page 5: Principais dicas para UIs do Android

Adquira a mágica

01 PENSE NA ERGONOMIALayouts com orientação paisagemNotificações elaboradasTamanhos de textos

02 ENVOLVA OS SENTIDOSImagensSensibilidade ao toque

03 USE APARÊNCIAS INCRÍVEISTemas, temas, temas

04 TORNE-O ÓBVIOBarras de açõesFragmentosClique e arraste

Page 6: Principais dicas para UIs do Android

Suponha que seus usuários estejamusando orientação paisagem.

Page 7: Principais dicas para UIs do Android

Layouts com orientação paisagemMuitas vezes, a orientação paisagem precisa de layouts especializados, em qualquer dispositivo

Page 8: Principais dicas para UIs do Android

Layouts com orientação paisagemVeja o que acontece no tablet

Page 9: Principais dicas para UIs do Android

Layouts com orientação paisagemO que deu errado?

alignParentLeft alignParentRight

Imagempequena

Nada no centro

Page 10: Principais dicas para UIs do Android

Layouts com orientação paisagemDesign para tamanho e orientação da tela

Page 11: Principais dicas para UIs do Android

Layouts com orientação paisagemO layout vencedor

centerHorizontal="true"

layout_alignLeft<RelativeLayout>layout_alignRight

Page 12: Principais dicas para UIs do Android

Layouts com orientação paisagemOtimize a experiência do usuário de wide screens

Page 13: Principais dicas para UIs do Android

Layouts com orientação paisagemEvite o efeito de grande oceano

Page 14: Principais dicas para UIs do Android

Tamanhos de textosTextos pequenos (como imagens) provavelmente não funcionarão

Page 15: Principais dicas para UIs do Android

Tamanhos de textosMelhores práticas

Escale com sp18 sp e superior Certifique-se de que o texto élegível para os usuários reais

Page 16: Principais dicas para UIs do Android

Notificações elaboradasUm importante benefício do Android em relação a outrasplataformas móveis

Notificação da sua app

Page 17: Principais dicas para UIs do Android

Notificações elaboradasExemplos de quando usar notificações elaboradas

Ao chegar novo conteúdo

Quando uma mídia está sendo reproduzida

Page 18: Principais dicas para UIs do Android

Notificações elaboradasDuas notificações são exibidas no Honeycomb

Bandeja(Tray)

Pop-up

Page 19: Principais dicas para UIs do Android

Notificações elaboradasUse a classe Notification.Builder

Notification.Builder builder = new Notification.Builder( this );

Como AlertDialog.Builder

Page 20: Principais dicas para UIs do Android

Notificações elaboradasCrie a notificação que você quiser

builder.setSmallIcon(R.drawable.icon).setContentTitle(title).setContentText(text).setContentIntent(pintent) // Um “pending intent”.setLargeIcon(myBitmap)

;

Page 21: Principais dicas para UIs do Android

Notificações elaboradasCodificação visual

setSmallIcon()setLargeIcon()

setContentText()setContentTitle()

Page 22: Principais dicas para UIs do Android

Notificações elaboradasAdquira um pouco de mágica: crie um botão clicável

RemoteViews layout = new RemoteViewsgetPackageName(), 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);

Page 23: Principais dicas para UIs do Android

Notificações elaboradasEstratégia para compatibilidade com versões anteriores(“backward compatibility”)

private static boolean isHoneycomb =android.os.Build.VERSION.SDK_INT > 10;

if (!isHoneycomb)// iniciar um intent de Activity

else// iniciar outro

Page 24: Principais dicas para UIs do Android

Adquira a mágica

01 PENSE NA ERGONOMIA

02 ENVOLVA OS SENTIDOSImagensSensibilidade ao toque

03 USE APARÊNCIAS INCRÍVEIS

04 TORNE-O ÓBVIO

Page 25: Principais dicas para UIs do Android

A visão supera todos osoutros sentidos.

Regras do cérebroDr. John Medina

Page 26: Principais dicas para UIs do Android

ImagensExpresse-se visualmente, para encantar

Page 27: Principais dicas para UIs do Android

ImagensTelas para diferentes dispositivos precisam de tamanhos diferentes de imagem

Page 28: Principais dicas para UIs do Android

ImagensEscolha uma estratégia de imagem

Um conjunto de imagens e deixe o Android dimensionarautomaticamente?

Conjuntos de recursos personalizados para tamanhos e densidades diferentes?

Determinar a densidade mais comumente usada?Recuperar imagens dinamicamente em tempo de execução e

escalar para o dispositivo?

Page 29: Principais dicas para UIs do Android

ImagensMemória vs tamanho do arquivo: um exemplo

Dimensionamento automático

Conjuntos de imagens

32 MB de memória

23 MB de memória

324 KB de tamanho

728 KB de tamanho

Page 30: Principais dicas para UIs do Android

O dimensionamento automático usamemória.

Conjuntos de imagem personalizadosaumentam o tamanho do arquivo.

Page 31: Principais dicas para UIs do Android

ImagensApresente amostras de imagens grandes em tempo de execução para economizar memória

BitmapFactory.Options options = newBitmapFactory.Options();

options.inJustDecodeBounds = false;options.inSampleSize = 4;options.inScaled = true;options.inTargetDensity = screenDensity;

Bitmap bitmap = BitmapFactory.decodeResource(

getResources(),R.drawable.clover, options);

Page 32: Principais dicas para UIs do Android

ImagensOnde colocar imagens e ícones

Pré-dimensionado paradensidadeCombine estilo 3.0

Ícones de altaresolução

Padrão, dimensionadoautomaticamente

Page 33: Principais dicas para UIs do Android

Sensibilidade ao toqueTablets são desenvolvidos para o toque

Page 34: Principais dicas para UIs do Android

Sensibilidade ao toqueCertifique-se de que todos os alvos possam ser tocados

Page 35: Principais dicas para UIs do Android

Sensibilidade ao toqueCertifique-se de que todos os alvos possam ser tocados

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;}

Page 36: Principais dicas para UIs do Android

Sensibilidade ao toqueVeja como as imagens são transferidas entre dispositivos

160 dpi – médiaProporção 16:9

Page 37: Principais dicas para UIs do Android

Adquira a mágica

01 PENSE NA ERGONOMIA

02 ENVOLVA OS SENTIDOS

03 USE APARÊNCIAS INCRÍVEISTemas, temas, temas

04 TORNE-O ÓBVIO

Page 38: Principais dicas para UIs do Android

TemasCoerente com o dispositivo, ou destacado

Page 39: Principais dicas para UIs do Android

Theme.Holo

Theme.Holo.Light

TemasO Honeycomb apresenta dois novos temas holográficos

Page 40: Principais dicas para UIs do Android

TemasMas eles exigem aceleração de hardware (“hardware acceleration”)

<application android:icon="@drawable/icon"

android:label="@string/app_name"

android:hardwareAccelerated="true" >

Disponível somente no Honeycomb

Page 41: Principais dicas para UIs do Android

TemasPorém, você pode querer que sua aplicação funcione em váriasversões do Android

<uses-sdk android:minSdkVersion="8"android:targetSdkVersion="11" />

Page 42: Principais dicas para UIs do Android

TemasCrie diversos temas para versões do Android

<style … parent="@android:style/Theme.Holo">

<style … parent="@android:style/Theme">

Page 43: Principais dicas para UIs do Android

Certifique-se de que todas as chamadas de API que você usa funcionam para todas as

versões de API que você suporta.

Page 44: Principais dicas para UIs do Android

Adquira a mágica

01 PENSE NA ERGONOMIA

02 ENVOLVA OS SENTIDOS

03 USE APARÊNCIAS INCRÍVEIS

04 TORNE-O ÓBVIOBarras de açõesFragmentosClique e arraste

Page 45: Principais dicas para UIs do Android

Barras de açõesTorne os recursos de seus aplicativos prontamente disponíveis

Itens de ações

Ícone daapp

Visualizaçãode ações

Diálogo dropdown

Page 46: Principais dicas para UIs do Android

Barras de açõesCodificação visual

onCreateOptionsMenu()

<item android:showAsAction="true" … >

onOptionsItemSelected()android:actionLayoutandroid:actionViewClass

Page 47: Principais dicas para UIs do Android

Barras de açõesEtapa 1: foco no nível 11 de API

<uses-sdk android:minSdkVersion="8"android:targetSdkVersion="11" />

Page 48: Principais dicas para UIs do Android

Barras de açõesEtapa 2: coloque itens do menu na barra de ações

<item android:id="@+id/favorite"android:title="@string/favorite" android:icon="@drawable/ic_menu_star" android:showAsAction="ifRoom" />

Page 49: Principais dicas para UIs do Android

Barras de açõesEtapa 3: manipule a seleção de opções como de costume

@Overridepublic boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {case R.id.favorite:

// faça algoreturn true;

…}

Page 50: Principais dicas para UIs do Android

Barras de açõesNo XOOM e em um smartphone

Page 51: Principais dicas para UIs do Android

Barras de açõesUse um pouco de mágica, estilize

<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>

Page 52: Principais dicas para UIs do Android

Barras de açõesUse um pouco de mágica, adicione um diálogo

Use AlertDialog.BuilderCrie um diálogo personalizado em XMLUse um DialogFragment

Page 53: Principais dicas para UIs do Android

Barras de açõesMas faça coisas do Honeycomb somente no Honeycomb

private static boolean isHoneycomb =android.os.Build.VERSION.SDK_INT > 10;

se (isHoneycomb) {// criar o diálogo personalizado aqui

}

Page 54: Principais dicas para UIs do Android

Fragments (Fragmentos)Use para mostrar mais conteúdo e recursos, de forma mais fluida

Page 55: Principais dicas para UIs do Android

Fragments (Fragmentos)É possível usar muitos padrões

Mais comum

Page 56: Principais dicas para UIs do Android

Fragments (Fragmentos)O layout inicial do fragment é o mesmo em todas as orientações

Page 57: Principais dicas para UIs do Android

Fragments (Fragmentos)Porém, é possível mostrar ou ocultar exibições (“views”)

Page 58: Principais dicas para UIs do Android

Fragments (Fragmentos)Encontre seus fragments, em sua Activity principal

Fragment gridFrag =getFragmentManager().findFragmentById(R.id.photogrid);

Fragment photoFrag = getFragmentManager().findFragmentById(R.id.the_frag);

Page 59: Principais dicas para UIs do Android

Fragments (Fragmentos)Verifique a orientação e ajuste as exibições (“views”)

private boolean photoInline = false;

photoInline = (photoFrag != null && getResources().getConfiguration().orientation== Configuration.ORIENTATION_LANDSCAPE);

if (photoInline) {// faça algo

} else if ( photoFrag != null ) {getView().setVisibility(View.GONE);

}

Page 60: Principais dicas para UIs do Android

Fragments (Fragmentos)Ainda melhor

Transição animada

Page 61: Principais dicas para UIs do Android

Fragments (Fragmentos)Use um pouco de mágica: anime a exibição do fragmento –passo 1

<set><objectAnimator

xmlns:android=http://schemas.android.com/apk/res/android

android:propertyName="x" android:valueType="floatType"android:valueFrom="-1280"android:valueTo="0" android:duration="500" />

</set>

Page 62: Principais dicas para UIs do Android

Fragments (Fragmentos)Use um pouco de mágica: anime a exibição do fragmento –passo 2

FragmentTransaction ft = getFragmentManager().beginTransaction();

ft.setCustomAnimations( R.anim.slide_in_left, R.anim.slide_out_right );

DetailsFragment newFrag =DetailsFragment.newInstance();

ft.replace(R.id.details_fragment_container, newFrag, "detailFragment");

ft.commit();

Page 63: Principais dicas para UIs do Android

Clique e arraste (“Drag and drop”)Cria envolvimento físico, direto e imediato

Page 64: Principais dicas para UIs do Android

Clique e arraste (“Drag and drop”)Tem diversos estados de evento

ACTION_DRAG_STARTED

ACTION_DRAG_ENTERED

Page 65: Principais dicas para UIs do Android

Clique e arraste (“Drag and drop”)Tem diversos estados de evento

ACTION_DROPACTION_DRAG_ENDED

Page 66: Principais dicas para UIs do Android

Clique e arraste (“Drag and drop”)Veja como isso funciona nos fragmentos

Page 67: Principais dicas para UIs do Android

Escolha um gesto que inicia um arrasto: long click?Crie um listener: OnLongClickListener()Crie objetos ClipData e DragShadowBuilderInicie um arrasto

Clique e arraste (“Drag and drop”)Para iniciar, chame startDrag()

public boolean onLongClick(View v) {ClipData data = ClipData.newPlainText("foo","bar");DragShadowBuilder shadowBuilder = new DragShadowBuilder();v.startDrag(data, shadowBuilder, v, 0);return true;

}

Page 68: Principais dicas para UIs do Android

Criar um ouvinte de arrasto (implementar OnDragListener)Substituir onDrag e manipular eventos

Clique e arraste (“Drag and drop”)Em seguida, continue com um listener e onDrag()

class BoxDragListener implements OnDragListener {

public boolean onDrag(View self, DragEvent event) {if (event.getAction() ==

DragEvent.ACTION_DRAG_STARTED) {// fazer algo

} // manipular outros eventos

}

Page 69: Principais dicas para UIs do Android

Perguntas?@suzalex@motodev

@motodevbr

Brasil - #appsum11brArgentina - #appsum11arMéxico - #appsum11mx

community.developer.motorola.com

Page 70: Principais dicas para UIs do Android

obrigada

Page 71: Principais dicas para UIs do Android

LEGAL

INFORMAÇÕES SOBRE LICENÇA

Exceto onde indicado, o exemplo de código fonte escrito pela Motorola Mobility Inc. e fornecido a você é licenciado conforme descrito abaixo.Copyright © 2010-2011, Motorola, Inc. Todos os direitos reservados exceto quando expressamente indicado.A redistribuição e utilização em formulários fonte e binários, com ou sem modificação, são permitidas de acordo com as seguintes condições:As redistribuições de código fonte devem manter o aviso de direitos autorais acima, esta lista de condições e a seguinte isenção de responsabilidade.As redistribuições em formulários binários devem reproduzir o aviso de copyright acima, esta lista de condições e a seguinte isenção de responsabilidade na

documentação e/ou outros materiais fornecidos com a distribuição.

O nome da Motorola, Inc. e os nomes de seus colaboradores não podem ser usados para endossar ou promover produtos derivados desse software sem permissãoprévia por escrito.

ESTE SOFTWARE É FORNECIDO PELOS DETENTORES E COLABORADORES DOS DIREITOS AUTORAIS "NA CONDIÇÃO QUE SE ENCONTRA" E QUALQUER GARANTIA EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO LIMITADA A GARANTIAS DE COMERCIALIZAÇÃO E ADEQUAÇÃO PARA UMA FINALIDADE ESPECÍFICA NÃO IMPLICAM RESPONSABILIDADE. EM NENHUM CASO O DETENTOR OU COLABORADOR DOS DIREITOS AUTORAIS DEVE SER RESPONSÁVEL POR QUAISQUER DANOS DIRETOS, INDIRETOS, INCIDENTAIS, ESPECIAIS, EXEMPLARES OU CONSEQUENTES (INCLUINDO, MAS NÃO LIMITADOS À AQUISIÇÃO DE BENS OU SERVIÇOS SUBSTITUTOS, PERDA DE USO, DADOS OU LUCROS; OU INTERRUPÇÃO DE NEGÓCIOS) CAUSADOS E SOBRE QUALQUER TEORIA DE RESPONSABILIDADE, SEJA EM CONTRATO, RESPONSABILIDADE OBJETIVA OU AGRAVO (INCLUINDO NEGLIGÊNCIA OU NÃO) DECORRENTE DE QUALQUER MANEIRA DO USO DESSE SOFTWARE, MESMO QUE INFORMADOS DA POSSIBILIDADE DE TAIS DANOS.

Outro código fonte exibido nesta apresentação pode ser oferecido sob outras licenças. Apache 2.0Copyright © 2010, Android Open Source Project. Todos os direitos reservados, salvo disposição em contrário expressamente indicada.

Licenciado sob a Licença Apache, Versão 2.0 (a "Licença"), você não pode usar esse arquivo exceto em conformidade com a Licença. Você pode obter uma cópiada Licença em http://www.apache.org/licenses/LICENSE-2.0.

A menos que exigido pela lei aplicável ou acordado por escrito, o software distribuído sob a Licença é distribuído "NA CONDIÇÃO QUE SE ENCONTRA", SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam expressas ou implícitas. Consulte a Licença para a linguagem específica que governa as permissões e limitações sob a Licença.

Licença Creative Commons Atribuição 3.0. Partes desta apresentação são reproduzidas a partir do trabalho criado e compartilhado pelo Google (http://code.google.com/policies.html) e usadas de acordo com

os termos da Licença Creative Commons Atribuição 3.0. (http://creativecommons.org/licenses/by/3.0/).

Page 72: Principais dicas para UIs do Android

LEGAL

LICENSE NOTICES

Except where noted, sample source code written by Motorola Mobility Inc. and provided to you is licensed as described below.Copyright © 2010-2011, Motorola, Inc. All rights reserved except as otherwise explicitly indicated.Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other

materials provided with the distribution.

Neither the name of the Motorola, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Other source code displayed in this presentation may be offered under other licenses.Apache 2.0Copyright © 2010, Android Open Source Project. All rights reserved unless otherwise explicitly indicated.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Creative Commons 3.0 Attribution LicensePortions of this presentation are reproduced from work created and shared by Google (http://code.google.com/policies.html) and used according to terms described in

the Creative Commons 3.0 Attribution License (http://creativecommons.org/licenses/by/3.0/).