SlideShare uma empresa Scribd logo
1 de 72
Baixar para ler offline
Suzanne Alexandra
Evangelista da Tecnologia Android
Motorola Mobility




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.
Brasil - #appsum11br
Argentina - #appsum11ar
  México - #appsum11m
  developer.motorola.com


      Título da apresentação   Versão 1.0   24.02.09
Nós estamos em um lugar totalmente
              novo.
   Leve as coisas certas a bordo.
Adquira a mágica



01 PENSE NA ERGONOMIA



02 ENVOLVA OS SENTIDOS



03 USE APARÊNCIAS INCRÍVEIS



04 TORNE-O ÓBVIO
Adquira a mágica

01 PENSE NA ERGONOMIA
     Layouts com orientação paisagem
     Notificações elaboradas
     Tamanhos de textos

02 ENVOLVA OS SENTIDOS
   Imagens
   Sensibilidade ao toque

03 USE APARÊNCIAS INCRÍVEIS
   Temas, temas, temas

04 TORNE-O ÓBVIO
   Barras de ações
   Fragmentos
   Clique e arraste
Suponha que seus usuários estejam
usando orientação paisagem.
Layouts com orientação paisagem
Muitas vezes, a orientação paisagem precisa de layouts especializados,
em qualquer dispositivo
Layouts com orientação paisagem
Veja o que acontece no tablet
Layouts com orientação paisagem
O que deu errado?

alignParentLeft                   alignParentRight




               Nada no centro           Imagem
                                       pequena
Layouts com orientação paisagem
Design para tamanho e orientação da tela
Layouts com orientação paisagem
O layout vencedor




                                           centerHorizontal="true"




                       <RelativeLayout>
layout_alignLeft       layout_alignRight
Layouts com orientação paisagem
Otimize a experiência do usuário de wide screens
Layouts com orientação paisagem
Evite o efeito de grande oceano
Tamanhos de textos
Textos pequenos (como imagens) provavelmente não funcionarão
Tamanhos de textos
Melhores práticas




  Escale com sp
  18 sp e superior
  Certifique-se de que o texto é
  legível para os usuários reais
Notificações elaboradas
Um importante benefício do Android em relação a outras
plataformas móveis




                                  Notificação da sua app
Notificações elaboradas
Exemplos de quando usar notificações elaboradas



Ao chegar novo conteúdo




                     Quando uma mídia está sendo reproduzida
Notificações elaboradas
Duas notificações são exibidas no Honeycomb




Bandeja
(Tray)




                     Pop-up
Notificações elaboradas
Use a classe Notification.Builder




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




Como AlertDialog.Builder
Notificações elaboradas
Crie a notificação que você quiser




 builder.setSmallIcon(R.drawable.icon)
   .setContentTitle(title)
   .setContentText(text)
   .setContentIntent(pintent) // Um “pending intent”
   .setLargeIcon(myBitmap)
 ;
Notificações elaboradas
Codificação visual




  setLargeIcon()                        setSmallIcon()

             setContentTitle()
                                 setContentText()
Notificações elaboradas
Adquira um pouco de mágica: crie um botão clicável




 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);
Notificações elaboradas
Estraté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
Adquira a mágica

01 PENSE NA ERGONOMIA


02 ENVOLVA OS SENTIDOS
   Imagens
   Sensibilidade ao toque


03 USE APARÊNCIAS INCRÍVEIS


04 TORNE-O ÓBVIO
A visão supera todos os
    outros sentidos.



              Regras do cérebro
               Dr. John Medina
Imagens
Expresse-se visualmente, para encantar
Imagens
Telas para diferentes dispositivos precisam de tamanhos diferentes de
imagem
Imagens
Escolha uma estratégia de imagem




  Um conjunto de imagens e deixe o Android dimensionar
automaticamente?
  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?
Imagens
Memória vs tamanho do arquivo: um exemplo



Dimensionamento automático

              32 MB de memória
             324 KB de tamanho


Conjuntos de imagens

              23 MB de memória
             728 KB de tamanho
O dimensionamento automático usa
              memória.
Conjuntos de imagem personalizados
 aumentam o tamanho do arquivo.
Imagens
Apresente amostras de imagens grandes em tempo de
execução para economizar memória



 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);
Imagens
  Onde colocar imagens e ícones




                                  Padrão, dimensionado
                                  automaticamente

                                       Ícones de alta
                                       resolução
                                         Pré-dimensionado para
Combine estilo 3.0                       densidade
Sensibilidade ao toque
Tablets são desenvolvidos para o toque
Sensibilidade ao toque
Certifique-se de que todos os alvos possam ser tocados
Sensibilidade ao toque
Certifique-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;
 }
Sensibilidade ao toque
Veja como as imagens são transferidas entre dispositivos




                                            160 dpi – média
                                            Proporção 16:9
Adquira a mágica

01 PENSE NA ERGONOMIA




02 ENVOLVA OS SENTIDOS



03 USE APARÊNCIAS INCRÍVEIS
   Temas, temas, temas




04 TORNE-O ÓBVIO
Temas
Coerente com o dispositivo, ou destacado
Temas
O Honeycomb apresenta dois novos temas holográficos




                                     Theme.Holo




         Theme.Holo.Light
Temas
Mas 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
Temas
Porém, você pode querer que sua aplicação funcione em várias
versões do Android




    <uses-sdk android:minSdkVersion="8"
              android:targetSdkVersion="11"             />
Temas
Crie diversos temas para versões do Android




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

                            <style … parent=
                              "@android:style/Theme.Holo">
Certifique-se de que todas as chamadas de
API que você usa funcionam para todas as
     versões de API que você suporta.
Adquira a mágica

01 PENSE NA ERGONOMIA



02 ENVOLVA OS SENTIDOS


03 USE APARÊNCIAS INCRÍVEIS


04 TORNE-O ÓBVIO
   Barras de ações
   Fragmentos
   Clique e arraste
Barras de ações
  Torne os recursos de seus aplicativos prontamente disponíveis



Ícone da
app                  Diálogo dropdown




      Visualização                                        Itens de ações
      de ações
Barras de ações
Codificação visual


                           <item android:showAsAction="true" … >


                 onCreateOptionsMenu()




android:actionLayout              onOptionsItemSelected()
android:actionViewClass
Barras de ações
Etapa 1: foco no nível 11 de API



 <uses-sdk android:minSdkVersion="8"
           android:targetSdkVersion="11" />
Barras de ações
Etapa 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" />
Barras de ações
Etapa 3: manipule a seleção de opções como de costume




@Override
 public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
        case R.id.favorite:
            // faça algo
        return true;
    …
}
Barras de ações
No XOOM e em um smartphone
Barras de ações
Use 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>
Barras de ações
Use um pouco de mágica, adicione um diálogo




                              Use AlertDialog.Builder
                              Crie um diálogo personalizado em XML
                              Use um DialogFragment
Barras de ações
Mas 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
}
Fragments (Fragmentos)
Use para mostrar mais conteúdo e recursos, de forma mais fluida
Fragments (Fragmentos)
É possível usar muitos padrões




                                 Mais comum
Fragments (Fragmentos)
O layout inicial do fragment é o mesmo em todas as orientações
Fragments (Fragmentos)
Porém, é possível mostrar ou ocultar exibições (“views”)
Fragments (Fragmentos)
Encontre seus fragments, em sua Activity principal




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

 Fragment photoFrag =
       getFragmentManager().
       findFragmentById(R.id.the_frag);
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);
 }
Fragments (Fragmentos)
Ainda melhor




      Transição animada
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>
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();
Clique e arraste (“Drag and drop”)
Cria envolvimento físico, direto e imediato
Clique e arraste (“Drag and drop”)
Tem diversos estados de evento




                                  ACTION_DRAG_STARTED




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




                                           ACTION_DROP
                                     ACTION_DRAG_ENDED
Clique e arraste (“Drag and drop”)
Veja como isso funciona nos fragmentos
Clique e arraste (“Drag and drop”)
Para iniciar, chame startDrag()


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


public boolean onLongClick(View v) {
  ClipData data = ClipData.newPlainText("foo","bar");
  DragShadowBuilder shadowBuilder = new DragShadowBuilder();
  v.startDrag(data, shadowBuilder, v, 0);
  return true;
}
Clique e arraste (“Drag and drop”)
Em seguida, continue com um listener e onDrag()



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


class BoxDragListener implements OnDragListener {

    public boolean onDrag(View self, DragEvent event) {
      if (event.getAction() ==
           DragEvent.ACTION_DRAG_STARTED) {
           // fazer algo
      }
          // manipular outros eventos
}
Perguntas?
          @suzalex
          @motodev
         @motodevbr

      Brasil - #appsum11br
    Argentina - #appsum11ar
     México - #appsum11mx

community.developer.motorola.com
obrigada
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ão
   pré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.0
Copyright © 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ópia
   da 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/).
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.0
Copyright © 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 License
Portions 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/).

Mais conteúdo relacionado

Mais procurados

Apostila%20 leocad
Apostila%20 leocadApostila%20 leocad
Apostila%20 leocad
MARINA
 
Iniciando o Desenvolvimento para o Google Android
Iniciando o Desenvolvimento para o Google AndroidIniciando o Desenvolvimento para o Google Android
Iniciando o Desenvolvimento para o Google Android
Salvador Torres
 
Proteus isis -manual pt
Proteus   isis -manual ptProteus   isis -manual pt
Proteus isis -manual pt
ayeshakanwal
 
Desenvolvimento de aplicativos para o tablet Motorola XOOM
Desenvolvimento de aplicativos para o tablet Motorola XOOMDesenvolvimento de aplicativos para o tablet Motorola XOOM
Desenvolvimento de aplicativos para o tablet Motorola XOOM
Motorola Mobility - MOTODEV
 
Manual do proteus fotolite
Manual do proteus   fotoliteManual do proteus   fotolite
Manual do proteus fotolite
santos2012yuri
 
Desenvolvimento de Apps e Games para Android - Parte 1
Desenvolvimento de Apps e Games para Android - Parte 1Desenvolvimento de Apps e Games para Android - Parte 1
Desenvolvimento de Apps e Games para Android - Parte 1
Erisvaldo Junior
 

Mais procurados (20)

Apostila%20 leocad
Apostila%20 leocadApostila%20 leocad
Apostila%20 leocad
 
Aula 01 - Desenvolvendo Jogos Para Android - Ambiente do Jogo
Aula 01 - Desenvolvendo Jogos Para Android - Ambiente do JogoAula 01 - Desenvolvendo Jogos Para Android - Ambiente do Jogo
Aula 01 - Desenvolvendo Jogos Para Android - Ambiente do Jogo
 
SESTINFO 2011 Apresentacao Android
SESTINFO 2011 Apresentacao AndroidSESTINFO 2011 Apresentacao Android
SESTINFO 2011 Apresentacao Android
 
Guia Rápido sobre Toondoo
Guia Rápido sobre ToondooGuia Rápido sobre Toondoo
Guia Rápido sobre Toondoo
 
Curso de Android - aula 2
Curso de Android - aula 2Curso de Android - aula 2
Curso de Android - aula 2
 
Blender: Primeiros Passos
Blender: Primeiros PassosBlender: Primeiros Passos
Blender: Primeiros Passos
 
Iniciando o Desenvolvimento para o Google Android
Iniciando o Desenvolvimento para o Google AndroidIniciando o Desenvolvimento para o Google Android
Iniciando o Desenvolvimento para o Google Android
 
Proteus isis -manual pt
Proteus   isis -manual ptProteus   isis -manual pt
Proteus isis -manual pt
 
Desenvolvimento de aplicativos para o tablet Motorola XOOM
Desenvolvimento de aplicativos para o tablet Motorola XOOMDesenvolvimento de aplicativos para o tablet Motorola XOOM
Desenvolvimento de aplicativos para o tablet Motorola XOOM
 
Cocoa Touch Framework 8
Cocoa Touch Framework 8Cocoa Touch Framework 8
Cocoa Touch Framework 8
 
Manual de proteus
Manual de proteusManual de proteus
Manual de proteus
 
Android - Conceito e Arquitetura
Android - Conceito e ArquiteturaAndroid - Conceito e Arquitetura
Android - Conceito e Arquitetura
 
Apresentação android
Apresentação androidApresentação android
Apresentação android
 
Aprenda a usar os recursos “câmera” do android, criando um app de forma prática
Aprenda a usar os recursos “câmera” do android, criando um app de forma práticaAprenda a usar os recursos “câmera” do android, criando um app de forma prática
Aprenda a usar os recursos “câmera” do android, criando um app de forma prática
 
Manual do proteus fotolite
Manual do proteus   fotoliteManual do proteus   fotolite
Manual do proteus fotolite
 
Aula03 android layouts_views
Aula03 android layouts_viewsAula03 android layouts_views
Aula03 android layouts_views
 
Crash course tradução
Crash course   traduçãoCrash course   tradução
Crash course tradução
 
Photoshop reference
Photoshop referencePhotoshop reference
Photoshop reference
 
Desenvolvimento de Apps e Games para Android - Parte 1
Desenvolvimento de Apps e Games para Android - Parte 1Desenvolvimento de Apps e Games para Android - Parte 1
Desenvolvimento de Apps e Games para Android - Parte 1
 
Manual proteus labcenter (portugues)
Manual proteus labcenter (portugues)Manual proteus labcenter (portugues)
Manual proteus labcenter (portugues)
 

Semelhante a Principais dicas para UIs do Android

Introdução Silverlight Windows Phone
Introdução Silverlight Windows PhoneIntrodução Silverlight Windows Phone
Introdução Silverlight Windows Phone
Nuno Luz
 
Android Palestra
Android PalestraAndroid Palestra
Android Palestra
Renato
 

Semelhante a Principais dicas para UIs do Android (20)

Aprenda a usar os recursos “câmera” do android, criando um app de forma prática
Aprenda a usar os recursos “câmera” do android, criando um app de forma práticaAprenda a usar os recursos “câmera” do android, criando um app de forma prática
Aprenda a usar os recursos “câmera” do android, criando um app de forma prática
 
Desenvolvimento de Aplicações para Dispositivos Móveis - Android Studio - Par...
Desenvolvimento de Aplicações para Dispositivos Móveis - Android Studio - Par...Desenvolvimento de Aplicações para Dispositivos Móveis - Android Studio - Par...
Desenvolvimento de Aplicações para Dispositivos Móveis - Android Studio - Par...
 
Aula 2
Aula 2Aula 2
Aula 2
 
Aula02 android hands_on
Aula02 android hands_onAula02 android hands_on
Aula02 android hands_on
 
Introdução ao Android (minicurso 4h)
Introdução ao Android (minicurso 4h)Introdução ao Android (minicurso 4h)
Introdução ao Android (minicurso 4h)
 
Introdução Silverlight Windows Phone
Introdução Silverlight Windows PhoneIntrodução Silverlight Windows Phone
Introdução Silverlight Windows Phone
 
Curso Android 01: Introdução
Curso Android 01: IntroduçãoCurso Android 01: Introdução
Curso Android 01: Introdução
 
Android Aula 3
Android Aula 3Android Aula 3
Android Aula 3
 
Computação Móvel: Perspectivas, Oportunidades e Desenvolvimento
Computação Móvel: Perspectivas, Oportunidades e DesenvolvimentoComputação Móvel: Perspectivas, Oportunidades e Desenvolvimento
Computação Móvel: Perspectivas, Oportunidades e Desenvolvimento
 
Programando Android - Aula 3
Programando Android - Aula 3Programando Android - Aula 3
Programando Android - Aula 3
 
Introdução ao desenvolvimento de apps para Android - Dia 2/2
Introdução ao desenvolvimento de apps para Android - Dia 2/2Introdução ao desenvolvimento de apps para Android - Dia 2/2
Introdução ao desenvolvimento de apps para Android - Dia 2/2
 
Android Palestra
Android PalestraAndroid Palestra
Android Palestra
 
Introdução ao Desenvolvimento Android
Introdução ao Desenvolvimento AndroidIntrodução ao Desenvolvimento Android
Introdução ao Desenvolvimento Android
 
Android Aula 5
Android Aula 5Android Aula 5
Android Aula 5
 
Workshop frontend
Workshop   frontendWorkshop   frontend
Workshop frontend
 
Computação Móvel 2012.2 - Android
Computação Móvel 2012.2 - AndroidComputação Móvel 2012.2 - Android
Computação Móvel 2012.2 - Android
 
Desenvolvimento de Aplicativos para a Plataforma Android
Desenvolvimento de Aplicativos para a Plataforma AndroidDesenvolvimento de Aplicativos para a Plataforma Android
Desenvolvimento de Aplicativos para a Plataforma Android
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
 
Material Design - Melhorando a experiência de seu App
Material Design - Melhorando a experiência de seu AppMaterial Design - Melhorando a experiência de seu App
Material Design - Melhorando a experiência de seu App
 

Mais de Motorola Mobility - MOTODEV

HTML5 vs Native Android: Smart Enterprises for the Future
HTML5 vs Native Android: Smart Enterprises for the FutureHTML5 vs Native Android: Smart Enterprises for the Future
HTML5 vs Native Android: Smart Enterprises for the Future
Motorola Mobility - MOTODEV
 
Gráficos cada vez más rápidos. Cómo usar NDK y RenderScript
Gráficos cada vez más rápidos. Cómo usar NDK y RenderScript Gráficos cada vez más rápidos. Cómo usar NDK y RenderScript
Gráficos cada vez más rápidos. Cómo usar NDK y RenderScript
Motorola Mobility - MOTODEV
 
Consejos principales para Android UI Cómo alcanzar la magia en los tablets
Consejos principales para Android UI Cómo alcanzar la magia en los tabletsConsejos principales para Android UI Cómo alcanzar la magia en los tablets
Consejos principales para Android UI Cómo alcanzar la magia en los tablets
Motorola Mobility - MOTODEV
 
Cómo agregar calidad a sus aplicaciones mediante pruebas
Cómo agregar calidad a sus aplicaciones mediante pruebas Cómo agregar calidad a sus aplicaciones mediante pruebas
Cómo agregar calidad a sus aplicaciones mediante pruebas
Motorola Mobility - MOTODEV
 
Cómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuario
Cómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuarioCómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuario
Cómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuario
Motorola Mobility - MOTODEV
 
Gráficos cada vez mais rápidos utilização de NDK e Renderscript
Gráficos cada vez mais rápidos utilização de NDK e RenderscriptGráficos cada vez mais rápidos utilização de NDK e Renderscript
Gráficos cada vez mais rápidos utilização de NDK e Renderscript
Motorola Mobility - MOTODEV
 
Como integrar qualidade aos seus aplicativos através de testes
Como integrar qualidade aos seus aplicativos através de testesComo integrar qualidade aos seus aplicativos através de testes
Como integrar qualidade aos seus aplicativos através de testes
Motorola Mobility - MOTODEV
 

Mais de Motorola Mobility - MOTODEV (20)

HTML5 vs Native Android: Smart Enterprises for the Future
HTML5 vs Native Android: Smart Enterprises for the FutureHTML5 vs Native Android: Smart Enterprises for the Future
HTML5 vs Native Android: Smart Enterprises for the Future
 
The Enterprise Dilemma: Native vs. Web
The Enterprise Dilemma: Native vs. WebThe Enterprise Dilemma: Native vs. Web
The Enterprise Dilemma: Native vs. Web
 
Kill the Laptop!
Kill the Laptop!Kill the Laptop!
Kill the Laptop!
 
MOTODEV App Validator
MOTODEV App ValidatorMOTODEV App Validator
MOTODEV App Validator
 
Beautifully Usable, Multiple Screens Too
Beautifully Usable, Multiple Screens TooBeautifully Usable, Multiple Screens Too
Beautifully Usable, Multiple Screens Too
 
Getting the Magic on Android Tablets
Getting the Magic on Android TabletsGetting the Magic on Android Tablets
Getting the Magic on Android Tablets
 
Getting Your App Discovered: Android Market & Beyond
Getting Your App Discovered: Android Market & BeyondGetting Your App Discovered: Android Market & Beyond
Getting Your App Discovered: Android Market & Beyond
 
Introducing Fragments
Introducing FragmentsIntroducing Fragments
Introducing Fragments
 
Taking Advantage of Webtop
Taking Advantage of WebtopTaking Advantage of Webtop
Taking Advantage of Webtop
 
Building Quality Into Your Apps Through Testing
Building Quality Into Your Apps Through TestingBuilding Quality Into Your Apps Through Testing
Building Quality Into Your Apps Through Testing
 
Top Tips for Android UIs
Top Tips for Android UIsTop Tips for Android UIs
Top Tips for Android UIs
 
Designing Apps for Motorla Xoom Tablet
Designing Apps for Motorla Xoom TabletDesigning Apps for Motorla Xoom Tablet
Designing Apps for Motorla Xoom Tablet
 
Diseñando aplicaciones para el Motorola XOOM
Diseñando aplicaciones para el Motorola XOOM Diseñando aplicaciones para el Motorola XOOM
Diseñando aplicaciones para el Motorola XOOM
 
Presentación de los fragmentos
Presentación de los fragmentos Presentación de los fragmentos
Presentación de los fragmentos
 
Gráficos cada vez más rápidos. Cómo usar NDK y RenderScript
Gráficos cada vez más rápidos. Cómo usar NDK y RenderScript Gráficos cada vez más rápidos. Cómo usar NDK y RenderScript
Gráficos cada vez más rápidos. Cómo usar NDK y RenderScript
 
Consejos principales para Android UI Cómo alcanzar la magia en los tablets
Consejos principales para Android UI Cómo alcanzar la magia en los tabletsConsejos principales para Android UI Cómo alcanzar la magia en los tablets
Consejos principales para Android UI Cómo alcanzar la magia en los tablets
 
Cómo agregar calidad a sus aplicaciones mediante pruebas
Cómo agregar calidad a sus aplicaciones mediante pruebas Cómo agregar calidad a sus aplicaciones mediante pruebas
Cómo agregar calidad a sus aplicaciones mediante pruebas
 
Cómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuario
Cómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuarioCómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuario
Cómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuario
 
Gráficos cada vez mais rápidos utilização de NDK e Renderscript
Gráficos cada vez mais rápidos utilização de NDK e RenderscriptGráficos cada vez mais rápidos utilização de NDK e Renderscript
Gráficos cada vez mais rápidos utilização de NDK e Renderscript
 
Como integrar qualidade aos seus aplicativos através de testes
Como integrar qualidade aos seus aplicativos através de testesComo integrar qualidade aos seus aplicativos através de testes
Como integrar qualidade aos seus aplicativos através de testes
 

Último

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Último (6)

ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 

Principais dicas para UIs do Android

  • 1. Suzanne Alexandra Evangelista da Tecnologia Android Motorola Mobility 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.
  • 2. Brasil - #appsum11br Argentina - #appsum11ar México - #appsum11m developer.motorola.com Título da apresentação Versão 1.0 24.02.09
  • 3. Nós estamos em um lugar totalmente novo. Leve as coisas certas a bordo.
  • 4. Adquira a mágica 01 PENSE NA ERGONOMIA 02 ENVOLVA OS SENTIDOS 03 USE APARÊNCIAS INCRÍVEIS 04 TORNE-O ÓBVIO
  • 5. Adquira a mágica 01 PENSE NA ERGONOMIA Layouts com orientação paisagem Notificações elaboradas Tamanhos de textos 02 ENVOLVA OS SENTIDOS Imagens Sensibilidade ao toque 03 USE APARÊNCIAS INCRÍVEIS Temas, temas, temas 04 TORNE-O ÓBVIO Barras de ações Fragmentos Clique e arraste
  • 6. Suponha que seus usuários estejam usando orientação paisagem.
  • 7. Layouts com orientação paisagem Muitas vezes, a orientação paisagem precisa de layouts especializados, em qualquer dispositivo
  • 8. Layouts com orientação paisagem Veja o que acontece no tablet
  • 9. Layouts com orientação paisagem O que deu errado? alignParentLeft alignParentRight Nada no centro Imagem pequena
  • 10. Layouts com orientação paisagem Design para tamanho e orientação da tela
  • 11. Layouts com orientação paisagem O layout vencedor centerHorizontal="true" <RelativeLayout> layout_alignLeft layout_alignRight
  • 12. Layouts com orientação paisagem Otimize a experiência do usuário de wide screens
  • 13. Layouts com orientação paisagem Evite o efeito de grande oceano
  • 14. Tamanhos de textos Textos pequenos (como imagens) provavelmente não funcionarão
  • 15. Tamanhos de textos Melhores práticas Escale com sp 18 sp e superior Certifique-se de que o texto é legível para os usuários reais
  • 16. Notificações elaboradas Um importante benefício do Android em relação a outras plataformas móveis Notificação da sua app
  • 17. Notificações elaboradas Exemplos de quando usar notificações elaboradas Ao chegar novo conteúdo Quando uma mídia está sendo reproduzida
  • 18. Notificações elaboradas Duas notificações são exibidas no Honeycomb Bandeja (Tray) Pop-up
  • 19. Notificações elaboradas Use a classe Notification.Builder Notification.Builder builder = new Notification.Builder( this ); Como AlertDialog.Builder
  • 20. Notificações elaboradas Crie a notificação que você quiser builder.setSmallIcon(R.drawable.icon) .setContentTitle(title) .setContentText(text) .setContentIntent(pintent) // Um “pending intent” .setLargeIcon(myBitmap) ;
  • 21. Notificações elaboradas Codificação visual setLargeIcon() setSmallIcon() setContentTitle() setContentText()
  • 22. Notificações elaboradas Adquira um pouco de mágica: crie um botão clicável 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);
  • 23. Notificações elaboradas Estraté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
  • 24. Adquira a mágica 01 PENSE NA ERGONOMIA 02 ENVOLVA OS SENTIDOS Imagens Sensibilidade ao toque 03 USE APARÊNCIAS INCRÍVEIS 04 TORNE-O ÓBVIO
  • 25. A visão supera todos os outros sentidos. Regras do cérebro Dr. John Medina
  • 27. Imagens Telas para diferentes dispositivos precisam de tamanhos diferentes de imagem
  • 28. Imagens Escolha uma estratégia de imagem Um conjunto de imagens e deixe o Android dimensionar automaticamente? 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?
  • 29. Imagens Memória vs tamanho do arquivo: um exemplo Dimensionamento automático 32 MB de memória 324 KB de tamanho Conjuntos de imagens 23 MB de memória 728 KB de tamanho
  • 30. O dimensionamento automático usa memória. Conjuntos de imagem personalizados aumentam o tamanho do arquivo.
  • 31. Imagens Apresente amostras de imagens grandes em tempo de execução para economizar memória 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);
  • 32. Imagens Onde colocar imagens e ícones Padrão, dimensionado automaticamente Ícones de alta resolução Pré-dimensionado para Combine estilo 3.0 densidade
  • 33. Sensibilidade ao toque Tablets são desenvolvidos para o toque
  • 34. Sensibilidade ao toque Certifique-se de que todos os alvos possam ser tocados
  • 35. Sensibilidade ao toque Certifique-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; }
  • 36. Sensibilidade ao toque Veja como as imagens são transferidas entre dispositivos 160 dpi – média Proporção 16:9
  • 37. Adquira a mágica 01 PENSE NA ERGONOMIA 02 ENVOLVA OS SENTIDOS 03 USE APARÊNCIAS INCRÍVEIS Temas, temas, temas 04 TORNE-O ÓBVIO
  • 38. Temas Coerente com o dispositivo, ou destacado
  • 39. Temas O Honeycomb apresenta dois novos temas holográficos Theme.Holo Theme.Holo.Light
  • 40. Temas Mas 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
  • 41. Temas Porém, você pode querer que sua aplicação funcione em várias versões do Android <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="11" />
  • 42. Temas Crie diversos temas para versões do Android <style … parent= "@android:style/Theme"> <style … parent= "@android:style/Theme.Holo">
  • 43. Certifique-se de que todas as chamadas de API que você usa funcionam para todas as versões de API que você suporta.
  • 44. Adquira a mágica 01 PENSE NA ERGONOMIA 02 ENVOLVA OS SENTIDOS 03 USE APARÊNCIAS INCRÍVEIS 04 TORNE-O ÓBVIO Barras de ações Fragmentos Clique e arraste
  • 45. Barras de ações Torne os recursos de seus aplicativos prontamente disponíveis Ícone da app Diálogo dropdown Visualização Itens de ações de ações
  • 46. Barras de ações Codificação visual <item android:showAsAction="true" … > onCreateOptionsMenu() android:actionLayout onOptionsItemSelected() android:actionViewClass
  • 47. Barras de ações Etapa 1: foco no nível 11 de API <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="11" />
  • 48. Barras de ações Etapa 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" />
  • 49. Barras de ações Etapa 3: manipule a seleção de opções como de costume @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.favorite: // faça algo return true; … }
  • 50. Barras de ações No XOOM e em um smartphone
  • 51. Barras de ações Use 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>
  • 52. Barras de ações Use um pouco de mágica, adicione um diálogo Use AlertDialog.Builder Crie um diálogo personalizado em XML Use um DialogFragment
  • 53. Barras de ações Mas 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 }
  • 54. Fragments (Fragmentos) Use para mostrar mais conteúdo e recursos, de forma mais fluida
  • 55. Fragments (Fragmentos) É possível usar muitos padrões Mais comum
  • 56. Fragments (Fragmentos) O layout inicial do fragment é o mesmo em todas as orientações
  • 57. Fragments (Fragmentos) Porém, é possível mostrar ou ocultar exibições (“views”)
  • 58. Fragments (Fragmentos) Encontre seus fragments, em sua Activity principal Fragment gridFrag = getFragmentManager(). findFragmentById(R.id.photogrid); Fragment photoFrag = getFragmentManager(). findFragmentById(R.id.the_frag);
  • 59. 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); }
  • 60. Fragments (Fragmentos) Ainda melhor Transição animada
  • 61. 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>
  • 62. 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();
  • 63. Clique e arraste (“Drag and drop”) Cria envolvimento físico, direto e imediato
  • 64. Clique e arraste (“Drag and drop”) Tem diversos estados de evento ACTION_DRAG_STARTED ACTION_DRAG_ENTERED
  • 65. Clique e arraste (“Drag and drop”) Tem diversos estados de evento ACTION_DROP ACTION_DRAG_ENDED
  • 66. Clique e arraste (“Drag and drop”) Veja como isso funciona nos fragmentos
  • 67. Clique e arraste (“Drag and drop”) Para iniciar, chame startDrag() Escolha um gesto que inicia um arrasto: long click? Crie um listener: OnLongClickListener() Crie objetos ClipData e DragShadowBuilder Inicie um arrasto public boolean onLongClick(View v) { ClipData data = ClipData.newPlainText("foo","bar"); DragShadowBuilder shadowBuilder = new DragShadowBuilder(); v.startDrag(data, shadowBuilder, v, 0); return true; }
  • 68. Clique e arraste (“Drag and drop”) Em seguida, continue com um listener e onDrag() Criar um ouvinte de arrasto (implementar OnDragListener) Substituir onDrag e manipular eventos class BoxDragListener implements OnDragListener { public boolean onDrag(View self, DragEvent event) { if (event.getAction() == DragEvent.ACTION_DRAG_STARTED) { // fazer algo } // manipular outros eventos }
  • 69. Perguntas? @suzalex @motodev @motodevbr Brasil - #appsum11br Argentina - #appsum11ar México - #appsum11mx community.developer.motorola.com
  • 71. 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ão pré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.0 Copyright © 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ópia da 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/).
  • 72. 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.0 Copyright © 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 License Portions 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/).