sexta-feira, 13 de fevereiro de 2015

Android Spinners

Android Spinners 



    Spinners nos fornecem uma maneira rápida de selecionar um valor de um conjunto de valores. Em um estado padrão, um Spinner mostra seu valor atual. Tocando no Spinner ele mostra um dropdown menu com todos os outros valores, onde o usuário pode escolher um novo valor.

    Nesse tutorial estarei explicando como utilizar um Spinner, estarei utilizando o Android Studio 1.0.2, veja os passos que realizaremos neste tutorial.

  • Criaremos uma MainActivity
  • Adicionaremos um Spinner no activity_main.xml
  • Utilizaremos o Spinner na MainActivity
  • Mostraremos na tela o item selecionado no Spinner

Nosso projeto ficará assim:



    Você pode adicionar um Spinner no seu layout com o Objeto Spinner. Você deve  cria-lo no seu layout XML com o elemento <Spinner> . Por exemplo:



<Spinner
    android:id="@+id/planets_spinner"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

    Outra forma de adicionar o Spinner no seu layout é arrastando para o seu layout a partir do editor gráfico do Android Studio.



    Como nesse criaremos um Spinner com nomes de pessoas colocaremos no nosso activity_main.xml um TextView que terá o valor Nome: e o nosso Spinner que armazenará nossa lista de nomes .Abaixo o código do activity_main.xml.

activity_main.xml


<RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"
    android:padding="10dp">

    <Spinner
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/spinner"
        android:layout_alignTop="@+id/textView"
        android:layout_toRightOf="@+id/textView"
        android:layout_toEndOf="@+id/textView" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Nomes: "
        android:id="@+id/textView"
        android:layout_marginTop="66dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginRight="10dp"/>
</RelativeLayout>

    Agora vamos trabalhar na nossa classe MainActivity.java, começaremos por criar um objeto do tipo Spinner e armazena-lo em uma variável chamada spinner. Neste tutorial criaremos um Spinner com nomes de Pessoas como mostrado anteriormente na imagem acima, para colocar estes nomes no nosso spinner precisaremos criar uma lista de nomes , podemos usar um array de Strings , ArrayList<String> etc. No nosso caso usaremos um array de Strings, após criarmos a nossa lista de nomes precisamos coloca-la dentro do nosso Spinner, porém o Spinner não aceita um array de String como parâmetro para definirmos como lista, então o que fazer? Sabemos que o Spinner aceita um adapter como parâmetro e é isso que daremos a ele. Vamos criar um ArrayAdapter de String e passar nossa lista de nomes dentro dele, então poderemos passar o ArrayAdapter como parâmetro no nosso Spinner. Veja o código abaixo.

MainActivity.java


package com.inforprogramm.aulaspinner;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.Spinner;


public class MainActivity extends Activity {

    //Criamos a variavel spinner
    private Spinner spinner;

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

        //instanciamos o spinner que está no nosso activity_main.xml
        spinner = (Spinner) findViewById(R.id.spinner);

        //Criamos uma lista de Nomes
        String nomes [] = {"José","Paulo","Maria","Henrique","João Paulo","Fernanda","Leticia"};

        //O spinner recebe um adapter que pode ser do tipo ArrayAdapter então criamos um ArrayAdapter e colocamos nossa lista dentro
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,nomes);

        //Agora definimos o adapter para nosso Spinner
        spinner.setAdapter(adapter);

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

    Agora que já criamos nosso Spinner com sucesso vamos fazer com que cada vez que o usuário clique em um nome diferente na lista mostre-o na tela, para isso usaremos o método setOnItemSelectedListener() do Spinner, esse método executa determinado código que esteja dentro do método onItemSelected() cada vez que um item do Spinner for selecionado, no nosso caso usamos um método statico da classe Toast que serve para imprimir na tela uma mensagem, dessa forma tudo que devemos fazer é pegar o valor do Spinner que foi selecionado, usando o método getSelectedItem() do Spinner que retorna um Object então usamos o método toString() para converter-lo em String. Veja abaixo.


package com.inforprogramm.aulaspinner;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;


public class MainActivity extends Activity {

    //Criamos a variavel spinner
    private Spinner spinner;

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

        //instanciamos o spinner que está no nosso activity_main.xml
        spinner = (Spinner) findViewById(R.id.spinner);

        //Criamos uma lista de Nomes
        String nomes [] = {"José","Paulo","Maria","Henrique","João Paulo","Fernanda","Leticia"};

        //O spinner recebe um adapter que pode ser do tipo ArrayAdapter então criamos um ArrayAdapter e colocamos nossa lista dentro
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,nomes);

        //Agora definimos o adapter para nosso Spinner
        spinner.setAdapter(adapter);
//Criaremos uma acao para cada vez que um item seja selecionado no spinner
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                //toda vez que um item for selecionado esse codigo será executado
                Toast.makeText(MainActivity.this, spinner.getSelectedItem().toString(), Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

Baixar código fonte : Android Spinner