Criando Projeto Android

82
Criando um projeto Android ANTERIORPRÓXIMA ESTA LIÇÃO ENSINA A 1. Criar um projeto com Android Estúdio 2. Criar um projeto com ferramentas de linha de comando VOCÊ TAMBÉM DEVE LER Gerenciamento de Projetos Um projeto Android contém todos os arquivos que compõem o código-fonte para o seu app Android. Esta lição mostra como criar um novo projeto ou usando Android Studio ou usando as ferramentas do SDK a partir de uma linha de comando. Nota: Você já deve ter o SDK Android instalado, e se você estiver usando o Android Studio, você também deve terAndroid estúdio instalado. Se você não tiver esses, siga o guia de instalação do SDK Android antes de começar esta lição. Criar um projeto com Android Estúdio 1. Em Android Studio, crie um novo projeto: o Se você não tiver um projeto aberto, no Bem-vindo tela, clique em New Project . o Se você tiver um projeto aberto, a partir do arquivo de menu, selecione New Project .

Transcript of Criando Projeto Android

Criando um projeto Android ANTERIORPRÓXIMA

ESTA LIÇÃO ENSINA A

1. Criar um projeto com Android Estúdio

2. Criar um projeto com ferramentas de linha de comando

VOCÊ TAMBÉM DEVE LER

Gerenciamento de Projetos

Um projeto Android contém todos os arquivos que compõem o código-fonte para o seu app

Android.

Esta lição mostra como criar um novo projeto ou usando Android Studio ou usando as

ferramentas do SDK a partir de uma linha de comando.

Nota: Você já deve ter o SDK Android instalado, e se você estiver usando o Android

Studio, você também deve terAndroid estúdio instalado. Se você não tiver esses, siga o

guia de instalação do SDK Android antes de começar esta lição.

Criar um projeto com Android Estúdio

1. Em Android Studio, crie um novo projeto:

o Se você não tiver um projeto aberto, no Bem-vindo tela, clique em New Project .

o Se você tiver um projeto aberto, a partir do arquivo de menu, selecione New

Project .

Figura 1. Configurando um novo projeto no Android Studio.

2. Sob Configure seu novo projeto , preencha os campos conforme mostrado na figura 1

e clique emAvançar .

Provavelmente será mais fácil seguir essas lições se você usar os mesmos valores

como mostrado.

o Nome do aplicativo é o nome do aplicativo que aparece para os usuários. Para este

projeto, use "My First App."

o Domínio da empresa fornece um qualificador que será anexado ao nome do

pacote; Android Estúdio vai se lembrar deste qualificador para cada novo projeto

criado.

o Nome do pacote é o nome totalmente qualificado para o projeto (seguindo as

mesmas regras para a nomeação de pacotes na linguagem de programação

Java). Seu nome embalagem deve ser exclusivo em todos os pacotes instalados no

sistema Android. Você pode editar esse valor independentemente do nome do

aplicativo ou o domínio da empresa.

o Local do Projeto é o diretório em seu sistema que contém os arquivos do projeto.

3. Sob Selecionar a forma Fatores seu aplicativo será executado em , marque a caixa

de telefone e tablet .

4. Para SDK mínimo , selecione API 8: Android 2.2 (Froyo) .

O mínimo exigido SDK é a versão mais antiga do Android que seus suportes de

aplicativos, indicadas com onível API . Para suportar tantos dispositivos quanto

possível, você deve definir isso para o menor versão disponível que permite que o seu

app para fornecer seu conjunto de recursos do núcleo. Se alguma característica do seu

aplicativo é possível apenas em versões mais recentes do Android e não é crítico para

o núcleo conjunto de recursos do app, você pode ativar o recurso somente quando

rodando em versões que o suportam (como discutido no apoio às diferentes versões de

plataforma ).

5. Deixe todas as outras opções (TV, desgaste e Glass) desmarcada e clique em

Avançar.

Atividades

Uma atividade é uma das características distintivas do quadro Android. Atividades

fornecer ao usuário o acesso a sua aplicação, e pode haver muitas atividades. Um

pedido geralmente têm uma atividade principal para quando o usuário inicia a

aplicação, uma outra atividade para quando ela seleciona algum conteúdo para ver,

por exemplo, e outras atividades para quando ela executa outras tarefas dentro do

app. VejaAtividades para mais informações.

6. Sob Adicionar uma atividade para < template > , selecioneAtividade em branco e

clique em Avançar .

7. Sob Escolha opções para o seu novo arquivo , altere o nome da

atividade para MyActivity . O Nome do layout muda paraactivity_my ,

eo título de MyActivity . O nome do recurso de menu é menu_my .

8. Clique no Finish botão para criar o projeto.

Seu projeto Android é agora um app básico "Olá Mundo", que contém alguns arquivos

padrão. Tome um momento para rever a mais importante delas:

app / src / main / res / layout / activity_my.xml

Este é o arquivo de layout XML para a atividade que você adicionou quando criou

o projeto com Android Studio.Seguindo o fluxo de trabalho New Project, Android

Estúdio apresenta este arquivo com uma exibição de texto e uma pré-visualização

da tela de interface do usuário. O arquivo inclui algumas configurações padrão e

um TextView elemento que exibe a mensagem: "Olá, mundo!"

app / src / main / java / com.mycompany.myfirstapp /

MyActivity.java

Um guia para este arquivo aparece em Android Studio quando o fluxo de trabalho

New Project termina.Quando você seleciona o arquivo que você veja a definição

de classe para a atividade que você criou.Quando você criar e executar o

aplicativo, o Activity aula começa a atividade e carrega o arquivo de layout que

diz "Olá mundo!"

app / src / main / AndroidManifest.xml

O arquivo de manifesto descreve as características fundamentais do app e define

cada um dos seus componentes. Você vai revisitar este arquivo que você siga

estas lições e adicionar mais componentes para o seu app.

app / build.gradle

Android Studio usa Gradle para compilar e construir o seu app. Há

um build.gradle arquivo para cada módulo do seu projeto, bem como

a build.gradle arquivo para o projeto inteiro. Normalmente, você só está

interessado no build.gradle arquivo para o módulo, neste caso, o app ou

módulo de aplicação. Este é o lugar onde dependências de construção de seu

aplicativo são definidas, incluindo as DefaultConfigconfigurações:

compiledSdkVersion é a versão da plataforma com a qual você irá compilar o

seu app. Por padrão, isso é definido como a última versão do Android disponível

no seu SDK. (Deve ser Android 4.1 ou superior, se você não tem essa versão

disponível, você deve instalar um usando o Gerenciador de SDK ). Você ainda

pode construir seu aplicativo para suportar as versões mais antigas, mas

definindo-o para a versão mais recente permite- para permitir novos recursos e

otimizar o seu app para uma grande experiência do usuário em dispositivos

mais recentes.

ApplicationID é o nome do pacote completo para seu aplicativo que você

especificou durante o fluxo de trabalho New Project.

minSdkVersion é a versão SDK mínimo especificado durante o fluxo de

trabalho New Project. Esta é a versão mais antiga do Android SDK que o seu

aplicativo suporta.

targetSdkVersion indica a maior versão do Android com o qual você tenha

testado sua aplicação. À medida que novas versões do Android se tornam

disponíveis, você deve testar seu aplicativo na nova versão e atualizar este

valor para corresponder ao nível API mais recente e, assim, tirar proveito dos

novos recursos da plataforma. Para mais informações, leia o apoio às diferentes

versões da plataforma .

Veja Construindo seu projeto com Gradle para mais informações sobre Gradle.

Note-se também os / RES subdiretórios que contêm os recursos para

a sua aplicação:

drawable <densidade> /

Diretórios para objetos drawable (como bitmaps) que são projetados para várias

densidades, como de média densidade (MDPI) e (hdpi) telas de alta

densidade. Outros diretórios drawable conter ativos projetadas para outras

densidades de tela. Aqui você vai encontrar o ic_launcher.png que aparece quando

você executar o aplicativo padrão.

layout /

Diretório para arquivos que definem a interface de seu aplicativo do usuário, como

activity_my.xml, discutido acima, que descreve um layout básico para a classe

MyActivity.

Menu /

Diretório para arquivos que definem os itens de menu de seu aplicativo.

valores /

Diretório para outros arquivos XML que contêm um conjunto de recursos, tais

como definições de cordas e de cor. O arquivo strings.xml define o "Olá,

mundo!" seqüência que mostra quando você executar o aplicativo padrão.

Para executar o aplicativo, passe para a próxima

lição .

Criar um projeto com ferramentas de linha de comando

Se você não está usando o IDE Android Studio,

você pode, em vez criar seu projeto usando as

ferramentas do SDK a partir de uma linha de

comando:

1. Altere os diretórios para o SDK do Android SDK

/ caminho.

2. Executar:

ferramentas / alvos lista android

Imprime uma lista de plataformas disponíveis

para Android que você tenha baixado para o seu

SDK. Encontre a plataforma com a qual você

quer compilar seu app. Anote o ID de

destino. Recomendamos que você selecione a

versão mais alto possível. Você ainda pode

construir o seu app para apoiar as versões mais

antigas, mas definir o destino de compilação para

a versão mais recente permite otimizar seu

aplicativo para os dispositivos mais recentes.

Se você não vê quaisquer metas listadas, você

precisa instalar alguns usando a ferramenta SDK

Android Manager. Veja Adicionando pacotes

SDK .

3. Executar:

4. android criar projeto --target <target-id> --name MyFirstApp \

5. --path <path-to-workspace> / MyFirstApp --activity MyActivity \

6. com.example.myfirstapp --package

Substitua <target-id> com um ID da lista de

alvos (da etapa anterior) e substitua <path-to-

workspace> com o local em que você deseja

salvar seus projetos Android.

Dica: Adicione as plataformas-tools / , bem

como a / ferramentas de diretório para

a PATH variável de ambiente.

Seu projeto Android é agora um app básico "Olá

Mundo", que contém alguns arquivos padrão. Para

executar o aplicativo, passe para a próxima lição .

Executando o seu App ANTERIORPRÓXIMA

ESTA LIÇÃO ENSINA A

1. Executado em um dispositivo real

2. Execute no Emulator

VOCÊ TAMBÉM DEVE LER

Utilizar dispositivos de hardware

Gerenciando AVDs com AVD Manager

Gerenciamento de Projetos

Se você seguiu a lição anterior para criar um projeto Android, que inclui um conjunto

padrão de arquivos de origem "Olá Mundo" que permitem que você execute

imediatamente o app.

Como você executar seu aplicativo depende de duas coisas: se você tem um dispositivo

real rodando Android e se você estiver usando o Android Studio. Esta lição mostra como

instalar e executar o seu aplicativo em um dispositivo real e no emulador Android, e em

ambos os casos com ou Estúdio Android ou as ferramentas de linha de comando.

Executado em um dispositivo real

Se você tiver um dispositivo rodando Android, aqui está como instalar e executar o seu

app.

Configurar o dispositivo

1. Conecte o dispositivo ao computador de desenvolvimento com um cabo USB. Se você

está desenvolvendo no Windows, pode ser necessário instalar o driver USB apropriado

para o seu dispositivo. Para os motoristas de ajuda para instalar, consulte o drivers USB

OEM documento.

2. Ativar a depuração USB no seu dispositivo.

o Na maioria dos dispositivos que executam o Android 3.2 ou mais, você pode

encontrar a opção emConfigurações> Aplicativos> Desenvolvimento .

o No Android 4.0 e mais recentes, está em Configurações> Opções do

desenvolvedor .

Nota: No Android 4.2 e mais recentes, Opções do desenvolvedor está oculta por

padrão. Para torná-lo disponível, vá para Configurações> Sobre o telefone e toque

em número Construir sete vezes. Retorne à tela anterior de encontrar opções de

Desenvolvedor .

Execute o aplicativo do Android Estúdio

1. Selecione um dos arquivos do seu projeto e clique em Executar na barra de

ferramentas.

2. Na Escolha Aparelho janela que aparece, selecione a um dispositivo executando

Escolha botão de opção, selecione o dispositivo e clique em OK .

Android Estúdio instala o aplicativo em seu dispositivo conectado e começa-lo.

Execute o aplicativo a partir de uma linha de comando

Abra uma linha de comando e navegue até o diretório raiz do seu projeto. Use Gradle para

construir seu projeto no modo de depuração, invocar o assembleDebug tarefa de

compilação usando o script wrapper Gradle (assembleRelease gradlew ).

Isso cria a sua depuração .apk arquivo dentro do módulo build / diretório,

chamado MyFirstApp-debug.apk .

Em plataformas Windows, digite o seguinte comando:

> gradlew . bat assembleDebug

Em plataformas Mac OS e Linux, digite os seguintes comandos:

$ Chmod + x gradlew $ ./ gradlew assembleDebug

Depois de criar o projeto, a saída APK para o módulo app está localizado em app /

construir / saídas / apk /

Nota: O primeiro comando ( chmod ) acrescenta a permissão de execução ao script

wrapper Gradle e só é necessária na primeira vez que construir esse projeto a partir da

linha de comando.

Verifique se o SDK Android platform-tools / diretório está incluído no

seu PATH variável de ambiente, em seguida, execute:

adb instalar app / build / saídas / MyFirstApp-debug.apk

No dispositivo, localize MyFirstApp e abri-lo.

Isso é como você construir e executar seu aplicativo Android em um dispositivo! Para

iniciar o desenvolvimento, passe para a próxima lição .

Execute no Emulator

Se você está usando o Android Studio ou a linha de comando, para executar seu aplicativo

no emulador, você precisa primeiro criar um dispositivo virtual Android (AVD). Um AVD é

uma configuração do dispositivo para o emulador Android que permite modelar um

dispositivo específico.

Criar uma AVD

1. Lançar o Android Virtual Device Manager:

o Em Android Studio, selecione Ferramentas> Android> Gerenciador de AVD , ou

clique no ícone AVD Gerente na barra de ferramentas.

o Ou, a partir da linha de comando, altere os diretórios para sdk / e execute:

ferramentas / android avd

Nota: O Gestor de AVD que aparece quando iniciado a partir da linha de comando é

diferente da versão em Android Studio, de modo que as instruções a seguir podem

não se aplicar.

2. 3. Figura 1. A tela principal AVD Manager mostra seus dispositivos virtuais atuais.

4. Na tela principal do AVD Manager (figura 1), clique em Criar Dispositivo Virtual .

5. Na janela Selecionar Hardware, selecione a configuração do dispositivo, tais como

Nexus 6, em seguida, clique em Avançar .

6. Selecione a versão do sistema desejado para o AVD e clique em Avançar .

7. Verifique as definições de configuração, clique em Finish .

Para obter mais informações sobre o uso de AVDs, consulte Gerenciando AVDs com AVD

Manager .

Execute o aplicativo do Android Estúdio

1. Em Android Estúdio , selecione seu projeto e clique em Executar na barra de

ferramentas.

2. Na Escolha Aparelho janela, clique no emulador Lançamento botão de rádio.

3. A partir do dispositivo virtual Android menu pull-down, selecione o emulador que

você criou e clique em OK .

Pode demorar alguns minutos para que o emulador para carregar em si. Você pode ter

que desbloquear o ecrã.Quando fizer isso, meu primeiro aplicativo aparece na tela do

emulador.

Execute o aplicativo a partir da linha de comando

1. Criar o projeto a partir da linha de comando. A saída APK para o módulo app está

localizado em app / construir / saídas / apk / .

2. Verifique se o SDK Android platform-tools / diretório está incluído no

seu PATH variável de ambiente.

3. Execute este comando:

adb instalar app / build / saídas / MyFirstApp-debug.apk

4. No emulador, localize MyFirstApp e abri-lo.

Isso é como você construir e executar seu aplicativo Android no emulador! Para iniciar o

desenvolvimento, passe para a próxima lição .

Construir uma interface de usuário simples

ANTERIORPRÓXIMA

ESTA LIÇÃO ENSINA A

1. Criar um layout Linear

2. Adicionar um campo de texto

3. Adicionar recursos de seqüência

4. Adicionar um botão de

5. Faça a Caixa de Entrada Preencha a largura da tela

VOCÊ TAMBÉM DEVE LER

Layouts

Nesta lição, você cria um layout em XML que inclui um campo de texto e um botão. Na

próxima lição, o aplicativo responde quando o botão é pressionado, enviando o conteúdo

do campo de texto para outra atividade.

A interface gráfica do usuário para um aplicativo Android é construído usando uma

hierarquia de Visualização e ViewGroupobjetos. Visualização de objetos são

geralmente widgets UI, tais como botões ou campos de texto . ViewGroup objetos são

vista recipientes invisíveis que definem como os pontos de vista de crianças são colocadas

para fora, como em uma grade ou uma lista vertical.

Android fornece um vocabulário XML que corresponde às subclasses

de Ver e ViewGroup para que você possa definir o seu UI em XML usando uma hierarquia

de elementos de interface do usuário.

Layouts são subclasses da ViewGroup . Neste exercício, você vai trabalhar com

um LinearLayout .

Layouts alternativos

Declarando seu layout UI em XML em vez de código de tempo de execução é útil por várias

razões, mas é especialmente importante para que você possa criar layouts diferentes para

diferentes tamanhos de tela. Por exemplo, você pode criar duas versões de um layout e dizer

ao sistema para usar um sobre "pequenas" telas e outra nas telas "grandes". Para obter mais

informações, consulte a classe sobre apoio às diferentes dispositivos.

Figura 1. Ilustração de como ViewGroup objetos ramos de formulário no layout e conter

outros Veja objetos.

Criar um layout Linear

1. Em Android Studio, da res / layout diretório, abra o activity_my.xml arquivo.

O modelo BlankActivity que você escolheu quando criou este projeto inclui

a activity_my.xml arquivo com um RelativeLayout exibição de raiz e

um TextView vista criança.

2. Na prévia painel, clique no ícone Ocultar para fechar o painel de visualização.

Em Android Studio, quando você abre um arquivo de layout, você é mostrado primeiro

painel de visualização.Clicando elementos neste painel abre as ferramentas WYSIWYG

no painel de estrutura. Para esta lição, você vai trabalhar diretamente com o XML.

3. Excluir o <TextView> elemento.

4. Alterar o <RelativeLayout> elemento a <LinearLayout> .

5. Adicione o android: orientação atributo e defini-la como "horizontal" .

6. Retire o android: preenchimento atributos e ferramentas: contexto atributo.

O resultado se parece com isso: res / layout / activity_my.xml

<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" xmlns:tools = "http://schemas.android.com/tools" android:layout_width = "match_parent" android:layout_height = "match_parent" android:orientation = "horizontal" > </LinearLayout>

LinearLayout é um grupo view (uma subclasse de ViewGroup ) que estabelece pontos

de vista da criança em uma orientação vertical ou horizontal, conforme especificado

pelo android: orientação atributo. O filho de umLinearLayout aparece na tela na

ordem em que aparece no XML.

Dois outros atributos, android: layout_width e android: layout_height , são

necessários para todos os pontos de vista, a fim de especificar o seu tamanho.

Porque o LinearLayout é a exibição de raiz no layout, deve preencher a área da tela

inteira que está disponível para o aplicativo, definindo a largura e altura

para "match_parent" . Este valor declara que a visão deve expandir sua largura ou

altura para corresponder a largura ou altura da vista principal.

Para mais informações sobre propriedades de layout, veja o layout guia.

Adicionar um campo de texto

Tal como acontece com todas as Vista objeto, você deve definir os atributos certos XML

para especificar oEditText propriedades do objeto.

1. No activity_my.xml arquivo, dentro do <LinearLayout> elemento, definir

um <EditText> elemento com o idatributo definido como @ + id / edit_message .

2. Definir o layout_width e layout_height atributos como wrap_content .

3. Definir uma dica atributo como uma string objeto chamado edit_message .

O <EditText> elemento deve ter a seguinte redacção:

res / layout / activity_my.xml

<EditText android:id = "@+id/edit_message" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:hint = "@string/edit_message" />

Aqui estão o <EditText> atributos que você adicionou:

android: id

Isso fornece um identificador exclusivo para a vista, que você pode usar para fazer

referência ao objeto do seu código app, como ler e manipular o objeto (você vai ver

isso na próxima aula).

O sinal de arroba ( @ ) é necessária quando você está se referindo a qualquer

objeto de recurso do XML. Ele é seguido pelo tipo de recurso ( id , neste caso),

uma barra, em seguida, o nome do recurso ( edit_message).

Objetos de recurso

Um objeto de recurso é um nome inteiro exclusivo que está associado a um

recurso app, como um bitmap, arquivo layout, ou string.

Todo recurso tem um objeto de recurso correspondente definida no do seu

projeto gen / R.java arquivo.Você pode usar os nomes de objeto noR classe

para se referir a seus recursos, tais como quando você precisa especificar um

valor de cadeia para o android: dica atributo. Você também pode criar IDs

de recursos arbitrários que você associa com vista usando o android:

id atributo, que permite fazer referência a esse ponto de vista de outro código.

As ferramentas do SDK gerar o R.javaarquivo cada vez que você compilar o

seu app. Você nunca deve modificar este arquivo manualmente.

Para mais informações, leia o guia para Fornecendo recursos .

O sinal de mais ( + ) antes do tipo de recurso só é necessária quando você está

definindo um ID de recurso pela primeira vez. Quando você compilar o aplicativo,

as ferramentas do SDK usar o nome de ID para criar um novo ID de recursos em

seu projeto de gen / R.java arquivo que se refere aoEditText elemento. Com a

identificação do recurso, uma vez declarado desta forma, outras referências para a

identificação não é necessário o sinal de mais. Usando o sinal de mais é

necessário somente quando a especificação de um novo ID de recursos e não é

necessário para recursos concretos, tais como cordas ou layouts. Veja o Sidebox

para obter mais informações sobre objetos de recurso.

android: layout_width e android: layout_height

Em vez de usar tamanhos específicos para a largura e altura,

o"wrap_content" valor especifica que a visão deve ser apenas tão grande

quanto necessário para ajustar o conteúdo do ponto de vista. Se você tivesse que

passar a usar"match_parent" , então o EditText elemento iria preencher a tela,

porque iria coincidir com o tamanho do pai LinearLayout. Para obter mais

informações, consulte o Layouts guia.

android: dica

Esta é uma seqüência de caracteres padrão para exibir quando o campo de texto

está vazio. Em vez de usar uma string codificada como o valor, o "@ string /

edit_message"valor refere-se a um recurso de cadeia definido em um arquivo

separado. Porque esta refere-se a um recurso concreto (e não apenas um

identificador), ele não precisa de o sinal de mais. No entanto, porque você não tiver

definido o recurso de cadeia no entanto, você verá um erro do compilador em

primeiro lugar. Você vai corrigir isso na próxima seção, definindo a seqüência.

Nota: Este recurso de cadeia tem o mesmo nome que o ID

elemento: edit_message . No entanto, as referências aos recursos são sempre

com escopo pelo tipo de recurso (como ID ou corda ), portanto, usando o mesmo

nome não causa colisões.

Adicionar recursos de seqüência

Por padrão, o projeto Android inclui um arquivo de recurso de cadeia

em res / valores / strings.xml . Aqui, você vai adicionar uma nova

seqüência de caracteres chamado "edit_message" e defina o valor como

"Digite uma mensagem."

1. Em Android Studio, a partir das res / valoriza diretório,

aberto strings.xml .

2. Adicionar uma linha para uma seqüência de caracteres

chamado "edit_message" com o valor, "Digite uma mensagem".

3. Adicionar uma linha para uma seqüência de caracteres

chamado "button_send" com o valor, em "Enviar".

Você vai criar o botão que utiliza esta cadeia na próxima seção.

4. Remova a linha para o "Olá mundo" string.

O resultado para strings.xml parece com isso:

res / valores / strings.xml

<? xml version = "1.0" encoding = "utf-8" ?> <resources> <string nome = "app_name" > My First App </ string> <string nome = "edit_message" > Digite um message </string> <string name = "button_send" > Send </string> <string name = "action_settings" > Settings </string> <string name = "title_activity_main" > MainActivity </string> </resources>

Para o texto na interface do usuário, sempre especificar cada corda como

um recurso. Recursos de cadeia permitem que você gerencie todo o texto

da interface do usuário em um único local, o que torna o texto mais fácil de

encontrar e atualização. Externalisação as cordas também permite localizar

o seu app para diferentes idiomas, fornecendo definições alternativas para

cada recurso de cadeia.

Para obter mais informações sobre o uso de recursos de cadeia para

localizar o seu aplicativo para outros idiomas, consulte o apoio aos diversos

dispositivos de classe.

Adicionar um botão de

1. Em Android Studio, da res / layout diretório, edite

o activity_my.xml arquivo.

2. Dentro do <LinearLayout> elemento, definir um <Button> elemento

imediatamente a seguir ao <EditText>elemento.

3. Ajuste da largura do botão e atributos altura

para "wrap_content" assim que o botão é somente tão grande quanto

necessário para caber rótulo de texto do botão.

4. Definir rótulo de texto do botão com o android: texto atributo; definir o

valor para o button_send recurso de cadeia definido na seção anterior.

Seu <LinearLayout> deve ser semelhante a este:

res / layout / activity_my.xml

<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" xmlns:tools = "http://schemas.android.com/tools" android:layout_width = "match_parent" android:layout_height = "match_parent" android:orientation = "horizontal" > <EditText android:id = "@+id/edit_message" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:hint = "@string/edit_message" /> <Button android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "@string/button_send" /> </LinearLayout>

Nota: Este botão não precisa do android: id atributo, porque não vai ser

referenciada a partir do código de atividade.

A disposição está concebida de modo que tanto

o EditarTexto e Botões estes elementos são somente tão grande quanto

necessário, para ajustar o seu conteúdo, como mostrado na figura 2.

Figura 2. O EditText e botão Widgets têm suas larguras definida

como "wrap_content" .

Isso funciona bem para o botão, mas não tão bem para o campo de texto,

porque o usuário pode digitar algo mais. Seria bom para preencher a largura

da tela não utilizada com o campo de texto. Você pode fazer isso dentro de

um LinearLayout com o peso da propriedade, o que você pode especificar

usando o android: layout_weight atributo.

O valor do peso é um número que especifica a quantidade de espaço

restante cada exibição deve consumir, em relação à quantidade consumida

pelos irmãos visualizações. Isso funciona mais ou menos como a

quantidade de ingredientes em uma receita da bebida: "2 partes de soda,

xarope de 1 parte" significa dois terços da bebida é refrigerante. Por

exemplo, se você der uma vista de um peso de 2 e outro um peso de 1, a

soma é de 3, então a primeira vista enche 2/3 do espaço restante ea

segunda vista preenche o resto. Se você adicionar um terceiro ponto de

vista e dar-lhe um peso de 1, então a primeira vista (com peso de 2) agora

recebe 1/2 o espaço restante, enquanto os restantes dois cada obter 1/4.

O peso padrão para todos os pontos de vista é 0, por isso, se você

especificar qualquer valor de peso maior que 0 a apenas um ponto de vista,

em seguida, que a visão preenche o espaço que permanece após todas as

vistas são dados o espaço de que necessitam.

Faça a Caixa de Entrada Preencha a largura da tela

Para preencher o espaço restante em seu layout com

o EditText elemento, faça o seguinte:

1. No activity_my.xml arquivo, atribua

o <EditText> elemento layout_weight atribuir um valor de 1 .

2. Além disso, atribuir <EditText> elemento layout_width atribuir um

valor de 0DP .

res / layout / activity_my.xml

<EditText android: layout_weight = "1" android: layout_width = "0DP" ... />

Para melhorar a eficiência do layout quando você especificar o peso,

você deve alterar a largura do EditTextser zero (0DP). Definir a largura

para zero porque melhora o desempenho do esquema

usando"wrap_content" como a largura requer o sistema para calcular

uma largura que é irrelevante porque em última análise, o valor do peso

requer um outro cálculo de largura para preencher o espaço restante.

A Figura 3 mostra o resultado quando você atribui todo o peso

ao EditText elemento.

Figura 3. O EditText widget é dado todo o peso layout, de forma a

preencher o espaço restante no LinearLayout .

Veja como sua completa activity_my.xml arquivo de layout agora deve

ser:

res / layout / activity_my.xml

<? xml version = "1.0" encoding = "utf-8" ?> <LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" xmlns:tools = "http://schemas.android.com/tools" android:layout_width = "match_parent" android:layout_height = "match_parent" android:orientation = "horizontal" > <EditText android:id = "@+id/edit_message" android:layout_weight = "1" android:layout_width = "0dp" android:layout_height = "wrap_content" android:hint = "@string/edit_message" /> <Button android:layout_width = "wrap_content"

android:layout_height = "wrap_content" android:text = "@string/button_send" /> </LinearLayout>

Executar o seu App

Este layout é aplicado pelo padrão Atividade classe que as ferramentas

do SDK gerado quando você criou o projeto. Execute o aplicativo para ver

os resultados:

Em Android Studio, a partir da barra de ferramentas, clique

em Executar .

Ou a partir de uma linha de comando, altere os diretórios para a raiz do

seu projeto Android e executar:

ant debug adb instalar bin / MyFirstApp - debug . apk

Continue para a próxima lição para aprender a responder ao

pressionamento de botões, ler o conteúdo do campo de texto, iniciar outra

atividade, e muito mais.

A partir de uma outra atividade ANTERIORPRÓXIMA

ESTA LIÇÃO ENSINA A

1. Responder ao botão Enviar

2. Construir uma Intent

3. Criar a segunda atividade

4. Receba o Intent

5. Mostrar a Mensagem

VOCÊ TAMBÉM DEVE LER

Instalando o SDK

Depois de completar a lição anterior , você tem um aplicativo que mostra uma atividade

(uma única tela) com um campo de texto e um botão. Nesta lição, você vai adicionar algum

código para MyActivity que inicia uma nova atividade quando o usuário clica no botão

Enviar.

Responder ao botão Enviar

1. Em Android Studio, da res / layout diretório, edite oactivity_my.xml arquivo.

2. Para o <Button> elemento, adicionar o android: onClickatributo.

res / layout / activity_my.xml

<Button android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "@string/button_send" android:onClick = "sendMessage" />

O android: onClick valor do atributo, "sendMessage" , é o nome de um método em

sua atividade que o sistema chama quando o usuário clica no botão.

3. No java / com.mycompany.myfirstapp diretório, abra

o MyActivity.java arquivo.

4. Dentro do MyActivity classe, adicione o sendMessage () método stub mostrado

abaixo.

java / com.mycompany.myfirstapp / MyActivity.java

/ ** Chamado quando o usuário clica no botão Enviar * / público vazio sendMessage ( Ver vista ) { // faz alguma coisa em resposta ao botão }

Para que o sistema para combinar com esse método para o nome do método dado

a android: onClick , a assinatura deve ser exatamente como

mostrado. Especificamente, o método deve:

o Seja pública

o Ter um valor de retorno void

o Tenha um Ver como único parâmetro (este será o Vista que foi clicado)

Em seguida, você vai preencher esse método para ler o conteúdo do campo de texto e

entregar esse texto para outra atividade.

Construir uma Intent

1. Em MyActivity.java , dentro do sendMessage () método, crie um Intenção para

iniciar uma atividade chamada DisplayMessageActivity com o seguinte código:

java / com.mycompany.myfirstapp / MyActivity.java

público vazio sendMessage ( Ver vista ) { Intenção intenção = nova Intent ( este , DisplayMessageActivity . classe ); }

Intenções

Uma Intenção é um objeto que fornece a ligação entre os componentes separados

(tais como duas atividades) runtime. A Intençãorepresenta "a intenção de fazer

alguma coisa." de um app Você pode usar as intenções para uma ampla variedade

de tarefas, mas na maioria das vezes eles são usados para iniciar outra

atividade. Para obter mais informações, consulte as intenções e Filtros Intent .

Nota: A referência a DisplayMessageActivity irá gerar um erro se você estiver

usando uma IDE como o Android Estúdio porque a classe não existe ainda. Ignore o

erro, por enquanto;você vai criar a classe em breve.

O construtor utilizado aqui tem dois parâmetros:

o A Contexto como seu primeiro parâmetro ( este é usado porque

o Activity classe é uma subclasse de Contexto )

o A classe do componente app para o qual o sistema deve entregar

a Intenção (neste caso, a actividade que deve ser iniciado)

Android Estúdio indica que você deve importar o Intenção de classe.

2. Na parte superior do arquivo, importe o Intenção de classe:

java / com.mycompany.myfirstapp / MyActivity.java

importação android . conteúdo . Intenção ;

Dica: No Android Studio, pressione Alt + Enter (opção + retorno do Mac) para importar

faltar às aulas.

3. Dentro do sendMessage () método, use findViewById () para obter

o EditText elemento.

java / com.mycompany.myfirstapp / MyActivity.java

public void sendMessage ( View view ) { Intent intent = new Intent ( this , DisplayMessageActivity . class ); EditText editText = ( EditText ) findViewById ( R . id . edit_message ); }

4. Na parte superior do arquivo, importe o EditText classe.

Em Android Studio, pressione Alt + Enter (opção + retorno do Mac) para importar faltar

às aulas.

5. Atribuir o texto para um local de mensagem variável, e usar o putExtra () método

para adicionar seu valor de texto para a intenção.

java / com.mycompany.myfirstapp / MyActivity.java

public void sendMessage ( View view ) { Intent intent = new Intent ( this , DisplayMessageActivity . class ); EditText editText = ( EditText ) findViewById ( R . id . edit_message ); String message = editText . getText (). toString (); intent . putExtra ( EXTRA_MESSAGE , message ); }

Uma Intenção pode transportar tipos de dados como pares de valores-chave

chamados extras . O putExtra () método leva o nome da chave no primeiro

parâmetro e o valor no segundo parâmetro.

6. Na parte superior do MyActivity classe, adicionar o EXTRA_MESSAGE definição como

se segue:

java / com.mycompany.myfirstapp / MyActivity.java

public class MyActivity extends ActionBarActivity { public final static String EXTRA_MESSAGE = "com.mycompany.myfirstapp.MESSAGE" ; ... }

Para a próxima atividade para consultar os dados extras, você deve definir a chave para

o adicional de sua intenção através de um constante público. Em geral, é uma boa

prática para definir as chaves para extras intenção usando o nome do pacote do seu

aplicativo como um prefixo. Isso garante que as chaves são únicas, no caso do seu app

interage com outros apps.

7. No sendMessage () método, para terminar a intenção, ligue para o startActivity

() método, passando oIntenção objeto criado na etapa 1.

Com esse novo código, a completa sendMessage () método que é chamado pelo botão

Enviar agora se parece com isso:

java / com.mycompany.myfirstapp / MyActivity.java

/ ** Chamado quando o usuário clica no botão Enviar */ public void sendMessage ( View view ) { Intent intent = new Intent ( this , DisplayMessageActivity . class ); EditText editText = ( EditText ) findViewById ( R . id . edit_message ); String message = editText . getText (). toString (); intent . putExtra ( EXTRA_MESSAGE , message ); startActivity ( intent ); }

O sistema recebe esta chamada e inicia uma instância da Atividade especificado

pelo Intent . Agora você precisa criar o DisplayMessageActivity classe para que isso

funcione.

Criar a segunda atividade

Todas as subclasses de Atividade deve implementar a onCreate () método. Este

método é o lugar onde a atividade recebe a intenção com a mensagem, em seguida,

processa a mensagem. Além disso, o onCreate ()método deve definir o layout atividade

com o setContentView () método. Este é o lugar onde a atividade executa a

configuração inicial dos componentes de atividade.

Criar uma nova atividade usando Android Estúdio

Figura 1. O novo assistente de atividade no Android Studio.

Android Studio inclui um esboço para oonCreate () método quando você cria uma nova

atividade.

1. Em Android Studio, no java diretório, selecione o

pacote,com.mycompany.myfirstapp , clique com o botão direito e selecione Novo>

Atividade> Atividade em branco .

2. Na escolha Opções de janela, preencha os detalhes da atividade:

o Nome da atividade : DisplayMessageActivity

o Nome do layout : activity_display_message

o Título : Minha mensagem

o Pai hierárquica : com.mycompany.myfirstapp.MyActivity

o Nome do pacote : com.mycompany.myfirstapp

Clique em Concluir .

3. Abra o DisplayMessageActivity.java arquivo.

A classe já inclui uma implementação da necessária onCreate () método. Você vai

atualizar a implementação deste método mais tarde. Ele também inclui uma

implementação de onOptionsItemSelected () , que trata da barra de

ação Up comportamento. Mantenha estes dois métodos como são para agora.

4. Remover o onCreateOptionsMenu () método.

Você não vai precisar dele para este app.

Se você está desenvolvendo com Android Studio, você pode executar o aplicativo agora,

mas não acontece muita coisa. Clicando no botão Enviar começa a segunda atividade,

mas ele usa um padrão "Olá, mundo" Layout fornecidos pelo modelo. Em breve, você

atualizar a atividade a vez exibir uma visão texto personalizado.

Criar a atividade sem Android Estúdio

Se você estiver usando uma IDE ou as ferramentas de linha de comando diferente, faça o

seguinte:

1. Crie um novo arquivo chamado DisplayMessageActivity.java no projeto src

/ diretório, ao lado do originalMyActivity.java arquivo.

2. Adicione o seguinte código para o arquivo:

Handle item da barra de acção clica aqui. A barra de ação vai // tratar automaticamente os cliques no botão Home / Up, desde // como você especificar uma atividade pai em Um fragmento de espaço reservado contendo uma simples

Nota: Se você estiver usando uma IDE diferente Android Studio, seu projeto não

contém oactivity_display_message layout que é solicitado pelo setContentView

() . Isso é OK, porque você vai atualizar este método mais tarde e não vai estar usando

esse layout.

3. Para sua strings.xml arquivo, adicione o título do novo atividade da seguinte forma:

<Resources> ... <string nome = "title_activity_display_message" > Minha Mensagem </ string> </ resources>

4. Em seu arquivo de manifesto, AndroidManifest.xml , dentro

do aplicativo elemento, adicione o <activity>elemento para o

seu DisplayMessageActivity classe, como segue:

<application ... > ... <activity android:name = "com.mycompany.myfirstapp.DisplayMessageActivity" android:label = "@string/title_activity_display_message" android:parentActivityName = "com.mycompany.myfirstapp.MyActivity" > <meta-data android:name = "android.support.PARENT_ACTIVITY" android:value = "com.mycompany.myfirstapp.MyActivity" /> </activity> </application>

O android: parentActivityName atributo declara o nome da atividade pai desta

atividade dentro hierarquia lógica do aplicativo. O sistema utiliza este valor para

implementar comportamentos de navegação padrão, comonavegação Up on Android 4.1

(nível API 16) e superior. Você pode fornecer os mesmos comportamentos de navegação

para versões mais antigas do Android usando a biblioteca de suporte e adicionando

o <meta-dados>elemento imediata.

Nota: O seu SDK Android já deverá incluir o suporte mais recente Biblioteca Android, que

você instalou durante a adição de pacotes SDK etapa. Ao usar os modelos no Android

Studio, a biblioteca de suporte é automaticamente adicionado ao seu projeto app (você

pode ver arquivo JAR da biblioteca listada emDependências Android ). Se você não está

usando o Android Studio, você precisa adicionar manualmente a biblioteca para o seu

projeto de seguir o guia para configurar a biblioteca de suporte , em seguida, voltar aqui.

Se você estiver usando uma IDE diferente do Android Studio, não se preocupe que o app

ainda não irá compilar.Em breve, você atualizar a atividade para exibir uma visão texto

personalizado.

Receba o Intent

Cada atividade é invocado por um Intent , independentemente de como o usuário

navegou lá. Você pode obter a Intenção que começou sua atividade

chamando getIntent () e recuperar os dados contidos na intenção.

1. No java / com.mycompany.myfirstapp diretório, edite

o DisplayMessageActivity.java arquivo.

2. No onCreate () método, remova a seguinte linha:

setContentView ( R . disposição . activity_display_message );

3. Obter a intenção e atribuí-lo a uma variável local.

Intenção intenção = getIntent ();

4. Na parte superior do arquivo, importe o Intenção de classe.

Em Android Studio, pressione Alt + Enter (opção + retorno do Mac) para importar faltar

às aulas.

5. Extrai-se a mensagem entregue por MyActivity com o getStringExtra () método.

Cadeia mensagem = intenção . getStringExtra ( MyActivity . EXTRA_MESSAGE );

Mostrar a Mensagem

1. No onCreate () método, crie um TextView objeto.

TextView textView = nova TextView ( este );

2. Defina o tamanho do texto e mensagem com setText () .

textView . SetTextSize ( 40 ); textView . setText ( mensagem );

3. Em seguida, adicione o TextView como a vista raiz do layout da atividade, passando-a

para setContentView () .

setContentView ( textView );

4. Na parte superior do arquivo, importe o TextView classe.

Em Android Studio, pressione Alt + Enter (opção + retorno do Mac) para importar faltar

às aulas.

A completa onCreate () método para DisplayMessageActivity agora se parece com

isso:

Override pública vazio onCreate ( Bundle savedInstanceState ) { super . onCreate ( savedInstanceState ); // Obter a mensagem da intenção Intenção intenção = getIntent (); Cordas mensagem = intenção . getStringExtra ( MyActivity . EXTRA_MESSAGE ); // Criar a exibição de texto TextView textView = nova TextView ( este ); textView . SetTextSize ( 40 ); textView . setText ( mensagem ); // definir a exibição de texto como o layout atividade setContentView ( textView ); }

Agora você pode executar o aplicativo. Quando se abre, digite uma mensagem no campo

de texto, clique em Enviar, e a mensagem aparece na segunda atividade.

Figura 2. Ambas as atividades no app final, funcionando com o Android 4.4.

É isso aí, você construiu o seu primeiro aplicativo Android!

Para saber mais, siga o link abaixo para a próxima aula

Adicionando o Bar Ação COMEÇAR

DEPENDÊNCIAS E PRÉ-REQUISITOS

Android 2.1 ou superior

VOCÊ TAMBÉM DEVE LER

Barra de ação

A implementação da navegação eficaz

GUIA DE DESIGN

Barra de ação

A barra de ação é um dos elementos de design mais importantes que você pode

implementar para as atividades de seu aplicativo. Ele oferece vários recursos de interface

de usuário que fazem seu app imediatamente familiar aos usuários, oferecendo

consistência entre outros aplicativos do Android. As principais funções incluem:

Um espaço dedicado para dar o seu app de uma identidade e indicando a localização

do usuário no aplicativo.

O acesso a importantes ações de uma forma previsível (como Search).

Suporte para a navegação e visualização de comutação (com abas ou listas drop-

down).

Esta classe de treinamento oferece um guia rápido para o básico da barra de ação. Para

obter mais informações sobre os vários recursos de barra de ação, consulte a Ação

Bar guia.

Lições

Configurando o Bar Ação

Saiba como adicionar uma barra de ação básica para sua atividade, se o seu

aplicativo suporta apenas Android 3.0 e superior ou também suporta versões tão

baixas como Android 2.1 (usando a biblioteca de suporte Android).

Adicionando botões de ação

Saiba como adicionar e responder às ações do usuário na barra de ação.

Denominando a Barra de Ação

Aprenda a personalizar a aparência de sua barra de ação.

Sobrepondo o Bar Ação

Aprenda a sobrepor a barra de ação na frente de seu layout, permitindo transições

contínuas ao esconder a barra de ação.

Configurando o Bar Ação ANTERIORPRÓXIMA

ESTA LIÇÃO ENSINA A

1. Suporte Android 3.0 e acima só

2. Suporte Android 2.1 e acima

VOCÊ TAMBÉM DEVE LER

Configurando a biblioteca de suporte

Em sua forma mais básica, a barra de ação exibe o título para a atividade e o ícone do

aplicativo na esquerda. Mesmo nessa forma simples, a barra de ação é útil para todas as

atividades para informar os usuários sobre onde estão e para manter uma identidade

constante para o seu app.

Figura 1. Uma barra de ação com o ícone do app e título da atividade.

Configurando um bar ação básica exige que o seu aplicativo usa um tema atividade que

permite a barra de ação. Como pedir um tal tema depende de qual versão do Android é a

mais baixa suportado pelo seu app. Então, essa lição é dividido em duas seções,

dependendo de qual versão do Android é a sua menor suporte.

Suporte Android 3.0 e acima só

Começando com o Android 3.0 (nível API 11), a barra de ação está incluído em todas as

atividades que utilizam o Theme.Holo tema (ou um de seus descendentes), que é o tema

padrão quando quer o targetSdkVersion ouminSdkVersion atributo é definido

como "11 " ou superior.

Então, para adicionar a barra de ação para suas atividades, basta definir ou atribuir

a 11 ou superior. Por exemplo:

<Manifest ... > <usa-sdk android: minSdkVersion = "11" ... /> ... </ manifest>

Nota: Se você criou um tema personalizado, não se esqueça que ele usa um

dos Theme.Holo temas como seu pai. Para mais detalhes, consulte o Bar Styling Ação .

Agora o Theme.Holo tema é aplicado ao seu app e todas as atividades mostrar a barra de

ação. É isso aí.

Suporte Android 2.1 e acima

Adicionando a barra de ação quando executado em versões mais antigas do que o

Android 3.0 (para baixo para Android 2.1) exige que você incluir a biblioteca de suporte

Android em sua aplicação.

Para começar, leia o Setup Biblioteca de suporte de documentos e configurar o v7

AppCompat biblioteca (uma vez que você tenha baixado o pacote de biblioteca, siga as

instruções para a adição de bibliotecas com recursos).

Uma vez que você tem a biblioteca de suporte integrado com o seu projeto de aplicativo:

1. Atualize a sua atividade, de modo que ela se estende ActionBarActivity . Por

exemplo:

público classe MainActivity estende ActionBarActivity { ... }

2. Em seu arquivo de manifesto, atualizar ou o <application> elemento ou

individuais <Actividade> elementos para usar um dos Theme.AppCompat temas. Por

exemplo:

<Atividade android: theme = "@ estilo / Theme.AppCompat.Light" ... >

Nota: Se você criou um tema personalizado, não se esqueça que ele usa um

dos Theme.AppCompat temas como seu pai. Para mais detalhes, consulte o Bar Styling

Ação .

Agora, a sua actividade inclui a barra de ação quando em execução no Android 2.1 (nível

API 7) ou superior.

Lembre-se de definir adequadamente suporte de nível API do aplicativo no manifesto:

<Manifest ... > <usa-sdk android: minSdkVersion = "7" android: targetSdkVersion = "18" />

... </ manifest>

Adicionando botões de ação ANTERIORPRÓXIMA

ESTA LIÇÃO ENSINA A

1. Especifique as ações em XML

2. Adicione as ações para a Barra de Ação

3. Responda aos botões de ação

4. Adicionar Up Botão para atividades de baixo nível

VOCÊ TAMBÉM DEVE LER

Fornecendo Up Navigation

A barra de ação permite que você adicione botões para os itens de ação mais importantes

relacionadas com o contexto atual do app. Aqueles que aparecem diretamente na barra de

ação com um ícone e / ou texto são conhecidos como botões de ação .Ações que não

cabem na barra de ação ou não são suficientemente importantes estão escondidos no

estouro ação.

Figura 1. Uma barra de ação com um botão de ação para a busca e o transbordamento de

ação, o que revela ações adicionais.

Especifique as ações em XML

Todos os botões de ação e outros itens disponíveis no estouro de ação são definidos em

um XML recurso de menu . Para adicionar ações a barra de ação, criar um novo arquivo

XML em seu projeto de res / menu /diretório.

Adicionar um <item> elemento para cada item que deseja incluir na barra de ação. Por

exemplo:

res / menu / main_activity_actions.xml

<Menu xmlns: android = "http://schemas.android.com/apk/res/android" > <! - Search, deve aparecer como botão de ação

Configurações, deve estar sempre no estouro

Ícones da barra de ação download

Para melhor corresponder às Androidiconografia orientações, você deve usar símbolos

fornecidos na Barra de ação Icon Pack .

Esta declara que a ação de busca deve aparecer como um botão de ação quando a sala

está disponível na barra de ação, mas a ação Configurações deve sempre aparecer no

estouro. (Por padrão, todas as ações aparecem no estouro, mas é uma boa prática para

declarar explicitamente suas intenções de design para cada ação.)

O ícone atributo requer um ID de recurso para uma imagem. O nome que segue @

drawable / deve ser o nome de uma imagem bitmap que você salvou no seu projeto

de res / drawable / diretório. Por exemplo, "@ estirável /

ic_action_search" refere-se a ic_action_search.png . Da mesma forma,

o título atributo usa um recurso de cadeia que é definido por um arquivo XML em seu

projeto deres / valores / diretório, como discutido em Construindo uma interface de

usuário simples .

Nota: Ao criar ícones e outras imagens bitmap para o seu app, é importante que você

forneça várias versões que são otimizados para cada uma densidade de tela

diferente. Isso é discutido mais na lição sobre Apoiar diferentes telas .

Se seu aplicativo está usando a biblioteca de suporte para compatibilidade em versões

tão baixas como Android 2.1, o showAsAction atributo não está disponível

no Android: namespace. Em vez disso, esse atributo é fornecido pela Biblioteca de

suporte e você deve definir o seu próprio namespace XML e usar esse espaço de nomes

como o prefixo de atributo. (A namespace XML personalizado deve ser baseada em seu

nome do aplicativo, mas pode ser qualquer nome que você quer e só é acessível no

âmbito do arquivo no qual você declará-lo.) Por exemplo:

res / menu / main_activity_actions.xml

<menu xmlns:android = "http://schemas.android.com/apk/res/android" xmlns:yourapp = "http://schemas.android.com/apk/res-auto" > <!-- Search, deve aparecer como botão de ação --> <item android:id = "@+id/action_search" android:icon = "@drawable/ic_action_search" android:title = "@string/action_search" yourapp:showAsAction = "ifRoom" /> ... </menu>

Adicione as ações para a Barra de Ação

Para colocar os itens de menu na barra de ação, implementar o onCreateOptionsMenu

() método de retorno em sua atividade para inflar o recurso de menu no

dado menu objeto. Por exemplo:

Override público boolean onCreateOptionsMenu ( menu do menu ) { // Encha os itens de menu para uso na ação bar MenuInflater inflater = getMenuInflater (); inflater . inflate ( R . menu . main_activity_actions , menu ); return super . onCreateOptionsMenu ( menu ); }

Responda aos botões de ação

Quando o usuário pressiona um dos botões de ação ou outro item no estouro de ação, o

sistema chama de sua atividade onOptionsItemSelected () método de retorno. Em

sua implementação deste método, chamargetItemId () sobre o dado MenuItem para

determinar qual item foi pressionado-o ID devolvido corresponde ao valor que você

declarou na correspondente <item> do elemento android: id atributo.

Override público boolean onOptionsItemSelected ( MenuItem produto ) { // prensas alça na barra de ação items switch ( item . getItemId ()) { case R . id . action_search : openSearch (); return true ; case R . id . action_settings : openSettings (); return true ; default : return super . onOptionsItemSelected ( item ); } }

Adicionar Up Botão para atividades de baixo nível

Figura 4. O Up botão no Gmail.

Todas as telas em seu aplicativo que não são a entrada principal para o seu aplicativo

(atividades que não são a tela "home") deve oferecer ao usuário uma maneira de navegar

para a tela pai lógico na hierarquia do aplicativo pressionando o Up botão na ação bar.

Quando rodando em Android 4.1 (nível API 16) ou superior, ou quando

usar ActionBarActivity da Biblioteca de suporte, realizando Upnavegação

simplesmente requer que você declarar a atividade pai no arquivo de manifesto e permitir

que o Up botão para a barra de ação.

Por exemplo, aqui está como você pode declarar o pai de uma atividade no manifesto:

<Application ... > ... <! - A principal atividade / home (não tem atividade pai) -> <atividade android: name = "com.example.myfirstapp.MainActivity" ... > ... </ activity> <! - Uma criança da atividade principal Atividade do meta-dados pai para apoiar 4.0 e inferior

Em seguida, habilite o ícone do aplicativo como o Up botão

chamando setDisplayHomeAsUpEnabled () :

@Override public void onCreate ( Bundle savedInstanceState ) { super . onCreate ( savedInstanceState ); setContentView ( R . layout . activity_displaymessage ); getSupportActionBar (). setDisplayHomeAsUpEnabled ( true ); // Se o seu minSdkVersion é de 11 ou superior, utilizar: //. getActionBar () setDisplayHomeAsUpEnabled (true); }

Porque o sistema agora sabe MainActivity é a atividade principal

para DisplayMessageActivity , quando o usuário pressiona o Up botão, o sistema

navega para a atividade pai conforme o caso, você não precisa lidar com o Up evento do

botão.

Para mais informações sobre a navegação, consulte fornecendo até Navigation .

Denominando a Barra de Ação

ANTERIORPRÓXIMA

ESTA LIÇÃO ENSINA A

1. Use um tema Android

2. Personalize o fundo

3. Personalize a cor do texto

4. Personalize o Indicador Tab

VOCÊ TAMBÉM DEVE LER

Estilos e temas

Android Ação Generator Estilo Bar

A barra de ação fornece a seus usuários uma maneira familiar e previsível para executar

ações e navegar no seu app, mas isso não significa que ele precisa ser exatamente igual

como faz em outros aplicativos. Se você quer denominar a barra de ação para melhor

atender a sua marca do produto, você pode facilmente fazê-lo utilizando do Android estilo

e tema recursos.

Android inclui alguns temas de atividades integradas que incluem estilos "escuros" ou

"light" da barra de ação. Você também pode estender estes temas para personalizar ainda

mais o olhar para a sua barra de ação.

Nota: Se você estiver usando a biblioteca de suporte APIs para a barra de ação, então

você deve usar (ou substituir) oTheme.AppCompat família de estilos (em vez

do Theme.Holofamília, disponível no nível de API 11 e superior). Ao fazê-lo, cada

propriedade de estilo que você declarar deve ser declarado duas vezes: uma usando

propriedades de estilo da plataforma (o android: propriedades) e uma vez usando as

propriedades de estilo incluído na Biblioteca Support (o appcompat.R.attr propriedades

de contexto para essas propriedades é realmente seu app ). Veja os exemplos abaixo para

mais detalhes.

Use um tema Android

Android inclui dois temas atividade básica que ditam a cor da barra de ação:

Theme.Holo para um tema "dark".

Theme.Holo.Light para um tema "light".

Você pode aplicar esses temas com toda a sua app ou para atividades individuais,

declarando-los em seu arquivo de manifesto com o android: tema atributo para

o <application> elemento ou indivíduo<activity> elementos.

Por exemplo:

<Aplicação android: theme = "android: estilo / Theme.Holo.Light" ... />

Você também pode usar a barra de ação escuro, enquanto o resto da atividade usa o

esquema de cor clara, declarando a Theme.Holo.Light.DarkActionBartema.

Ao usar a biblioteca de suporte, você deverá usar osTheme.AppCompat temas:

Theme.AppCompat para o tema "dark".

Theme.AppCompat.Light para o tema "light".

Theme.AppCompat.Light.DarkActionBar para o tema luz com uma barra de ação

escuro.

Certifique-se que você use ícones da barra de ação que contrastam adequadamente com

a cor de sua barra de ação. Para ajudá-lo, a Barra de ação Icon Pack inclui ícones de ação

padrão para uso tanto com a luz Holo Holo e bar ação escuro.

Personalize o fundo

Para alterar a barra de fundo ação, criar um tema personalizado para a sua atividade que

substitui oactionBarStyle propriedade. Esta propriedade aponta para um outro estilo em

que você pode substituir ofundo propriedade para especificar um recurso drawable para o

fundo barra de ação.

Se o seu aplicativo usa guias de navegação ou a barra de ação de divisão , então você

também pode especificar o fundo para estas barras usando

os backgroundStacked e backgroundSplit propriedades, respectivamente.

Atenção: É importante que você declarar um tema pai adequado a partir do qual o tema

personalizado e estilo herdar seus estilos. Sem um estilo pai, sua barra de ação será sem

muitas propriedades de estilo, a menos que declará-los explicitamente si mesmo.

Para Android 3.0 e superior apenas

Ao apoiar Android 3.0 e superior apenas, você pode definir o fundo da barra de ações

como esta:

RES / valores / themes.xml

<? xml version = "1.0" encoding = "UTF-8" ?> <resources> <! - o tema aplicado ao aplicativo ou atividade -> <style nome = "CustomActionBarTheme" pai = "android: estilo / Theme.Holo.Light.DarkActionBar " > < item name = "android: actionBarStyle" > @ estilo / MyActionBar </ produto > </ style> <! - ActionBar estilos -> <style nome = "" MyActionBar pai = " android: estilo / Widget.Holo.Light.ActionBar.Solid.Inverse " > < item name = "android: background" > @ drawable / actionbar_background </ produto > </ style> </ resources>

Em seguida, aplique o seu tema para todo o seu app ou atividades individuais:

<Aplicação android: theme = "@ estilo / CustomActionBarTheme" ... />

Para Android 2.1 e superior

Ao usar a biblioteca de suporte, o mesmo tema, como acima devem vez parecido com

este:

RES / valores / themes.xml

<? xml version = "1.0" encoding = "UTF-8" ?> <resources> <! - o tema aplicado ao aplicativo ou atividade -> <style nome = "CustomActionBarTheme" pai = "@ estilo / temáticos. AppCompat .Light.DarkActionBar " > < item name = "android: actionBarStyle" > @ estilo / MyActionBar </ produto > <! - compatibilidade biblioteca Apoio -> < item de nome = "actionBarStyle" > @ estilo / MyActionBar </ item de > </ style>

<! - ActionBar estilos -> <style nome = "MyActionBar" pai = ". @ estilo / Widget AppCompat .Light.ActionBar.Solid.Inverse " > < item name = "android: background" > @ drawable / actionbar_background </ produto > <! - compatibilidade biblioteca Apoio -> < item de nome = "background" > @ drawable / actionbar_background </ produto > </ style> </ resources>

Em seguida, aplique o seu tema para todo o seu app ou atividades individuais:

<Aplicação android: theme = "@ estilo / CustomActionBarTheme" ... />

Personalize a cor do texto

Para modificar a cor do texto na barra de ação, você precisa substituir as propriedades

separadas para cada elemento do texto:

Título de ação bar: Criar um estilo personalizado que especifica

o textColor propriedade e especificar que estilo para o titleTextStyle propriedade

em seu costume actionBarStyle .

Nota: O estilo personalizado aplicado a titleTextStyle deve

usarTextAppearance.Holo.Widget.ActionBar.Title como o estilo pai.

Separadores de bar Ação: Substituir actionBarTabTextStyle em seu tema de

atividade.

Os botões de ação: Substituir actionMenuTextColor em seu tema de atividade.

Para Android 3.0 e superior apenas

Ao apoiar Android 3.0 e superior apenas, o seu arquivo XML estilo pode ter esta

aparência:

RES / valores / themes.xml

<? xml version = "1.0" encoding = "UTF-8" ?> <resources> <! - o tema aplicado ao aplicativo ou atividade -> <style nome = "CustomActionBarTheme" pai = "@ estilo / temáticos. Holo " > < item name = "android: actionBarStyle" > @ estilo / MyActionBar </ produto > < item name = "android: actionBarTabTextStyle" > @ estilo / MyActionBarTabText </ produto > < item name = "android: actionMenuTextColor" > @ cor /

actionbar_text </ produto > </ style> <! - ActionBar estilos -> <style nome = "MyActionBar" pai = "@ estilo / Widget.Holo.ActionBar" > < item name = "android: titleTextStyle" > @ estilo / MyActionBarTitleText </ produto > </ style> <! - ActionBar texto do título -> <style nome = "MyActionBarTitleText" pai = "/ TextAppearance.Holo.Widget.ActionBar.Title @ estilo" > < item name = "android: textColor" > @ cor / actionbar_text </ produto > </ style> <! - estilos de texto guias ActionBar -> <style nome = "MyActionBarTabText" pai = "@ estilo / Widget.Holo.ActionBar.TabText" > < item name = "android: textColor" > @ cor / actionbar_text </ produto > </ style> </ resources>

Para Android 2.1 e superior

Ao usar a biblioteca de suporte, o seu arquivo XML estilo pode ter esta aparência:

RES / valores / themes.xml

<? xml version = "1.0" encoding = "UTF-8" ?> <resources> <! - o tema aplicado ao aplicativo ou atividade -> <style nome = "CustomActionBarTheme" pai = "@ estilo / temáticos. AppCompat " > < item name = "android: actionBarStyle" > @ estilo / MyActionBar </ produto > < item name = "android: actionBarTabTextStyle" > @ estilo / MyActionBarTabText </ produto > < item name = "android: actionMenuTextColor" > @ cor / actionbar_text </ produto > <! - compatibilidade biblioteca Apoio -> < item name = "actionBarStyle" > @ estilo / MyActionBar </ produto > < item name = "actionBarTabTextStyle" > @ estilo / MyActionBarTabText </ produto > < nome do item = "actionMenuTextColor" > @ cor / actionbar_text </ produto > </ style> <! - ActionBar estilos -> <style nome = "MyActionBar" pai = ". @ estilo / Widget AppCompat .ActionBar " > < item de nome = "android: titleTextStyle" > @ estilo / MyActionBarTitleText </ produto >

<! - compatibilidade biblioteca Apoio -> < item name = "titleTextStyle" > @ estilo / MyActionBarTitleText </ produto > </ style> <! - texto do título ActionBar nome = "android: textColor" > @ cor / actionbar_text </ produto > <! - A propriedade textColor é compatível com a biblioteca de suporte -> </ style> <! - texto guias ActionBar -> <style nome = "MyActionBarTabText" pai = ". @ estilo / Widget AppCompat .ActionBar.TabText " > < item name = "android: textColor" > @ cor / actionbar_text </ produto > <! - A propriedade textColor é compatível com o Suporte Biblioteca -> </ style> </ recursos>

Personalize o Indicador Tab

Para alterar o indicador utilizado para as guias de navegação , criar um tema atividade que

substitui oactionBarTabStyle propriedade. Esta propriedade aponta para outro recurso

de estilo em que você substituir o fundo propriedade que deve especificar uma lista de

estado drawable.

Nota: A drawable-list estado é importante para que a guia selecionada no momento indica

seu estado com um fundo diferente do que as outras abas. Para obter mais informações

sobre como criar um recurso drawable que lida com vários estados de botão, leia a lista do

estado documentação.

Por exemplo, aqui está um drawable-list estado que declara uma imagem específica de

fundo para vários estados diferentes de um guia barra de ação:

res / drawable / actionbar_tab_indicator.xml

<? xml ESTADOS QUANDO botão não for pressionado -> <! - Estados não focalizados

Membros centradas (como quando focada com um d-pad ou o mouse) ESTADOS quando o botão é pressionado -> <! - Estados não focalizados Membros centradas (como quando focada com um d-pad ou o mouse)

Para Android 3.0 e superior apenas

Ao apoiar Android 3.0 e superior apenas, o seu arquivo XML estilo pode ter esta

aparência:

RES / valores / themes.xml

<? xml version = "1.0" encoding = "UTF-8" ?> <resources> <! - o tema aplicado ao aplicativo ou atividade -> <style nome = "CustomActionBarTheme" pai = "@ estilo / temáticos. Holo " > < item name = "android: actionBarTabStyle" > @ estilo / MyActionBarTabs </ produto > </ style> <! - guias ActionBar estilos -> <style nome = "MyActionBarTabs" pai = "@ estilo / Widget. Holo.ActionBar.TabView " > <! - indicador guia -> < item name = "android: background" > @ drawable / actionbar_tab_indicator </ produto >

</ style> </ resources>

Para Android 2.1 e superior

Ao usar a biblioteca de suporte, o seu arquivo XML estilo pode ter esta aparência:

RES / valores / themes.xml

<? xml version = "1.0" encoding = "UTF-8" ?> <resources> <! - o tema aplicado ao aplicativo ou atividade -> <style nome = "CustomActionBarTheme" pai = "@ estilo / temáticos. AppCompat " > < item name = "android: actionBarTabStyle" > @ estilo / MyActionBarTabs </ produto > <! - compatibilidade biblioteca Apoio -> < item name = "actionBarTabStyle" > @ estilo / MyActionBarTabs </ produto > </ style > <! - guias ActionBar estilos -> <style nome = "MyActionBarTabs" pai = ". / Widget @ estilo AppCompat .ActionBar.TabView " > <! - indicador guia -> < item name = "android: Fundo " > @ drawable / actionbar_tab_indicator </ produto > <! - compatibilidade biblioteca Apoio -> < item de nome = "background" > @ drawable / actionbar_tab_indicator </ produto > </ style> </ resources>

Mais recursos

Veja mais imóveis de estilo para a barra de ação estão listados na Ação Bar guia.

Saiba mais sobre como os temas funcionam na estilos e temas guia.

Para styling ainda mais completo para a barra de ação, tente a ação Generator Bar

Estilo Android .

Sobrepondo o Bar Ação ANTERIORPRÓXIMA

ESTA LIÇÃO ENSINA A

1. Ativar o modo de sobreposição

1. Para Android 3.0 e superior apenas

2. Para Android 2.1 e superior

2. Especifique layout Top-margin

VOCÊ TAMBÉM DEVE LER

Estilos e temas

Por padrão, a barra de ação aparece na parte superior da janela do seu atividade,

ligeiramente reduzindo a quantidade de espaço disponível para o resto do layout do seu

atividade. Se, durante o curso de interação com o usuário, que deseja ocultar e mostrar a

barra de ação, você pode fazê-lo chamando hide ()e show () no ActionBar . No

entanto, isso faz com que sua atividade para recalcular e redesenhar o layout baseado em

seu novo tamanho.

Figura 1. barra de ação da galeria no modo de sobreposição.

Para evitar o redimensionamento seu layout quando a barra de ação esconde e mostra,

você pode ativar o modo de sobreposição para a barra de ação. Quando em modo de

sobreposição, o seu layout atividade usa todo o espaço disponível, como se a barra de

ação não está lá e o sistema chama a barra de ação na frente de seu layout. Isso

obscurece algum do layout, na parte superior, mas agora, quando a barra de ação oculta

ou é apresentado, o sistema não precisa redimensionar o seu layout e a transição é

perfeita.

Dica: Se você quiser que o seu layout a ser parcialmente visível por trás da barra de ação,

criar um estilo personalizado para a barra de ação com um fundo parcialmente

transparente, como o mostrado na figura 1. Para obter informações sobre como definir o

plano de fundo barra de ação, leia Styling na barra de ação .

Ativar o modo de sobreposição

Para ativar o modo de sobreposição para a barra de ação, você precisa criar um tema

personalizado que estende um tema barra de ação existente e definir o android:

windowActionBarOverlay propriedade de verdade .

Para Android 3.0 e superior apenas

Se o seu minSdkVersion está definido para 11 ou superior, o tema personalizado deve

usar Theme.Holo tema (ou um de seus descendentes) como seu tema principal. Por

exemplo:

<Resources> <! - o tema aplicado ao aplicativo ou atividade -> <style nome = "CustomActionBarTheme" pai = "android: estilo / Theme.Holo" > < item de nome = "android: windowActionBarOverlay" > verdadeiro < / produto > </ style> </ recursos>

Para Android 2.1 e superior

Se seu aplicativo está usando a biblioteca de suporte para compatibilidade com versões

em dispositivos menores que executam o Android 3.0, o tema personalizado deve

usar Theme.AppCompat tema (ou um de seus descendentes) como seu tema

principal. Por exemplo:

<Resources> <! - o tema aplicado ao aplicativo ou atividade -> <style nome = "CustomActionBarTheme" pai = "android:. estilo / Tema AppCompat " > < item name = "android: windowActionBarOverlay" > verdadeiro < / produto > <! - compatibilidade biblioteca Apoio -> < item name = "windowActionBarOverlay" > verdadeiro </ produto > </ style> </ resources>

Note também que este tema inclui duas definições para

o windowActionBarOverlay estilo: um com o android:prefixo e um sem. Aquele com

o android: prefixo é para versões do Android, que incluem o estilo na plataforma e um

sem o prefixo é para versões mais antigas que lêem o estilo da Biblioteca Suporte.

Especifique layout Top-margin

Quando a barra de ação está em modo de sobreposição, pode obscurecer um pouco do

seu layout que deve permanecer visível. Para garantir que tais itens permanecer abaixo da

barra de ação em todos os momentos, adicionar ou margin ou padding para o topo da view

(s) usando a altura especificada por actionBarSize . Por exemplo:

<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"

android:layout_width = "match_parent" android:layout_height = "match_parent" android:paddingTop = "?android:attr/actionBarSize" > ... </RelativeLayout>

Se você estiver usando a biblioteca de suporte para a barra de ação, você precisa remover

o android: prefixo.Por exemplo:

<! - Compatibilidade biblioteca Suporte --> <RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android" android:layout_width = "match_parent" android:layout_height = "match_parent" android:paddingTop = "?attr/actionBarSize" > ... </RelativeLayout>

Neste caso, o attr / actionBarSize? valor sem o prefixo funciona em todas as

versões, incluindo Android 3.0 e superior.

Apoiando Diferentes Devices COMEÇAR

DEPENDÊNCIAS E PRÉ-REQUISITOS

Android 1.6 ou superior

VOCÊ TAMBÉM DEVE LER

Recursos de Aplicativo

Projetando para Múltiplas Telas

Dispositivos Android vêm em muitas formas e tamanhos em todo o mundo. Com uma

vasta gama de tipos de dispositivos, você tem a oportunidade de atingir um público

enorme, com seu app. A fim de ser tão bem sucedido quanto possível no Android, o

aplicativo precisa se adaptar a várias configurações de dispositivo. Algumas das variações

importantes que você deve considerar incluem línguas diferentes tamanhos de tela e

versões da plataforma Android.

Esta classe ensina como usar a plataforma básica características que recursos

alavancagem alternativos e outros recursos para que o seu app pode fornecer uma

experiência de usuário otimizada em uma variedade de dispositivos compatíveis com o

Android, usando um único pacote de aplicativos (APK).

Lições

Apoiando diferentes idiomas

Aprenda a suportar vários idiomas com recursos de cadeia alternativas.

Apoiando diferentes telas

Saiba como otimizar a experiência do usuário para diferentes tamanhos de tela e

densidades.

Apoiando Diferentes versões da plataforma

Saiba como usar APIs disponíveis em novas versões do Android enquanto

continua a apoiar as versões mais antigas do Android.

Apoiando diferentes idiomas ANTERIORPRÓXIMA

ESTA CLASSE ENSINA VOCÊ A

1. Criar Local diretórios e arquivos de Cordas

2. Use os recursos de seqüência

VOCÊ TAMBÉM DEVE LER

Checklist Localization

Localização com Recursos

É sempre uma boa prática para extrair cordas UI do seu código app e mantê-los em um

arquivo externo. Android torna isso fácil com um diretório de recursos em cada projeto

Android.

Se você criou seu projeto usando as ferramentas do SDK do Android (leia Criando um

projeto Android ), as ferramentas de criação de um res / diretório no nível superior do

projeto.Dentro deste RES / diretório são subdiretórios para vários tipos de recursos. Há

também alguns arquivos padrão, como res / valores / strings.xml , que detém os

seus valores de cadeia.

Criar Local diretórios e arquivos de Cordas

Para adicionar suporte para mais idiomas, criar adicionaisvalores diretórios dentro RES

/ que incluem um hífen e o código de linguagem ISO no final do nome do diretório. Por

exemplo, os valores-es / é o diretório que contém resourcess simples para as

localidades com o código de linguagem "es". Android carrega os recursos apropriados de

acordo com as definições de região do dispositivo em tempo de execução. Para obter mais

informações, consulte Fornecendo recursos alternativos .

Uma vez que você tenha decidido sobre os idiomas que você irá apoiar, criar os

subdiretórios de recursos e arquivos de recursos string. Por exemplo:

Meu projeto /

res /

valores /

strings.xml

valores-es /

strings.xml

valores-fr /

strings.xml

Adicione os valores de cadeia para cada localidade para o arquivo adequado.

Em tempo de execução, o sistema Android utiliza o conjunto apropriado de recursos de

cadeia com base na localidade actualmente definido para o dispositivo do usuário.

Por exemplo, a seguir estão alguns arquivos de recursos seqüência diferentes para

diferentes idiomas.

Inglês (locale padrão), /values/strings.xml :

<? xml version = "1.0" encoding = "utf-8" ?> <resources> <string nome = "title" > My Application </ string> <string nome = "hello_world" > Olá mundo! </ string> < / recursos>

Espanhol, /values-es/strings.xml :

<? xml version = "1.0" encoding = "utf-8" ?> <resources> <string nome = "title" > Mi Aplicación </ string> <string nome = "hello_world" > Hola Mundo! </ string> < / recursos>

Francês, /values-fr/strings.xml :

<? xml version = "1.0" encoding = "utf-8" ?> <resources> <string nome = "title" > Aplicação Mon </ string> <string nome = "hello_world" > Bonjour le monde! </ string> </ recursos>

Nota: Você pode usar o qualifier localidade (ou qualquer qualificador de configuração) em

qualquer tipo de recurso, como se você quer fornecer versões localizadas do seu drawable

bitmap. Para obter mais informações, consulte Localização .

Use os recursos de seqüência

Você pode fazer referência a seus recursos de cadeia em seu código-fonte e outros

arquivos XML usando o nome do recurso definido pelo <string> do

elemento nome atributo.

Em seu código-fonte, você pode se referir a um recurso de cadeia com a

sintaxe R.string. <string_name> . Há uma variedade de métodos que aceitam um

recurso de cadeia desta forma.

Por exemplo:

// Obter um recurso de cadeia a partir do seu aplicativo de Recursos Cadeia Olá = getResources () . getString ( R . corda . hello_world ); // Ou fornecer um recurso de cadeia para um método que requer uma seqüência de TextView textView = nova TextView ( este ); textView . setText ( R . corda . hello_world );

Em outros arquivos XML, você pode se referir a um recurso de cadeia com a

sintaxe cadeia @ / <string_name>sempre que o atributo XML aceita um valor de

cadeia.

Por exemplo:

<TextView android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "@string/hello_world" />

Apoiando diferentes telas ANTERIORPRÓXIMA

ESTA LIÇÃO ENSINA A

1. Criar diferentes layouts

2. Criar bitmaps diferentes

VOCÊ TAMBÉM DEVE LER

Projetando para Múltiplas Telas

Fornecendo recursos

Guia de design de Iconografia

Android categoriza telas de dispositivos usando duas propriedades gerais: tamanho e

densidade. Você deve esperar que seu aplicativo será instalado em dispositivos com telas

que variam em tamanho e densidade. Como tal, você deve incluir alguns recursos

alternativos que otimizem a aparência do seu app para diferentes tamanhos de tela e

densidades.

Há quatro tamanhos generalizadas: pequeno, normal, grande, extra grande

E quatro densidades generalizadas: baixo (LDPI), médio (MDPI), alta (HDPI), extra alta

(xhdpi)

Para declarar diferentes layouts e bitmaps que você gostaria de usar para diferentes telas,

você deve colocar esses recursos alternativos em diretórios separados, semelhante à

forma como você faz para diferentes cadeias de idioma.

Também estar ciente de que a orientação telas (paisagem ou retrato) é considerado uma

variação do tamanho da tela, de modo que muitos aplicativos devem rever o layout para

otimizar a experiência do usuário em cada orientação.

Criar diferentes layouts

Para otimizar a experiência do usuário em diferentes tamanhos de tela, você deve criar um

arquivo XML layout exclusivo para cada tamanho de tela que deseja apoiar. Cada layout

deve ser salvo no diretório de recursos adequados, nomeado com um -

<screen_size> sufixo. Por exemplo, um layout exclusivo para as grandes telas devem

ser guardados sob res / layout-large / .

Nota: Android dimensiona automaticamente o seu layout a fim de encaixar corretamente

na tela. Assim, os seus layouts para diferentes tamanhos de tela não precisa se preocupar

com o tamanho absoluto de elementos de interface do usuário, mas sim concentrar-se na

estrutura de layout que afeta a experiência do usuário (como o tamanho ou a posição de

pontos de vista importantes em relação ao irmão visitas).

Por exemplo, este projecto inclui um layout padrão e uma disposição alternativa

para grandes telas:

Meu projeto /

res /

layout /

main.xml

layout grande /

main.xml

Os nomes dos arquivos devem ser exatamente o mesmo, mas o seu conteúdo é diferente,

a fim de fornecer uma interface otimizada para o tamanho da tela correspondente.

Basta referenciar o arquivo de layout em seu aplicativo, como de costume:

@Override protected void onCreate ( Bundle savedInstanceState ) { super . onCreate ( savedInstanceState ); setContentView ( R . layout . main ); }

O sistema carrega o arquivo de layout do diretório de layout adequado com base no

tamanho da tela do dispositivo no qual o aplicativo está sendo executado. Mais

informações sobre como Android seleciona o recurso apropriado está disponível

no Recursos Fornecer guia.

Como outro exemplo, aqui está um projecto com uma disposição alternativa para

orientação paisagem:

Meu projeto /

res /

layout /

main.xml

disposição do solo /

main.xml

Por padrão, o / main.xml layout de arquivo é usado para orientação retrato.

Se você quiser fornecer um layout especial para a paisagem, incluindo, enquanto em telas

grandes, então você precisa usar tanto o grande e terra qualifier:

Meu projeto /

res /

layout / # default (portrait)

main.xml

disposição do solo / paisagem #

main.xml

layout grande / # grande (portrait)

main.xml

leiaute-large-terra / # grande paisagem

main.xml

Nota: Android 3.2 e acima suporta um método avançado de definir os tamanhos de tela

que permite que você especifique os recursos para os tamanhos de tela com base na

largura e altura mínimas em termos de pixels independente de densidade. Esta lição não

cobre esta nova técnica. Para mais informações, leia Projetando para Múltiplas Telas .

Criar bitmaps diferentes

Você deve sempre fornecer recursos de bitmap que estão devidamente dimensionadas

para cada um dos baldes densidade generalizadas: baixa, média, alta e extra-alta

densidade. Isso ajuda você a alcançar uma boa qualidade e desempenho gráfico em todas

as densidades de tela.

Para gerar estas imagens, você deve começar com o seu recurso cru em formato vetorial

e gerar as imagens para cada densidade utilizando a seguinte escala de tamanho:

xhdpi: 2,0

HDPI: 1,5

MDPI: 1,0 (linha de base)

LDPI: 0,75

Isso significa que se você gerar uma imagem de 200x200 para dispositivos xhdpi, você

deve gerar o mesmo recurso em 150x150 para HDPI, 100x100 para MDPI e 75x75 para

dispositivos LDPI.

Em seguida, coloque os arquivos no diretório drawable recurso apropriado:

Meu projeto /

res /

drawable-xhdpi /

awesomeimage.png

drawable-HDPI /

awesomeimage.png

drawable-MDPI /

awesomeimage.png

drawable-LDPI /

awesomeimage.png

Toda vez que você faz referência @ drawable / awesomeimage , o sistema seleciona o

bitmap apropriado com base na densidade da tela.

Nota: de baixa densidade (LDPI recursos) nem sempre são necessárias. Quando você

fornece ativos hdpi, o sistema os reduz à metade telas LDPI para encaixar corretamente.

Para mais dicas e orientações sobre como criar ativos ícone para sua aplicação, consulte

o Guia de design de Iconografia .

Apoiando Diferentes versões da plataforma

ANTERIORPRÓXIMA

ESTA LIÇÃO ENSINA A

1. Especifique mínimos e níveis alvo de API

2. Verifique versão do sistema em tempo de execução

3. Use estilos e temas de Plataforma

VOCÊ TAMBÉM DEVE LER

Níveis API Android

Biblioteca de suporte Android

Enquanto as versões mais recentes do Android costumam oferecer grandes APIs para o

seu aplicativo, você deve continuar a apoiar as versões mais antigas do Android até mais

dispositivos são atualizados. Esta lição mostra como tirar proveito dos mais recentes APIs

enquanto continua a apoiar as versões mais antigas também.

O painel de instrumentos para versões de plataforma é atualizado regularmente para

mostrar a distribuição de dispositivos ativos em execução cada versão do Android, com

base no número de dispositivos que visitam o Google Play Store. Geralmente, é uma boa

prática para apoiar cerca de 90% dos dispositivos ativos, ao alvejar seu aplicativo para a

versão mais recente.

Dica: A fim de fornecer os melhores recursos e funcionalidades através de várias versões

do Android, você deve usar a biblioteca de suporte Android em seu aplicativo, que permite

a utilização de várias APIs da plataforma recentes em versões mais antigas.

Especifique mínimos e níveis alvo de API

O AndroidManifest.xml arquivo descreve detalhes sobre seu app e identifica quais versões

do Android que suporta. Especificamente,

o minSdkVersion e targetSdkVersion atributos para o <uses-sdk elemento identificar

o nível mais baixo API com que seu aplicativo é compatível e o nível mais alto contra a API

que você projetou e testou seu app.

Por exemplo:

<manifest xmlns:android = "http://schemas.android.com/apk/res/android" ... >

<uses-sdk android:minSdkVersion = "4" android:targetSdkVersion = "15" /> ... </manifest>

À medida que novas versões do Android são liberados, alguns estilo e comportamentos

podem mudar. Para permitir que o seu app para aproveitar essas mudanças e garantir que

o seu app se encaixa no estilo de dispositivo de cada usuário, você deve definir

o targetSdkVersion valor para coincidir com a versão mais recente Android disponível.

Verifique versão do sistema em tempo de execução

Android fornece um código único para cada versão de plataforma na Construir classe

constantes. Use estes códigos dentro do seu app para construir condições que garantam o

código que depende dos níveis mais altos da API é executado somente quando essas

APIs estão disponíveis no sistema.

privado vazio setUpActionBar () { // Certifique-se de que estamos rodando em Honeycomb ou superior para utilizar ActionBar APIs if ( Build . VERSION . SDK_INT >= Build . VERSION_CODES . HONEYCOMB ) { ActionBar actionBar = getActionBar (); actionBar . setDisplayHomeAsUpEnabled ( true ); } }

Nota: Ao analisar os recursos XML, Android ignora atributos XML que não são suportadas

pelo dispositivo atual. Assim, você pode usar com segurança atributos XML que são

apenas suportados por versões mais novas sem se preocupar com versões mais antigas

que quebram quando se deparam com esse código. Por exemplo, se você definir

o targetSdkVersion = "11" , o aplicativo inclui o ActionBar por padrão no Android

3.0 e superior. Para, em seguida, adicionar itens de menu para a barra de ação, você

precisa definir android: showAsAction = "ifRoom" em seu XML recurso menu. É

seguro fazer isso em um arquivo XML cross-versão, porque as versões mais antigas do

Android simplesmente ignorar o showAsAction atributo (ou seja, você nãoprecisa de uma

versão separada em res / menu v11 / ).

Use estilos e temas de Plataforma

Android fornece temas de experiência do usuário que dão aplicativos a aparência do

sistema operacional subjacente. Estes temas podem ser aplicadas ao seu app dentro do

arquivo de manifesto. Ao utilizar essas construído em estilos e temas, seu aplicativo irá

naturalmente acompanhar as últimas aparência do Android a cada novo lançamento.

Para tornar a sua atividade parece com uma caixa de diálogo:

<Atividade android: theme = "android: estilo / Theme.Dialog" >

Para tornar a sua actividade tem um fundo transparente:

<Atividade android: theme = "android: estilo / Theme.Translucent" >

Para aplicar o seu próprio tema personalizado definido em /res/values/styles.xml :

<Atividade android: theme = "@ estilo / CustomTheme" >

Para aplicar um tema para todo o seu app (todas as atividades), adicione o android:

tema atribuem ao<application> elemento:

<Aplicação android: theme = "@ estilo / CustomTheme" >

Para saber mais sobre a criação e utilização de temas, leia a estilos e temas guia.

Interagindo com outros apps COMEÇAR

DEPENDÊNCIAS E PRÉ-REQUISITOS

Conhecimento básico do ciclo de vida de atividades (consulte Gerenciando o Ciclo

de Vida de Atividade )

VOCÊ TAMBÉM DEVE LER

Compartilhamento de Dados Simples

Compartilhamento de Arquivos

A integração do aplicativo com Intenções (post)

Intenções e filtros Intent

Um app Android normalmente tem várias atividades . Cada atividade apresenta uma

interface de usuário que permite ao usuário executar uma tarefa específica (como

visualizar um mapa ou tirar uma foto). Para levar o usuário a partir de uma atividade para

outra, seu aplicativo deve usar um Intenção para definir a "intenção" de seu aplicativo

para fazer algo. Quando você passar um Intenção para o sistema com um método

como startActivity () , o sistema utiliza a Intenção de identificar e iniciar o

componente app apropriado. Usando intenções ainda permite que o seu aplicativo para

iniciar uma atividade que está contido em um aplicativo separado.

Uma Intenção pode ser explícita , a fim de iniciar um componente específico (a

específica Atividade exemplo) ouimplícita , a fim de iniciar qualquer componente que

pode lidar com a ação pretendida (como "tirar uma foto").

Esta classe mostra como usar um Intenção para executar algumas interações básicas

com outros aplicativos, tais como iniciar outro aplicativo, recebe um resultado de que o

app, e fazer o seu app capaz de responder às intenções de outros apps.

Lições

Enviando o usuário para outra App

Mostra como você pode criar intenções implícitas para lançar outros aplicativos

que podem executar uma ação.

Conseguir um resultado de uma Atividade

Mostra como iniciar outra atividade e receber um resultado da atividade.

Permitindo que outros Apps para começar seu Atividade

Mostra como fazer atividades em sua app aberto para uso por outros aplicativos,

definindo filtros intenção que declaram as intenções implícitas seu app aceita.

Enviando o usuário para outra App ANTERIORPRÓXIMA

ESTA LIÇÃO ENSINA A

1. Construir uma Intenção Implícita

2. Verifique Há um App para Receber o Intent

3. Iniciar uma atividade com a intenção

4. Mostrar um App Chooser

VOCÊ TAMBÉM DEVE LER

Compartilhamento de Dados Simples

Uma das características mais importantes do Android é a capacidade de um app para

enviar o usuário para outro app baseado em uma "ação" que gostaria de realizar. Por

exemplo, se seu aplicativo tem o endereço de um negócio que você gostaria de mostrar

em um mapa, você não tem que construir uma atividade em seu aplicativo que mostra um

mapa. Em vez disso, você pode criar um pedido para ver o endereço usando

um Intent . O sistema Android em seguida, inicia um aplicativo que é capaz de mostrar o

endereço em um mapa.

Como explicado na primeira classe, Construindo seu primeiro App , você deve usar as

intenções para navegar entre as atividades em seu próprio aplicativo. Você geralmente o

fazem com uma intenção explícita , que define o nome da classe exacto da parte que você

deseja iniciar. No entanto, quando você quer ter um app separado executar uma ação,

como "ver um mapa", você deve usar uma intenção implícita .

Esta lição mostra como criar uma intenção implícita para uma determinada ação, e como

usá-lo para começar uma atividade que executa a ação em outro app.

Construir uma Intenção Implícita

Intenções implícitas não declarar o nome da classe do componente para começar, mas em

vez declarar uma ação a ser executada. A ação especifica a coisa que você quer fazer,

tais como visão , editar , enviar , ou obteralguma coisa. Intenções muitas vezes também

incluem dados associados com a ação, tais como o endereço que você deseja visualizar,

ou a mensagem de e-mail que você quer enviar. Dependendo da intenção que você quer

criar, os dados podem ser um Uri , um dos vários outros tipos de dados, ou a intenção

pode não precisar de dados em tudo.

Se os seus dados é um Uri , há uma simples Intent () construtor você pode usar

definir a ação e dados.

Por exemplo, aqui está como criar uma intenção de iniciar uma chamada telefônica

utilizando as Uri dados para especificar o número de telefone:

Uri número = Uri . analisar ( "tel: 5551234" ); Intenção callIntent = nova Intent ( Intenção . ACTION_DIAL , número );

Quando seu aplicativo invoca esta intenção chamando startActivity () , o aplicativo

de telefone inicia uma chamada para o número de telefone indicado.

Aqui estão algumas outras intenções e sua ação e Uri pares de dados:

Ver um mapa:

// Ponto do mapa com base no endereço Uri localização = Uri . analisar ( "geo: 0,0 q = 1,600 + Amphitheatre Parkway +, + montanha + View, California +" ); // Ou mapa ponto baseado em latitude / longitude / / localização Uri = URI.parse ("geo: 37,422219, -122,08364 z = 14"); // Z param é o nível de zoom Intenção mapIntent = nova Intent ( Intenção . ACTION_VIEW , localização );

Ver uma página web:

Uri webpage = Uri . parse ( "http://www.android.com" ); Intent webIntent = new Intent ( Intent . ACTION_VIEW , webpage );

Outros tipos de intenções implícitas exigem dados "extra" que oferecem diferentes tipos de

dados, como uma string. Você pode adicionar um ou mais peças de dados extras,

utilizando as várias putExtra () métodos.

Por padrão, o sistema determina o tipo MIME adequado exigido por uma intenção com

base nos Uri dados que estão incluídos. Se você não incluir um Uri na intenção, você

deverá usar setType () para especificar o tipo de dados associados com a

intenção. Definir o tipo de MIME especifica ainda que os tipos de atividades devem receber

a intenção.

Aqui estão mais algumas intenções que agregam dados extras para especificar a ação

desejada:

Enviar um e-mail com um anexo:

Intenção emailIntent = nova Intent ( Intenção . ACTION_SEND ); // A intenção não tem um URI, então declarar a "text / plain" MIME destinatários emailIntent . putExtra ( Intent . EXTRA_SUBJECT , "Email assunto" ); emailIntent . putExtra ( Intent . EXTRA_TEXT , "mensagem de e-mail de texto" ); emailIntent . putExtra ( Intent . EXTRA_STREAM , Uri . analisar ( "content: // path / to / e-mail / attachment " )); // Você também pode anexar vários itens por meio de um ArrayList de Uris

Criar um evento de calendário:

Intent calendarIntent = new Intent ( Intent . ACTION_INSERT , Events . CONTENT_URI ); Calendar beginTime = Calendar . getInstance (). set ( 2012 , 0 , 19 , 7 , 30 ); Calendar endTime = Calendar . getInstance (). set ( 2012 , 0 , 19 , 10 , 30 ); calendarIntent . putExtra ( CalendarContract . EXTRA_EVENT_BEGIN_TIME , beginTime . getTimeInMillis ()); calendarIntent . putExtra ( CalendarContract . EXTRA_EVENT_END_TIME , endTime . getTimeInMillis ()); calendarIntent . putExtra ( Events . TITLE , "Ninja classe " ); calendarIntent . putExtra ( Eventos . EVENT_LOCATION , "dojo Segredo" );

Nota: Esta intenção para um evento de calendário é suportado apenas com nível API

14 e superior.

Nota: É importante que você defina sua intenção de ser o mais específico possível. Por

exemplo, se você quiser exibir uma imagem usando a ACTION_VIEW intenção, você deve

especificar um tipo de MIME de imagem / * . Isso evita que aplicativos que podem "ver"

outros tipos de dados (como um app mapa) de ser desencadeada pela intenção.

Verifique Há um App para Receber o Intent

Embora a plataforma Android garante que certas intenções será resolvido para um dos

aplicativos embutidos (como o telefone, email, ou app de calendário), você deve sempre

incluir uma etapa de verificação antes de invocar uma intenção.

Cuidado: Se você chamar uma intenção e não há nenhum app disponível no dispositivo

que pode lidar com a intenção, o seu aplicativo irá falhar.

Para verificar há uma atividade disponível que pode responder à intenção,

chamar queryIntentActivities ()para obter uma lista de atividades capazes de lidar

com a sua Intenção . Se o retornou lista não estiver vazia, você pode usar com

segurança a intenção. Por exemplo:

Packagemanager packagemanager = getPackageManager () ; Listaactivities = packageManager . queryIntentActivities ( intent , PackageManager . MATCH_DEFAULT_ONLY ); boolean isIntentSafe = activities . size () > 0 ;

Se isIntentSafe é verdadeiro , então pelo menos um aplicativo irá responder à

intenção. Se for falsa , então não há quaisquer aplicativos para lidar com a intenção.

Nota: Você deve executar essa verificação quando sua atividade se inicia pela primeira

vez em caso de necessidade de desativar o recurso que usa a intenção antes que o

usuário tenta usá-lo. Se você souber de um aplicativo específico que pode lidar com a

intenção, você também pode fornecer um link para o usuário baixar o aplicativo (veja como

para ligar para o seu produto no Google Play ).

Iniciar uma atividade com a intenção

Figura 1. Exemplo de diálogo de seleção que aparece quando mais de um app pode lidar com

uma intenção.

Depois de ter criado a sua Intenção e definir a informação extra, chamarstartActivity

() para enviá-lo para o sistema. Se o sistema identifica mais de uma atividade que pode

lidar com a intenção, ele exibe uma caixa de diálogo para o usuário selecionar qual app

para usar, como mostra a figura 1. Se houver apenas uma atividade que lida com a

intenção, o sistema começa imediatamente a ele .

startActivity ( intenção );

Aqui está um exemplo completo que mostra como criar uma intenção de ver um mapa,

verifique se existe um aplicativo para lidar com a intenção, então inicie-o:

// Construir o Verifique se ele Iniciar uma atividade se é seguro se ( isIntentSafe ) { startActivity ( mapIntent ); }

Mostrar um App Chooser

Figura 2. A janela de seleção.

Observe que quando você iniciar uma atividade, passando a

sua Intençãopara startActivity () e há mais de um aplicativo que responde à

intenção, o usuário pode selecionar qual app para usar por padrão (selecionando a caixa

de seleção na parte inferior da caixa de diálogo; ver figura 1). Isso é bom quando se

realiza uma ação para que o usuário geralmente quer usar o mesmo aplicativo de cada

vez, como ao abrir uma página web (usuários provavelmente usar apenas um navegador

da Web) ou tirar uma foto (usuários provavelmente preferir uma câmera).

No entanto, se a ação a ser executada poderia ser tratado por vários aplicativos eo usuário

pode preferir um app diferente de cada vez, como uma ação de "share", para o qual os

usuários podem ter várias aplicações, através do qual eles podem compartilhar um item,

você deve mostrar explicitamente uma janela de selecção, como mostrado na figura 2. A

janela de seleção de força o usuário a selecionar qual app para usar para a ação de cada

vez (o usuário não pode selecionar um aplicativo padrão para a ação).

Para mostrar o seletor, criar uma Intent usando createChooser () e passá-lo

para startActivity () . Por exemplo:

Intenção intenção = nova Intent ( Intenção . ACTION_SEND ); ... . // Sempre utilize recursos de cadeia para o texto UI // Isso diz algo como "Compartilhe essa foto com" Cordas título = getResources (). getString ( R . corda . chooser_title ); // Criar a intenção de mostrar seletor de Intenção chooser = Intenção . createChooser ( intenção , título ); // Verifique a intenção será resolvido para pelo menos uma atividade se ( intenção . resolveActivity ( getPackageManager ()) ! = NULL ) { startActivity ( chooser ); }

Isto mostra uma janela com uma lista de aplicativos que respondem à intenção passado

para o createChooser () método e usa o texto fornecido como o título de diálogo.

Conseguir um resultado de uma Atividade

ANTERIORPRÓXIMA

ESTA LIÇÃO ENSINA A

1. Iniciar a Atividade

2. Receber o resultado

VOCÊ TAMBÉM DEVE LER

Compartilhamento de Dados Simples

Compartilhamento de Arquivos

A partir de uma outra atividade não tem de ser só de ida. Você também pode iniciar outra

atividade e receber um resultado de volta. Para receber um resultado,

chamastartActivityForResult () (em vez de startActivity () ).

Por exemplo, o aplicativo pode iniciar um aplicativo de câmera e receber a foto capturada

como resultado. Ou, você pode começar a Pessoas app para que o usuário selecione um

contato e você receberá os dados de contato, como resultado.

Naturalmente, a actividade que responde deve ser concebida para retornar um

resultado. Quando isso acontecer, ele envia o resultado como outro Intenção objeto. Sua

atividade recebe-lo no onActivityResult () callback.

Nota: Você pode usar as intenções explícitas ou implícitas quando você

chamar startActivityForResult () . Ao iniciar uma de suas próprias atividades para

receber um resultado, você deve usar uma intenção explícita de assegurar que você

receba o resultado esperado.

Iniciar a Atividade

Não há nada de especial sobre a Intenção objeto que você usa quando se inicia uma

atividade para um resultado, mas você precisa para passar um argumento inteiro adicional

ao startActivityForResult ()método.

O argumento inteiro é um "código de pedido" que identifica o seu pedido. Quando você

recebe o resultadoIntenção , o callback fornece o mesmo código de pedido para que o

seu app pode identificar corretamente o resultado e determinar como lidar com isso.

Por exemplo, aqui está como começar uma atividade que permite ao usuário escolher um

contato:

static final, int PICK_CONTACT_REQUEST = 1 ; // O pedido Mostrar apenas os contatos do usuário w / números de telefone startActivityForResult ( pickContactIntent , PICK_CONTACT_REQUEST ); }

Receber o resultado

Quando o usuário é feito com a atividade e retorna posterior, o sistema chama de sua

atividadeonActivityResult () método. Este método inclui três argumentos:

O código de pedido é passado para startActivityForResult () .

Um código de resultado especificado pela segunda atividade. Isto é,

quer RESULT_OK se a operação foi bem sucedida ou RESULT_CANCELED se o usuário

desistiu ou a operação falhou por algum motivo.

Uma Intenção que carrega os dados do resultado.

Por exemplo, aqui está como você pode manipular o resultado para a "pegar um contato"

intenção:

Override protegido vazio onActivityResult ( int requestCode , int resultCode , Intenção de dados ) { // Verificar que solicitar estamos respondendo a se ( requestCode == PICK_CONTACT_REQUEST ) { // Verifique se o pedido foi bem-sucedida se ( resultCode == RESULT_OK ) { // O usuário escolheu um contato. // Os dados da Intenção Uri identifica que o contato foi selecionado. // Faça algo com o contato aqui (exemplo maior abaixo) } } }

Neste exemplo, o resultado Intenção retornado por do Android Contatos ou Pessoas app

fornece um conteúdoUri que identifica o contato do usuário selecionado.

A fim de lidar com sucesso o resultado, você deve entender o que o formato do

resultado Intenção será. Fazer isso é fácil quando a atividade retornando um resultado é

uma de suas próprias atividades. Apps incluídos com a plataforma Android oferecem suas

próprias APIs que você pode contar para os dados de resultados específicos. Por

exemplo, o aplicativo de pessoas (Contatos app em algumas versões mais antigas)

sempre retorna um resultado com o conteúdo URI que identifica o contato selecionado, eo

app Camera retorna umBitmap nos "dados" extra (consulte a classe sobre a captura de

fotos ).

Bônus: Leia os dados de contato

O código acima mostra como obter um resultado a partir da aplicação Pessoas não entrar

em detalhes sobre como realmente ler os dados a partir do resultado, porque requer

discussões mais avançadas sobre os provedores de conteúdo . No entanto, se você

estiver curioso, aqui está um código mais que mostra como consultar os dados do

resultado para obter o número de telefone do contato selecionado:

Override protegido vazio onActivityResult ( int requestCode , int resultCode , Intenção de dados ) { // Verificar que solicitá-lo é que estamos respondendo a se ( requestCode == PICK_CONTACT_REQUEST ) { // Verifique se o pedido foi bem-sucedida se ( resultCode == RESULT_OK ) { // Pega o URI que aponta para o contato selecionado Uri contactUri = dados . getData (); // Precisamos apenas a coluna de número, porque haverá apenas uma linha no resultado de Cordas [] projeção = { telefone . NÚMERO }; // Realizar a consulta sobre o contato para obter a coluna

NÚMERO // Nós não precisamos de uma seleção ou ordem de classificação (só há um resultado para o dado URI) // CUIDADO: O query () método deve ser chamado de um segmento separado para evitar o bloqueio // segmento interface do usuário do aplicativo. (Por simplicidade da amostra, este código não faz isso.) // Considere o uso de CursorLoader para realizar a Recuperar o número de telefone a partir da coluna NÚMERO int coluna = cursor . getColumnIndex ( Telefone . NÚMERO ); Cordas número = cursor . getString ( coluna ); // Faça algo com o número de telefone ... } } }

Nota: Antes de Android 2.3 (nível API 9), realizando uma consulta sobre o Provedor de

Contatos (como a mostrada acima) requer que o app declarar

a READ_CONTACTS permissão (ver Segurança e permissões ). No entanto, começando com

o Android 2.3, os contatos / Pessoas app concede seu app uma permissão temporária

para ler a partir do provedor de Contatos quando ele retorna um resultado. A permissão

temporária aplica-se apenas para o contato específico solicitado, para que você não pode

consultar um contato que não seja o especificado pela intenção de Uri , a menos que

você faz declarar a READ_CONTACTSpermissão.

Permitindo que outros Apps para começar seu Atividade

ANTERIORPRÓXIMA

ESTA LIÇÃO ENSINA A

1. Adicionar um filtro de Intenção

2. Lidar com o Intenção em sua atividade

3. Retornar um resultado

VOCÊ TAMBÉM DEVE LER

Compartilhamento de Dados Simples

Compartilhamento de Arquivos

As duas lições anteriores focada em um lado da história: a partir de uma outra atividade

app do seu app. Mas se o seu aplicativo pode executar uma ação que pode ser útil para

outro aplicativo, o aplicativo deve estar preparado para responder aos pedidos de ação de

outros apps. Por exemplo, se você criar um aplicativo social que pode compartilhar

mensagens ou fotos com amigos do usuário, é no seu melhor interesse para apoiar

aACTION_SEND intenção para que os usuários podem iniciar uma ação de "share" de outro

aplicativo e iniciar o seu aplicativo para executar a ação .

Para permitir que outros aplicativos para iniciar a sua atividade, você precisa adicionar

um <intent-filter> elemento no seu arquivo de manifesto para o

correspondente <activity>elemento.

Quando o aplicativo é instalado em um dispositivo, o sistema identifica os filtros intenção e

adiciona as informações para um catálogo interno de intenções suportados por todos os

aplicativos instalados. Quando um aplicativo chama startActivity

() ou startActivityForResult () , com a intenção implícita, o sistema encontra que a

atividade (ou atividades) pode responder à intenção.

Adicionar um filtro de Intenção

A fim de definir corretamente que objetiva sua atividade pode segurar, cada filtro intenção

de adicionar deve ser o mais específico possível em termos do tipo de acção e dados da

atividade aceita.

O sistema pode enviar uma determinada Intenção de uma atividade se que a atividade

tem um filtro de intenção de preencher os seguintes critérios da Intenção objeto:

Ação

A string com o nome da ação a ser executada. Geralmente um dos valores

definidos pelo plataforma, comoACTION_SEND ou ACTION_VIEW .

Especifique isso em seu filtro intenções com o <action> elemento. O valor

especificado neste elemento deve ser o nome da seqüência completa para a ação,

em vez da constante API (veja os exemplos abaixo).

Dados

Uma descrição dos dados associados com a intenção.

Especifique isso em seu filtro intenções com o <dados> elemento. Usando um ou

mais atributos neste elemento, você pode especificar apenas o tipo MIME, apenas

um prefixo URI, apenas um esquema URI, ou uma combinação destes e de outros

que indicam o tipo de dados aceito.

Nota: Se você não precisa declarar detalhes sobre os dados de Uri (como quando

sua atividade alças para outro tipo de dados "extra", em vez de um URI), você

deve especificar apenas o android: mimeTypeatribuir a declarar o tipo dos dados

de sua atividade manipula, como text / plain ou image / jpeg .

Categoria

Fornece uma forma adicional de caracterizar a atividade manusear a intenção,

normalmente relacionada com a ação do usuário ou local de onde ela

começou. Existem várias categorias diferentes suportados pelo sistema, mas a

maioria são raramente utilizados. No entanto, todas as intenções implícitas são

definidos com CATEGORY_DEFAULT por padrão.

Especifique isso em seu filtro intenções com o <category> elemento.

Em seu filtro de intenção, você pode declarar quais os critérios que sua

atividade aceita declarando cada um deles com elementos XML

correspondentes aninhados no <intent-filter> elemento.

Por exemplo, aqui está uma atividade com um filtro de intenção que

manipula o ACTION_SEND intenção quando o tipo de dados é texto ou uma

imagem:

<activity android:name = "ShareActivity" > <intent-filter> <action android:name = "android.intent.action.SEND" /> <category android:name = "android.intent.category.DEFAULT" /> <data android:mimeType = "text/plain" /> <data android:mimeType = "image/*" /> </intent-filter> </activity>

Cada intenção de entrada especifica apenas uma ação e um tipo de dados,

mas não há problema em declarar várias instâncias

do <action> , <categoria> e <Data> elementos em cada <intent-

filter> .

Se quaisquer dois pares de ação e dados são mutuamente exclusivas em

seus comportamentos, você deve criar filtros intenção separados para

especificar quais ações são aceitáveis quando combinado com os tipos de

dados que.

Por exemplo, suponha que sua atividade lida com texto e imagens, tanto

para o ACTION_SEND e ACTION_SENDTOintenções. Neste caso, você deve

definir dois filtros intenção separados para as duas ações, porque

aACTION_SENDTO intenção deve usar os dados Uri para especificar o

endereço do destinatário usando o envio ousendto esquema URI. Por

exemplo:

<Atividade android: name = "ShareActivity" > <! - filtro para enviar mensagens de texto; aceita ação SENDTO com sms esquemas URI filtrar para o envio de texto ou imagens; ENVIAR aceita ação e dados de texto ou imagem

Nota: Para receber intenções implícitas, você deve incluir

o CATEGORY_DEFAULT categoria no filtro de intenção.A

métodos startActivity () e startActivityForResult () tratar todas

as intenções, como se declarou aCATEGORY_DEFAULT categoria. Se você

não declará-lo em seu filtro de intenção, não há intenções implícitas irá

resolver a sua atividade.

Para mais informações sobre o envio e

recebimento ACTION_SEND intenções que realizam comportamentos de

compartilhamento social, consulte a lição sobre Recebendo dados simples

de Outros Apps .

Lidar com o Intenção em sua atividade

A fim de decidir que ação tomar em sua atividade, você pode ler

a Intenção que foi usado para iniciá-lo.

À medida que sua atividade se inicia, ligue getIntent () para recuperar

o Intenção que iniciou a atividade. Você pode fazê-lo a qualquer momento

durante o ciclo de vida da atividade, mas geralmente você deve fazê-lo

durante callbacks precoces, como onCreate () ou onStart () .

Por exemplo:

@Override protected void onCreate ( Bundle savedInstanceState ) { super . onCreate ( savedInstanceState ); setContentView ( R . layout . main ); // Obter a intenção de que começou essa atividade Intenção intenção = getIntent (); Uri dados = intenção . getData (); // Descobrir o que fazer com base no tipo intenção se ( intenção . getType . () indexOf ( "image /" ) ! = - 1 ) { // intenções Handle com dados de imagem ... } outra pessoa se ( intenção . GetType (). equals ( "text / plain" )) { // intenções Handle com texto ... } }

Retornar um resultado

Se você quiser retornar um resultado para a atividade que invocou o seu,

basta ligar para setResult () para especificar o código de resultado e

resultar Intent . Quando a sua operação é feita e que o usuário deve

retornar à atividade original, chamar acabamento () para fechar (e

destruir) sua atividade. Por exemplo:

// Cria a intenção de entregar algum tipo de resultado data Intent result = new Intent ( "com.example.RESULT_ACTION" , Uri . parse ( "content://result_uri" ); setResult ( Activity . RESULT_OK , result ); finish ();

Você sempre deve especificar um código de resultado com o

resultado. Geralmente, é ou RESULT_OK ouRESULT_CANCELED . Você pode,

então, fornecer dados adicionais com um Intent , conforme necessário.

Nota: O resultado está definido para RESULT_CANCELED por padrão. Assim,

se o usuário pressiona a Voltarbotão antes de completar a ação e antes de

definir o resultado, a atividade original recebe o resultado "cancelado".

Se você simplesmente precisa retornar um inteiro que indica uma das várias

opções de resultado, você pode definir o código de resultado para qualquer

valor superior a 0. Se você usar o código de resultado para entregar um

inteiro e você não tem necessidade de incluir a Intenção , você pode

chamar setResult () e passar apenas um código de resultado. Por

exemplo:

setResult ( RESULT_COLOR_RED ); acabamento ();

Neste caso, pode haver apenas um pequeno número de possíveis

resultados, de modo que o código de resultado é um número inteiro definido

localmente (superior a 0). Isso funciona bem quando você está retornando

um resultado de uma atividade em seu próprio aplicativo, porque a atividade

que recebe o resultado pode fazer referência a constante pública para

determinar o valor do código de resultado.

Nota: Não há necessidade de verificar se a atividade foi iniciada

com startActivity () oustartActivityForResult () . Basta ligar

para setResult () se a intenção que começou sua atividade poderia

esperar um resultado. Se a atividade de origem tinha

chamado startActivityForResult () , então o sistema de entrega-lo o

resultado que você fornecer para setResult () ; caso contrário, o

resultado é ignorado.

Android NDK

NESTE DOCUMENTO

1. Transferências

2. Revisões

3. Requisitos de Sistema e Software

4. Instalando o NDK

5. Primeiros passos com o NDK

1. Usando o NDK

6. Conteúdo do NDK

1. As ferramentas de desenvolvimento

2. Documentação

3. Aplicativos de exemplo

O NDK é um conjunto de ferramentas que permite implementar partes do seu aplicativo

usando linguagens de código nativo, como C e C ++. Para certos tipos de aplicativos, isso

pode ser útil para que você possa reutilizar bibliotecas de código existentes escritas em

línguas, mas a maioria dos aplicativos não precisa do Android NDK.

Antes de baixar o NDK, você deve entender que o NDK não vai beneficiar a maioria dos

aplicativos . Como um desenvolvedor, você precisa equilibrar seus benefícios contra os

seus inconvenientes. Notavelmente, usando o código nativo no Android geralmente não

resulta em uma melhoria de desempenho perceptível, mas ele sempre aumenta sua

complexidade app. Em geral, você só deve usar o NDK se é essencial para o seu app-

nunca, porque você simplesmente preferem programar em C / C ++.

Típicas bons candidatos para o NDK são cargas de trabalho intensivo da CPU, como

motores de jogo, processamento de sinal, simulação de física, e assim por diante. Ao

analisar se você deve ou não se desenvolver em código nativo, pensar sobre suas

necessidades e ver se as APIs quadro Android fornecer a funcionalidade que você precisa.

Transferências

Plataforma Pacote Tamanho (Bytes) MD5 checksum

Windows de 32

bits

android-NDK-r10d-windows-

x86.exe

455427281 c0930abfae0c990c4d191cc4ebd46b68

Windows de 64

bits

android-NDK-r10d-windows-

x86_64.exe

472613732 9a33f96da58a7e0b70e47d27b4a880b4

Mac OS X 32-bit android-ndk-r10d-darwin-x86.bin

441545213 0aeb3dc062dc457a4cd01e72eadb2379

Mac OS X 64-bit android-ndk-r10d-darwin-

x86_64.bin

442691567 cb101e1e62d56ea75b215f6bc6c27fae

Linux de 32 bits

(x86)

android-ndk-r10d-linux-x86.bin

449997190 70ed6d8c34e7e620c145b791e8eeef89

Linux de 64 bits

(x86)

android-ndk-r10d-linux-x86_64.bin

459151600 263b83071e6bca15f67898548d8d236e

Revisões

As seções a seguir fornecem informações sobre lançamentos do NDK.

Android NDK, 10d Revisão (Dezembro de 2014)

Mudanças importantes:

Feito GCC 4.8 padrão para todos os ABIs de 32 bits. Reprovado GCC 4.6, e irá

removê-lo próximo lançamento.Para restaurar o comportamento anterior,

adicione NDK_TOOLCHAIN_VERSION = 4,6 para NDK-build, ou adicionar--

toolchain = braço-linux-androideabi-4.6 ao executar make-

standalone-toolchain.sh na linha de comando. GCC 4.9 continua a ser o

padrão para ABIs de 64 bits.

Parado todos x86 [_64] toolchains de adicionar -mstackrealign por padrão. O

conjunto de ferramentas NDK assume um alinhamento pilha de 16 bytes. As

ferramentas e opções usadas por padrão aplicar esta regra. Um usuário

escrever código de montagem deve certificar-se de preservar o alinhamento

stack, e garantir que outros compiladores também cumprir esta regra. (GCC

bug 38496 )

Funcionalidade Sanitizer Endereço Adicionado a Clang 3.5 apoio à ARM e x86

ABIs. Para obter mais informações sobre essa alteração, consulte o Sanitizer

Endereço projeto.

Introduziu a exigência, a partir do nível API 21, para usar -fpie -pie ao

construir. Em níveis de API 16 e superiores, ndk-build usa PIE ao

construir. Esta mudança tem uma série de implicações, que são discutidas

noDeveloper Preview Issue 888 . Essas implicações não se aplicam às

bibliotecas compartilhadas.

Importantes correções de bugs:

Feitos mais correções relacionadas à A53 Errata # 835769 no-aarch64-linux-

android 4.9 vinculador. Como parte deste, GCC passa uma nova opção, --fix-

cortex-a53-835769 , quando -mfix-cortex-a53-835769 (ativado por

padrão) é especificado. Para obter mais informações, consulte esta mensagem

binutils e esta mensagem binutils .

Documentado uma correção para um libc ++ sscanf / vsscanf jeito que

ocorreu no nível API 21. A correção em si havia sido executado de

R10C. (Problema 77988 )

Corrigido um AutoFDO ( -fauto-profile ) acidente que ocorreu com o GCC

4.9 quando -Os foi especificado.(Problema 77571 )

Outras correções de bugs:

Feitas as seguintes correções de cabeçalho e biblioteca:

o Adicionado posix_memalign a nível API 16. Além disso, acrescentou um

protótipo em stdlib.h aos níveis API de 16 a 19. (Problema 77861 )

o Corrigido stdatomic.h para que ele inclui <atômica> apenas para C ++ 11.

o Modificado os seguintes cabeçalhos para uso autônomo: sys /

user.h e gl2ext.h , dlext.h , fts.h ,sgidefs.h para o nível de 21 API.

o Modificado sys / user.h renomear mxcsr_mask como mxcr_mask , e para

alterar o tipo de dados para u_ar0

de unsigned long para struct user_regs_struct *.

o Changed sysconf () Tipo de valor de retorno de int para longo .

Manipulação de fixo ndk-build do polegar para LOCAL_ARM_MODE : Em r10d,

ndk-build acrescenta LOCAL_LDFLAGS + = - mthumb por padrão, a menos

que uma das seguintes condições:

o Você definiu LOCAL_ARM_MODE igual a armar .

o Você está fazendo uma compilação de depuração (com configurações

como APP_OPTIM = debug eAndroidManifest.xml contendo android:

debuggable = "true" ), onde o modo ARM é o padrão, a fim de manter a

compatibilidade com toolchains anteriores. (Problema 74040 )

Fixo LOCAL_SRC_FILES em ndk-build usar caminhos absolutos

Windows. (Problema 74333 )

Removido código específico do bash ndk-gdb. (Problema 73338 )

Removido código específico do bash make-standalone-

toolchain.sh . (Problema 74145)

Documentação Revista sobre uma correção para System.loadLibrary

() dependências transitivos. (Problema41790 )

Corrigido um problema que impedia pacotes de 64 bits a partir de extração no

Ubuntu 14.04 e OS X 10,10 (Yosemite). (Problema 78148 )

Corrigido um problema com LOCAL_PCH para melhorar o suporte

Clang. (Problema 77575 )

Esclarecido "requer executável pilha" aviso de ld.gold. (Problema 79115 )

Android NDK, 10c Revisão (Outubro de 2014)

Android NDK, 10b Revisão (setembro de 2014)

Android NDK, Revisão 10 (julho de 2014)

Android NDK, 9d Revisão (Março de 2014)

Android NDK, 9c Revisão (Dezembro de 2013)

Android NDK, 9b Revisão (Outubro de 2013)

Android NDK, Revisão 9 (Julho de 2013)

Android NDK, 8e Revisão (Março de 2013)

Android NDK, 8d Revisão (Dezembro de 2012)

Android NDK, 8c Revisão (Novembro de 2012)

Android NDK, 8b Revisão (julho de 2012)

Android NDK, Revisão 8 (maio de 2012)

Android NDK, 7c Revisão (Abril de 2012)

Android NDK, 7b Revisão (fevereiro de 2012)

Android NDK, Revisão 7 (novembro de 2011)

Android NDK, 6b Revisão (agosto de 2011)

Android NDK, Revisão 6 (Julho de 2011)

Android NDK, 5c Revisão (Junho de 2011)

Android NDK, 5b Revisão (janeiro de 2011)

Android NDK, Revisão 5 (dezembro de 2010)

Android NDK, 4b Revisão (Junho de 2010)

Android NDK, Revisão 3 (Março de 2010)

Android NDK, Revisão 2 (setembro de 2009)

Android NDK, Revisão 1 (Junho de 2009)

Requisitos de Sistema e Software

As seções abaixo descrevem o sistema e requisitos de software para usar o

Android NDK, bem como considerações de compatibilidade de plataforma

que afetam appplications usando bibliotecas produzidos com o NDK.

O SDK Android

A instalação do SDK Android completo (incluindo todas as dependências)

é necessária.

É necessária Android 1.5 SDK ou versão posterior.

Os sistemas operacionais suportados

Windows XP (32 bits) ou Vista (32 ou 64 bits)

Mac OS X 10.4.8 ou posterior (x86 apenas)

Linux (32 ou 64 bits; Ubuntu 8.04, ou outras distribuições Linux usando

glibc 2.7 ou posterior)

Ferramentas de desenvolvimento obrigatórios

Para todas as plataformas de desenvolvimento, o GNU Make 3.81 ou

posterior é necessário. As versões anteriores do GNU make pode

funcionar, mas não foram testadas.

Também é necessária uma versão recente do awk (ou GNU Awk ou

nawk).

Para o Windows, Cygwin 1.7 ou superior é necessário. O NDK

vai não trabalhar com Cygwin instalações 1.5.

Compatibilidade com a plataforma Android

As bibliotecas nativas criadas pelo Android NDK só pode ser usado em

dispositivos que executam versões da plataforma Android mínimos

especificados. A versão mínima exigida plataforma depende da

arquitetura de CPU dos dispositivos que são alvo. A tabela seguinte

detalha quais versões da plataforma Android são compatíveis com o

código nativo desenvolvido para arquiteturas de CPU específicos.

Native Código CPU arquitetura usada Plataforma Android compatível (s)

ARM, ARM-NEON Android 1.5 (Nível 3 API) e superior

x86 Android 2.3 (Nível API 9) e superior

MIPS Android 2.3 (Nível API 9) e superior

Estas exigências significa que você pode usar bibliotecas nativas

produzidas com o NDK em aplicações que são destacáveis para

dispositivos rodando Android 1.5 ou posterior ARM baseado no. Se você

estiver implantando bibliotecas nativas para x86 e dispositivos baseados

em MIPS, a sua aplicação deve ter como alvo Android 2.3 ou posterior.

Para garantir a compatibilidade, um aplicativo usando uma biblioteca

nativa produzido com o NDK deve declarar um<usa-sdk> elemento no

seu arquivo de manifesto, com um android: minSdkVersion valor de

"3" ou maior atributo. Por exemplo:

<Manifest> <usa-sdk android: minSdkVersion = "3" /> ... </ manifest>

Se você usar esta NDK para criar uma biblioteca nativa que utiliza as

APIs OpenGL ES, o aplicativo que contém a biblioteca pode ser

implantado apenas para dispositivos que executam as versões de

plataforma mínimos descritos na tabela abaixo. Para garantir a

compatibilidade, certifique-se de que seu aplicativo declara o

bom android: minSdkVersion valor do atributo, como mostra a tabela

a seguir.

OpenGL ES versão utilizada Plataforma Android compatível (s) Uses-sdk obrigatórios Atributo

OpenGL ES 1.1 Android 1.6 (Nível API 4) e superior android: minSdkVersion = "4"

OpenGL ES 2.0 Android 2.0 (API Nível 5) e superior android: minSdkVersion = "5"

Para mais informações sobre o nível da API e sua relação com as

versões da plataforma Android, consulte Níveis de API do Android .

Além disso, um aplicativo usando as APIs OpenGL ES deve declarar

um <usa-feature> elemento no seu manifesto, com um android:

glEsVersion atributo que especifica a versão mínima OpenGL ES

exigido pelo aplicativo. Isso garante que Google Play irá mostrar a sua

aplicação apenas para usuários cujos dispositivos são capazes de

suportar a sua aplicação. Por exemplo:

<Manifest> <usa-metragem android: glEsVersion = "0x00020000" /> ... </ manifest>

Para obter mais informações, consulte o <uses-

feature> documentação.

Se você usar esta NDK para criar uma biblioteca nativa que usa a API

para acessar Android Bitmap buffers de pixel ou utiliza atividades

nativas, o aplicativo que contém a biblioteca pode ser implantado apenas

para dispositivos que executam o Android 2.2 (nível API 8) ou

superior. Para garantir a compatibilidade, certifique-se de que seu

aplicativo declara <usa-SDK do Android: minSdkVersion = "8"

/> valor de atributo no seu manifesto.

Instalando o NDK

Instalando o NDK no computador de desenvolvimento é simples e envolve a

extração do NDK de seu pacote de download.

Antes de começar certifique-se de que você tenha baixado o mais

recente Android SDK e atualizado suas aplicações e ambiente, conforme

necessário. O NDK é compatível com versões de plataforma mais velhas,

mas não versões mais antigas das ferramentas do SDK. Além disso, ter um

momento para rever os requisitos de software e do sistema para o NDK, se

você não tiver já.

Para instalar o NDK, primeiro baixe o pacote apropriado da tabela no topo

desta página. Então, siga o procedimento para a sua plataforma de

desenvolvimento:

No Linux e Mac OS X (Darwin):

1. Faça o download do pacote apropriado desta página.

2. Abra uma janela de terminal.

3. Vá para o diretório no qual você baixou o pacote.

4. Execute chmod a + x no pacote baixado.

5. Execute o pacote. Por exemplo:

ndk $ chmod a + x android - ndk - R10C - darwin - x86_64 . bin ndk $ ./ android - ndk - R10C - darwin - x86_64 . bin

A pasta que contém o NDK extrai-se.

Note que você também pode usar um programa como o 7z para

extrair o pacote.

No Windows:

1. Faça o download do pacote apropriado desta página.

2. Navegue até a pasta onde você baixou o pacote.

3. Dê um duplo clique no arquivo baixado. A pasta que contém o NDK

extrai-se.

Quando não comprimido, os arquivos NDK estão contidos em um diretório

chamado android-ndk- <versão> . Você pode renomear o diretório NDK

se necessário e você pode movê-lo para qualquer lugar no seu

computador. Esta documentação se refere ao diretório NDK como <ndk> .

Agora você está pronto para começar a trabalhar com o NDK.

Primeiros passos com o NDK

Uma vez que você tenha instalado o NDK com sucesso, dedique alguns

minutos para ler a documentação incluída no NDK. Você pode encontrar a

documentação no <ndk> / docs / diretório. Em particular, por favor leia o

documento overview.html completamente, para que você entenda a

intenção do NDK e como usá-lo.

Se você usou uma versão anterior do NDK, tome um momento para rever a

lista de mudanças NDK no documento CHANGES.HTML.

Aqui está o esboço geral de como você trabalhar com as ferramentas NDK:

1. Coloque suas fontes nativas sob <project> / jni / ...

2. Criar <project> /jni/Android.mk para descrever as suas fontes

nativas da NDK sistema de construção

3. Opcional: Criar <project> /jni/Application.mk .

4. Construa o seu código nativo, executando o script 'ndk-build "do diretório

do seu projeto. Ele está localizado no diretório NDK de nível superior:

5. cd <projeto>

6. <Ndk> / NDK-build

As ferramentas de compilação copiar os despojados, bibliotecas

compartilhadas necessárias para a sua aplicação para o local adequado

no diretório do projeto do aplicativo.

7. Finalmente, compilar o aplicativo usando as ferramentas do SDK da

maneira usual. As ferramentas de compilação SDK irá embalar as

bibliotecas compartilhadas no destacável do aplicativo .apk arquivo.

Para obter informações completas sobre todas as etapas listadas acima, por

favor, consulte a documentação incluída com o pacote NDK.

Usando o NDK

O quadro Android fornece duas maneiras de usar o código nativo:

Faça seu aplicativo usando o framework Android e usar JNI para acessar

as APIs fornecidas pelo Android NDK. Esta técnica permite que você tire

vantagem da conveniência do quadro Android, mas ainda permite que

você escreva código nativo quando necessário. Se você usar essa

abordagem, sua aplicação deve ter como alvo níveis de plataformas

específicas, mínimos Android, consulte compatibilidade com a plataforma

Android para mais informações.

Faça uma atividade nativa, o que permite implementar os retornos de

chamada do ciclo de vida em código nativo. O Android SDK fornece

a NativeActivity classe, que é uma classe de conveniência que

notifica o código nativo de qualquer retornos de chamada de ciclo de vida

de atividade ( onCreate () , onPause () , onResume () , etc). Você

pode implementar as chamadas de retorno em seu código nativo para

lidar com esses eventos quando eles ocorrem. As aplicações que utilizam

atividades nativas deve ser executado no Android 2.3 (Nível API 9) ou

mais tarde.

Você não pode acessar recursos como serviços e provedores de

conteúdo nativamente, então se você quiser usá-los ou qualquer outra

API quadro, você ainda pode escrever código JNI para fazê-lo.

Conteúdo do NDK

O NDK contém as aplicações de APIs, documentação e amostras que

ajudam você a escrever o seu código nativo.Especificamente:

Um conjunto de ferramentas e construir arquivos usados para gerar

bibliotecas de código nativo a partir de fontes em C e C ++

A maneira de incorporar as bibliotecas nativas correspondentes em um

arquivo de pacote de aplicativo ( .apk ) que pode ser implantado em

dispositivos Android

Um conjunto de cabeçalhos do sistema nativo e bibliotecas que serão

suportados em todas as versões futuras da plataforma Android, a partir

Android 1.5. As aplicações que utilizam atividades nativas deve ser

executado no Android 2.3 ou posterior.

Documentação, exemplos e tutoriais

A versão mais recente do NDK suporta os seguintes conjuntos de

instruções:

ARMv5TE, incluindo instruções Thumb-1 (ver docs / CPU-ARCH-

ABIS.html para mais informações)

ARMv7-A, incluindo instruções Thumb-2 e VFPv3-D16, com suporte

opcional para instruções NEON / VFPv3-D32 (verdocs / CPU-ARM-

NEON.html para mais informações)

instruções x86 (ver docs / CPU-X86.html para mais informações)

Instruções MIPS (ver docs / CPU-MIPS.html para mais informações)

Código de máquina ARMv5TE será executado em todos os dispositivos

Android baseados em ARM. ARMv7-A será executado apenas em

dispositivos como a Verizon Droid ou o Google Nexus One que têm uma

CPU compatível. A principal diferença entre os dois conjuntos de instruções

é que ARMv7-A suporta FPU hardware, Thumb-2, e as instruções de

néon. Você pode direcionar um ou ambos os conjuntos de instruções -

ARMv5TE é o padrão, mas a mudança para ARMv7-A é tão fácil quanto

adicionar uma única linha para o aplicativo do Application.mk arquivo,

sem a necessidade de mudar alguma coisa no arquivo. Você também pode

construir para as arquiteturas ao mesmo tempo e ter tudo armazenado na

final .apk . Informação completa é fornecida no CPU-ARCH-ABIS.HTML no

pacote NDK.

O NDK fornece cabeçalhos estáveis para libc (a biblioteca C), libm (a

biblioteca de matemática), OpenGL ES (biblioteca de gráficos 3D), a

interface JNI, e outras bibliotecas, conforme listado na ferramentas de

desenvolvimento seção.

As ferramentas de desenvolvimento

O NDK inclui um conjunto de cross-toolchains (compiladores, ligantes, etc.)

que podem gerar binários ARM nativas em Linux, OS X e Windows (com o

Cygwin) plataformas.

Ele fornece um conjunto de cabeçalhos de sistema para APIs nativas

estáveis que são garantidos para ser suportada em todas as versões

posteriores da plataforma:

libc (biblioteca C) cabeçalhos

libm (biblioteca de matemática) cabeçalhos

Cabeçalhos de interface JNI

libz (compressão Zlib) cabeçalhos

liblog (logging Android) cabeçalho

OpenGL ES 1.1 e OpenGL ES 2.0 (bibliotecas gráficas 3D) cabeçalhos

libjnigraphics (acesso tampão Pixel) cabeçalho (para Android 2.2 e

acima).

Um conjunto mínimo de cabeçalhos de apoio C ++

Bibliotecas de áudio nativo OpenSL ES

Android APIS aplicativo nativo

O NDK também fornece um sistema de construção que permite trabalhar de

forma eficiente com as suas fontes, sem ter que lidar com o conjunto de

ferramentas / platform / CPU / detalhes ABI. Você cria arquivos de

construção muito curtos para descrever quais as fontes para compilar e qual

aplicativo Android irá utilizá-los - o sistema de compilação reúne as fontes e

coloca as bibliotecas compartilhadas diretamente em seu projeto de

aplicativo.

Importante: Com exceção das bibliotecas listadas acima, as bibliotecas do

sistema nativo na plataforma Android é nãoestável e pode sofrer alterações

em versões futuras da plataforma. Seus aplicativos devem apenas fazer uso

das bibliotecas do sistema nativas estáveis fornecidas neste NDK.

Documentação

O pacote NDK inclui um conjunto de documentação que descreve as

capacidades do NDK e como usá-lo para criar bibliotecas compartilhadas

para seus aplicativos Android. Nesta versão, a documentação é fornecida

somente no pacote NDK para download. Você pode encontrar a

documentação no <ndk> / docs / diretório. Incluem-se esses arquivos

(lista parcial):

INSTALL.html - descreve como instalar o NDK e configurá-lo para o seu

sistema host

Overview.html - fornece uma visão geral dos recursos e uso NDK

ANDROID-MK.HTML - descreve o uso do arquivo Android.mk, que define

as fontes nativas que deseja compilar

APLICAÇÃO-MK.HTML - descreve o uso do arquivo Application.mk, que

descreve as fontes nativas exigidas pelo seu aplicativo Android

CPLUSPLUS-support.html - descreve o suporte a C ++ fornecido no

Android NDK

CPU-ARCH-ABIS.HTML - uma descrição de arquiteturas de CPU

suportados e sobre como orientá-las.

CPU-features.html - uma descrição do cpufeatures biblioteca estática

que permite que o código do aplicativo detectar família CPU do

dispositivo de destino e os recursos opcionais em tempo de execução.

CHANGES.HTML - uma lista completa de mudanças no NDK em todas

as versões.

DEVELOPMENT.HTML - descreve como modificar o NDK e gerar

pacotes de libertação para ele

HOWTO.html - informações sobre tarefas comuns associados com o

desenvolvimento NDK

IMPORT-MODULE.HTML - descreve como partilhar e módulos de

reutilização

LICENSES.HTML - informações sobre as várias licenças de código

aberto que governam o NDK Android

NATIVO-ACTIVITY.HTML - descreve como implementar atividades

nativas

NDK-BUILD.HTML - descreve o uso do script ndk-build

NDK-GDB.HTML - descreve como usar o depurador de código nativo

PREBUILTS.HTML - informações sobre como bibliotecas pré-construídos

e compartilhados estáticos funcionam

INDEPENDENTE-TOOLCHAIN.HTML - descreve como usar Android

NDK toolchain como um compilador standalone (ainda em beta).

SYSTEM-ISSUES.HTML - problemas conhecidos nas imagens do

sistema Android que você deve estar ciente de, se você estiver

desenvolvendo usando o NDK.

ESTÁVEL-APIS.HTML - uma lista completa das APIs estáveis expostos

por cabeçalhos no NDK.

Além disso, o pacote inclui informações detalhadas sobre o "biônico"

biblioteca C equipado com a plataforma Android que você deve estar ciente

de, se você estiver desenvolvendo usando o NDK. Você pode encontrar a

documentação no <ndk> / docs / system / libc / diretório:

Overview.html - fornece uma visão geral do "biônico" biblioteca C e os

recursos que ele oferece.

Aplicativos de exemplo

O NDK inclui aplicativos de amostra que ilustram como usar o código nativo

em seus aplicativos Android:

Olá-jni - uma aplicação simples que carrega uma seqüência de

caracteres a partir de um método nativo implementado em uma biblioteca

compartilhada e, em seguida, exibe na interface do aplicativo.

e dois libs - uma aplicação simples que carrega uma biblioteca

compartilhada de forma dinâmica e chama um método nativo fornecido

pela biblioteca. Neste caso, o método é implementado de uma biblioteca

estática importado pela biblioteca partilhada.

san-angeles - uma aplicação simples que renderiza gráficos 3D através

das APIs nativas OpenGL ES, enquanto a gestão do ciclo de vida

atividade com um GLSurfaceView objeto.

Olá-gl2 - uma aplicação simples que torna um triângulo usando

OpenGL ES 2.0 vértice e fragmento shaders.

Olá-neon - um aplicativo simples que mostra como usar

o cpufeatures biblioteca para buscar recursos de CPU em tempo de

execução, em seguida, usar intrínsecos NEON se suportado pela

CPU. Especificamente, a aplicação implementa duas versões de um

minúsculo ponto de referência para um circuito de filtro FIR, uma versão

C e uma versão otimizada para NEON para dispositivos que suportam.

bitmap-plasma - uma aplicação simples que demonstra como acessar

os buffers de pixel do Android Bitmap objetos de código nativo, e usa

isso para gerar um old-school efeito "plasma".

nativo-atividade - uma aplicação simples que demonstra como usar

a biblioteca estática nativo-app-cola para criar uma atividade nativa

nativo-plasma - uma versão de bitmap-plasma implementada com uma

atividade nativa.

Para cada amostra, o NDK inclui o código fonte C correspondente e os

arquivos Android.mk e Application.mk necessárias.Lá estão localizados

sob <ndk> / samples / <nome> / e seu código fonte pode ser

encontrado em <ndk> / samples / <nome> / jni / .

Você pode construir as bibliotecas compartilhadas para os aplicativos de

amostra, entrando <ndk> / samples / <nome> / , em seguida, chamar

o NDK-build comando. As bibliotecas compartilhadas gerados serão

localizados sob <ndk> / samples / <nome> / libs / armeabi / para

(código ARMv5TE máquina) e / ou <ndk> / samples / <nome> / libs

/ armeabi-v7a / for (ARMv7 código de máquina).

Em seguida, construir os aplicativos de amostra do Android que use as

bibliotecas compartilhadas:

Se você estiver desenvolvendo em Eclipse com ADT, use o assistente

Novo projeto para criar um novo projeto Android para cada amostra,

usando o "Importar de código-fonte existentes" opção e importar a fonte

de <ndk> / samples / <nome> / . Em seguida, criar um AVD, se

necessário, e construir / executar o aplicativo no emulador.

Se você está desenvolvendo com Ant, utilize o android ferramenta para

criar o arquivo de construção para cada um dos projetos de amostra

em <ndk> / samples / <nome> / . Em seguida, criar um AVD, se

necessário, construir o seu projeto da forma habitual, e executá-lo no

emulador.

Para obter mais informações sobre o desenvolvimento com as ferramentas

do SDK do Android e o que você precisa fazer para criar, construir e

executar seus aplicativos, consulte a Visão geral seção para o

desenvolvimento em Android.

Explorando o Sample Olá-jni

A amostra Olá-jni é uma simples demonstração de como usar JNI de um

aplicativo Android. A atividade HelloJni recebe uma string de uma função C

simples e exibe em um TextView.

Os principais componentes da amostra incluem:

A estrutura básica de um conhecido aplicativo Android

(um AndroidManifest.xml arquivo, um src / e res diretórios, e uma

atividade principal)

A jni / diretório que inclui o arquivo de origem implementado para o

código nativo, bem como o arquivo Android.mk

A testes / diretório que contém o código de teste de unidade.

1. Crie um novo projeto no Eclipse a partir da fonte de amostra existente ou

usar o android ferramenta para atualizar o projeto para que ele gera um

arquivo build.xml que você pode usar para criar o exemplo.

o Em Eclipse:

a. Clique em Arquivo> Novo Projeto Android ...

b. Selecione o projeto de criar a partir de fonte existente botão de

rádio.

c. Escolha qualquer nível API acima Android 1.5.

d. Na localidade de campo, clique em Browse ... e selecione

o <ndk-root> / samples / Olá-jni diretório.

e. Clique em Concluir .

o Na linha de comando:

a. Mude para o <ndk-root> / samples / Olá-jni diretório.

b. Execute o seguinte comando para gerar um arquivo build.xml:

android -p projeto de atualização. -s

2. Compilar o código nativo usando o NDK-build comando.

3. cd <ndk-root> / samples / Hello-JNI

4. <Ndk_root> / NDK-build

5. Construir e instalar o aplicativo como se fosse uma aplicação Android

normal. Se você estiver usando Eclipse, execute o aplicativo para

construir e instalá-lo em um dispositivo. Se você estiver usando Ant,

execute os seguintes comandos a partir do diretório do projeto:

6. debug formiga

7. adb instalar bin / HelloJni-debug.apk

Quando você executar o aplicativo no dispositivo, a seqüência Olá

JNI deve aparecer em seu dispositivo. Você pode explorar o resto das

amostras que estão localizados no <ndk-root> / samples diretório para

mais exemplos sobre como usar o JNI.

Explorando o aplicativo de exemplo nativo-atividade

A amostra nativo-atividade fornecida com o Android NDK demonstra como

usar a biblioteca estática android_native_app_glue. Esta biblioteca estático

torna a criação de uma atividade nativa mais fácil, fornecendo-lhe com uma

implementação que lida com as suas chamadas de retorno em outro

segmento, assim você não tem que se preocupar com eles bloqueando o

seu principal segmento. As principais partes da amostra são descritos

abaixo:

A estrutura básica de um conhecido aplicativo Android

(um AndroidManifest.xml arquivo, um src / e res diretórios).O

AndroidManifest.xml declara que a aplicação é nativa e especifica o

arquivo .so da atividade nativa. VejaNativeActivity para a fonte ou ver

o <ndk_root> /platforms/samples/native-

activity/AndroidManifest.xmlarquivo.

A jni / diretório contém a atividade nativa, main.c, que usa

o android_native_app_glue.h interface para implementar a

atividade. O Android.mk que descreve o módulo nativo para o sistema de

construção também existe aqui.

Para construir este aplicativo:

1. Crie um novo projeto no Eclipse a partir da fonte de amostra existente ou

usar o android ferramenta para atualizar o projeto para que ele gera um

arquivo build.xml que você pode usar para criar o exemplo.

o Em Eclipse:

a. Clique em Arquivo> Novo Projeto Android ...

b. Selecione o projeto de criar a partir de fonte existente botão de

rádio.

c. Escolha qualquer nível API acima Android 2.3.

d. Na localidade de campo, clique em Browse ... e selecione

o <ndk-root> / samples / native-atividadediretório.

e. Clique em Concluir .

o Na linha de comando:

a. Mude para o <ndk-root> / samples / native-

atividade diretório.

b. Execute o seguinte comando para gerar um arquivo build.xml:

c. android -p projeto de atualização. -s

2. Compilar o código nativo usando o NDK-build comando.

3. cd <ndk-root> / plataformas / samples / android-9 / samples / native-atividade

4. <Ndk_root> / NDK-build

5. Construir e instalar o aplicativo como se fosse uma aplicação Android

normal. Se você estiver usando Eclipse, execute o aplicativo para

construir e instalá-lo em um dispositivo. Se você estiver usando Ant,

execute os seguintes comandos no diretório do projeto, em seguida,

executar o aplicativo no dispositivo:

6. debug formiga

adb instalar bin / NativeActivity-debug.apk