domingo, 29 de setembro de 2013

Suportando Varias Versões de Plataforma

Enquanto que as ultimas versões do Android oferecem excelentes APIs para seu aplicativo, você deve continuar a suporta versões antigas do Android até que mais dispositivos sejam atualizados. Nesta postagem mostraremos como você pode tirar vantagem das ultimas APIs enquanto continua a suportar antigas versões.
O painel de instrumentos para Versões de Plataforma é atualizada regularmente para mostrar a distribuição de dispositivos ativos rodando cada versão do Android, baseado no numero de dispositivos que vistam a loja do Google Play. De modo comum, é uma boa pratica suportar em torno de 90% dos dispositivos ativos, enquanto direciona seu aplicativo para a versão mais recente.
Dica: Em ordem de fornecer as melhores características e funcionalidades através das varias versões do Android, você deve usar a Biblioteca de Suporte do Android em seu aplicativo, que permite você utilizar varias das recentes APIS da plataforma em versões antigas.
Especificar o Mínimo e Direcionar Níveis da API

O arquivo AndroidManifest.xml descreve os detalhes sobre o seu aplicativo e identifica qual versão do Android que suporta. Especificamente os atributos  minSdkVersion e targetSdkVersion para o elemento <uses-sdk identifica o menor nível de API com o qual seu aplicativo é compatível e o mais alto nível de API com o qual você desenvolveu e testou sua aplicação.
Por exemplo:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
   
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
    ...
</manifest>
Conforme novas versões do Android forem liberadas, alguns estilos e comportamentos podem mudar. Para permitir que seu aplicativo tire vantagem destas mudanças e assegurar que seu aplicativo se encaixa no estilo de cada dispositivo dos usuários, você deve definir o valor targetSdkVersion para equivaler com a ultima versão disponível do Android.
Verificar Versão do Sistema Durante Execução

Android fornece um código único para cada versão da plataforma através das constantes de classe Build. Utilize estes códigos dentro do seu aplicativo para construir construções que asseguram o código que depende de níveis altos da API seja executado somente com tais APIs disponíveis no sistema.
private void setUpActionBar() {
   
// Make sure we're running on Honeycomb or higher to use ActionBar APIs
   
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
       
ActionBar actionBar = getActionBar();
        actionBar
.setDisplayHomeAsUpEnabled(true);
   
}
}

Nota: Quando analisando os recursos XML, Android ignora os atributos XML que não são suportados pelo dispositivo atual. Portanto você pode usar sem problemas os atributos XML que serão suportados apenas pelas versões recentes despreocupado com versões antigas travarem quando encontrar o código. Por exemplo, se você definir o targetSdkVersion="11", seu aplicativo incluirá a ActionBar por padrão para o Android 3.0 e superior. Para então adicionar itens do menu na barra de ação, você precisa definir android:showAsAction="ifRoom" no seu menu de recursos XML. É seguro fazer isto diferentes versões do arquivo XML, uma vez que versões antigas do Android simplesmente ignoram o atributo showAsAction  (ou seja, você não precisa separar a versão em res/menu-v11/).
Usando Estilos e Temas da Plataforma

Android provê temas para o usuário experimentar temas que dão ao seu aplicativo o visual e sensação básica do sistema operacional. Estes temas podem ser aplicados no seu aplicativo dentro do arquivo manifest. Ao usar tais definições de estilos e temas, seu aplicativo irá naturalmente utilizar o mais recente visual de cada nova versão do Android.
Para fazer o visual de sua ação parecido com uma caixa de dialogo:
<activity android:theme="@android:style/Theme.Dialog">
Para fazer sua ação ter um plano de fundo transparente:
<activity android:theme="@android:style/Theme.Translucent">
Para aplicar seu próprio tema modificado defina em /res/values/styles.xml:
<activity android:theme="@style/CustomTheme">
Para aplicar o tema em todo seu aplicativo (todas as ações), adicione o atributo android:theme ao elemento <application>:
<application android:theme="@style/CustomTheme">
Para mais informações sobre criar e usar temas, leia o guia Estilos e Temas.

sábado, 31 de agosto de 2013

Suportando Várias Telas


Android classifica as telas de dispositivos usando duas propriedades gerais: tamanho e densidade. Você deve esperar que seu aplicativo fosse instalado em dispositivos com telas de varias faixas de tamanho e densidade. Para tanto, você deve incluir alguns recursos alternativos que aperfeiçoam a aparência de seu aplicativo para diferentes tamanhos de tela e densidades.
·         Existem quatro tamanhos generalizados: pequeno (small), normal, grande (large) e extragrande (xlarge).
·         E quatro densidades generalizadas: baixa (ldpi) media (mdpi), alta (hdpi) e extra-alta (xhdpi).
Para declarar diferentes esboços e bitmaps que você gostaria de usar para diferentes telas, você deve guardar estes recursos alternativos em diretórios separado, similar a maneira feita para o texto de diferentes idiomas.
Esteja alerta também de orientação da tela (retrato ou paisagem) é considerada uma variação do tamanho de tela, portanto vários aplicativos devem revisar o esboço para melhorar a experiência do usuário em cada orientação.

Criando Vários Esboços


Para melhorar a sua experiência de usuário em diferentes telas, você deve criar um único arquivo XML de esboço para cada tamanho de tela que deseje suportar. Cada esboço deve ser salvo dentro do diretório de recursos apropriados, nomeado com o sufixo -<screen_size>. Por exemplo, único esboço para tela grande deve ser salvo em res/layout-large/.
Nota: Android automaticamente dimensiona seu esboço para que se encaixe apropriadamente na tela. Portanto, seu esboço para diferentes tamanhos de tela não precisa se preocupar com o tamanho absoluto dos elementos de interface, mas sim com o foco do esboço da estrutura que afeta a experiência do usuário (tais como o tamanho ou posição de visualizações relativas às visualizações derivadas).
Por exemplo, este projeto inclui o esboço padrão e um esboço alternativo para telas grandes:
MyProject/
    res/
        layout/
            main.xml
        layout-large/
            main.xml
Os nomes dos arquivos devem ser exatamente iguais, mas o conteúdo deles serão diferente para que forneçam uma interface melhorada para o tamanho de tela correspondente.
Simplesmente referencie o arquivo de esboço em seu aplicativo como sempre faz:
@Override
 
protected void onCreate(Bundle savedInstanceState) {
     
super.onCreate(savedInstanceState);
      setContentView
(R.layout.main);
}
O sistema carrega o arquivo de esboço a partir do diretório de esboço apropriado através do tamanho de tela do dispositivo no qual seu aplicativo está rodando. Mais informações de como o Android seleciona o recurso apropriado está disponível no guia Fornecendo Recursos.
Outro exemplo, aqui está o projeto com o esboço alternativo para uma orientação de paisagem:
MyProject/
    res/
        layout/
            main.xml
        layout-land/
            main.xml
Por padrão, o arquivo de layout/main.xml é utilizado na orientação de retrato.
Se você quer fornecer um esboço especial para paisagem, incluindo para telas grandes, então você precisa de ambos os qualificadores large e land:
MyProject/
    res/
        layout/              # default (portrait)
            main.xml
        layout-land/         # landscape
            main.xml
        layout-large/        # large (portrait)
            main.xml
        layout-large-land/   # large landscape
            main.xml
Nota: Android 3.2 e acima suportam um método avançado para definição de tamanho de telas que permite a você especificarem os recursos de tamanho de tela baseado no mínimo de largura e altura em termos independentes da densidade dos pixeis. Esta postagem não explica está nova técnica. Para maiores informações, leia Projetando para varias Telas.
Criando Vários Bitmaps


Você deve sempre fornecer recursos de bitmap que estejam apropriadamente proporcionais a cada recipiente de densidade generalizado: densidade pequena, média, grande e extragrande. Isto ajuda você a conseguir um bom desempenho e qualidade gráfica em todas as densidades de tela.
Para gerar tais imagens, você deve iniciar seu recurso em formato de vetor e gerar as imagens para cada densidade usando as seguintes escalas de tamanho:
·         xhdpi: 2.0
·         hdpi: 1.5
·         mdpi: 1.0 (patamar)
·         ldpi: 0.75
Isto significa que você deve gerar imagens 200x200 para dispositivos xhdpi, você deve gerar o mesmo recurso em 150x150 para hdpi, 100x100 para mdpi e 75x75 para dispositivos ldpi.
Então, colocar os arquivos no diretório de mapeamento de recurso apropriado:
MyProject/
    res/
        drawable-xhdpi/
            awesomeimage.png
        drawable-hdpi/
            awesomeimage.png
        drawable-mdpi/
            awesomeimage.png
        drawable-ldpi/
            awesomeimage.png
Sempre que referir @drawable/awesomeimage, o sistema seleciona o bitmap apropriado baseado na densidade da tela.
Nota: Recursos de baixa densidade (ldpi) não são sempre necessários. Quando você fornece valores hdpi, o sistema redimensiona para metade do tamanho para se encaixar apropriadamente nas telas ldpi.
Para mais dicas e instruções de como criar ícones para seu aplicativo, veja Guia de desenho para Iconografia.


sexta-feira, 16 de agosto de 2013

Suportando Vários Idiomas

É sempre uma boa pratica extrair todo o texto da interface do usuário do código do seu aplicativo e manter em um arquivo externo. Android facilita essa ação com os recursos de diretório em cada projeto Android.
Se você criou seu projeto usando as ferramentas do Android SDK (leia Criando um projeto para Android), as ferramentas criam o diretório res/ em um nível superior do projeto. Dentro deste diretório res/ os subdiretórios de vários tipos de recursos. Existem também alguns poucos arquivos padrão tais como res/values/strings.xml, que mantém o valor do texto.
Criando Diretórios de Localidade e Arquivos Textos


Para adicionar suporte para mais idiomas, crie adicionalmente os diretórios values dentro do res/ que incluem um hífen e o código ISO para o país ao fim do nome do diretório. Por exemplo, values-es/ é um diretório contendo recursos simples para o Idioma com a linguagem de código “es”. Android carrega os recursos apropriados de acordo com as configurações de idioma no dispositivo enquanto funciona.
Uma vez que tenha decidido quais idiomas você irá dar suporte, crie subdiretórios de recursos e arquivos texto de recurso. Por exemplo:
MyProject/
    res/
       values/
           strings.xml
       values-es/
           strings.xml
       values-fr/
           strings.xml
Adicione o valor de texto para cada idioma no arquivo apropriado.
Durante a execução, o sistema Android usa as definições apropriadas do recurso de texto baseado nas configurações de idioma do dispositivo do usuário.
Por exemplo, a seguir temos diferentes arquivos de recursos de texto para diferentes idiomas.
Inglês (default locale), /values/strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
   
<string name="title">My Application</string>
   
<string name="hello_world">Hello World!</string>
</resources>
Espanhol/values-es/strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
   
<string name="title">Mi Aplicación</string>
   
<string name="hello_world">Hola Mundo!</string>
</resources>
Francês/values-fr/strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
   
<string name="title">Mon Application</string>
   
<string name="hello_world">Bonjour le monde !</string>
</resources>
Nota: Você pode usar o qualificador local (ou qualquer qualificador local) em qualquer tipo de recurso, tais como se você precise fornecer versões locais. Para maiores informações, veja Localização.
Usando os Recursos de Texto


Você pode referenciar os recursos de texto em seu código fonte e outros arquivos XML usando o nome do recurso definidos pelo atributo name do elemento <string>.
Dentro do seu código fonte, você pode referenciar o recurso do texto com a sintaxe R.string.<string_name>. Existem vários métodos que aceitam o recurso de texto desta forma.
Por exemplo:
// Get a string resource from your app's Resources
String hello = getResources().getString(R.string.hello_world);

// Or supply a string resource to a method
// That requires a string
TextView textView = new TextView(this);
textView
.setText(R.string.hello_world);

Em outros arquivos XML, você sempre pode referir a um recurso do texto com a sintaxe @string/<string_name> s sempre que o atributo XML aceitar o valor do texto.
Por exemplo:
<TextView
   
android:layout_width="wrap_content"
   
android:layout_height="wrap_content"
   
android:text="@string/hello_world" />