Dicas Básicas de Android para Programadores Java Experientes

Decidimos compartilhar conhecimento, seguindo nossa filosofia:

Simple. Fast

Se você já tem bastante experiência em Java você só precisa de algumas palavras-chave para resolver seu problema. Então vamos lá!

* Por favor deixe seu comentário se encontrar algo errado! Grato!

#001

Pergunta: Como impedir que o teclado abra automaticamente quando a tela é carregada?

Solução: coloque android:focusableInTouchMode=”true” no Layout raiz.

Exemplo:

<FrameLayout
    android:focusableInTouchMode="true"
    ...
    >

#002

Pergunta: Como faço para a tela ter scroll? Meu conteúdo está para fora da tela mas não consigo dar scroll!

Solução: use uma ScrollView como wrapper

Solução Detalhada: a ScrollView foi criada justamente para isso. Portanto, basta encapsular a parte que precisa de scroll com uma ScrollView.

Exemplo:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fadeScrollbars="false">
    ... (coloque aqui a parte que precisa de scroll) ....
</ScrollView>

#003

Pergunta: Meu Floating Action Button (FAB, aquele botão que fica flutuando em detaque) está grudado na tela. Como faço para dar um espaçamento (padding)?

Solução: coloque o FAB dentro de um LinearLayout e coloque o padding no layout

Exemplo:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="bottom"
    android:orientation="vertical"
    android:paddingBottom="@dimen/pad.horizontal"
    android:paddingEnd="@dimen/pad.horizontal"
    android:paddingStart="@dimen/pad.horizontal"
    android:paddingTop="@dimen/pad.horizontal">

    ... (coloque seu FAB aqui) ...

</LinearLayout>

 

#004

Pergunta: Meu Floating Action Button (FAB, aquele botão que fica flutuando em detaque) está deslizando junto com a tela, mas ele deveria estar fixo sempre no mesmo lugar. Como fazer isso?

Solução: coloque o FAB dentro de um FrameLayout

Exemplo:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >  

    ... (coloque o FAB aqui) ...

</FrameLayout>

 

#005

Pergunta: Qual componente devo usar para criar um campo de texto parecido com as especificações do Material Design?

Solução: troque o TextView por TextInputLayout

Exemplo:

<android.support.design.widget.TextInputLayout ...>

    <EditText ... />

</android.support.design.widget.TextInputLayout>

 

#006

Pergunta: ao tentar usar o TextInputLayout recebo alguns dos erros abaixo. Como resolver?

Couldn’t resolve resource @id/visible

Couldn’t resolve resource @id/masked

Solução: coloque as linhas abaixo dentro do colors.xml

<item name="visible" type="id"/>
<item name="masked" type="id"/>

Solução Detalhada: não sei porque este id não existe, nem por que é necessário. De qualquer forma, podemos fazer o erro sumir se nós mesmos criamos estes ids em qualquer dos arquivos de recursos, como o colors.xml. Ao colocar estas linhas o erro some, pois agora os recursos existem.

 

#007

Pergunta: como faço para entender a diferença entre layout_gravity e gravity?

Solução:

  • layout_gravity  ~= float no CSS.
  • gravity ~= text-align no CSS.

Em outras palavras, layout_gravity, está relacionado com o posicionamento do bloco no layout. Já o gravity tem a ver com o que acontece dentro do bloco.

 

#008

Pergunta: como faço para colocar um date picker ou time picker na minha app?

Solução: comece seguindo a documentação oficial, aqui. Depois, podem acontecer pelo menos dois problemas:

  1. Ao clicar no campo que exibe a data/hora, para abrir o DatePickerDialog ou TimePickerDialog, o teclado é exibido automaticamente.
    • Solução: coloque editable=”false” no EditText, caso esteja usando um TextInputLayout.
  2. É preciso clicar duas vezes para abrir o dialog.
    • Solução: coloque focusable=”false” no EditText, caso esteja usando um TextInputLayout.

 

#009

Pergunta: como faço para definir qual botão de conclusão aparecerá no teclado virtual (“soft keyboard”) ? Se for um botão de next, como escolho para onde irá o próximo foco?

Solução: use android:imeOptions=”actionNext” para indicar que o botão especial é de next ou android:imeOptions=”actionDone” para indicar que terminou. Para definir qual o próximo campo, use android:nextFocusForward=”@id/idDoMeuProximoItem”

Solução Detalhada:

  • A propriedade android:imeOptions permite definir qual será o botão extra que aparece no teclado virtual do android: se é uma seta de próximo campo, um check de concluir, uma lupa de buscar, etc. Então, basta definir esta propriedade para informar qual deve ser o botão exibido.
  • Para especificar para onde vai quando se “clica” em next, deve-se usar a propriedade android:nextFocusForward=”@id/idDoMeuProximoItem” colocando o id do próximo campo a ter foco.
  • Obs: se estive usando um TextInputLayout, ambas as propridades devem ser colocadas no TextInputEditText / EditText interno.

Exemplo:

<android.support.design.widget.TextInputEditText
 android:id="@+id/edit1"
 android:imeOptions="actionNext"
 android:nextFocusForward="@id/edit2" />
 
(...)

<android.support.design.widget.TextInputEditText
 android:id="@+id/edit2"
 android:imeOptions="actionDone" />

#010

Pergunta: como faço para pegar uma view pelo id? E pelo nome?

Exemplo:

// pega por id
View view = findViewById(meuId);

// pega por nome
int id = getResources().getIdentifier(meuNome, "id", getPackageName())
View view = findViewById(id);
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s