Aprenda Android

  • Página Inicial
  • Contato!
  • Tudo sobre Android Parte 1!
  • Tudo sobre Android Parte 2!
  • Tudo sobre Android Parte 3!
  • Tudo sobre Android Parte 4!
  • Tudo sobre Android Parte 2

    Spinner (Combobox)

    Para colocarmos um select no programa, precisamos colocar isso no XML strings.xml da pasta res > values >, dentro da tag resources:

    
    <string-array name="superior">
        <item>Não Possui</item>
        <item>Incompleto</item>
        <item>Completo</item>
    </string-array>
    
    

    Esse é o código do arquivo custom_spinner_item.xml, em res e layout:

    
    <?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="top"
        android:singleLine="true"
        android:textColor="@color/black"
        android:background="@color/white"/>
    
    

    Arraste o spinner pro projeto e coloque a id cxCurs.

    No Java, colocamos assim:

    
    public class MainActivity extends AppCompatActivity {
        private EditText txtNome;
        private Button btnClick;
        private EditText numId;
        private RadioButton radMasc, radFem;
        private int idade;
        private String sexo;
        private CheckBox chProg, chRed, chHard;
        private static String conhe = "";
        private Spinner cxCurs;
        private ArrayAdapter adap;
        private String item;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            txtNome = (EditText)findViewById(R.id.txtNome); // Nome das ids dos objetos
            btnClick = (Button)findViewById(R.id.btnClick);
            radMasc = (RadioButton)findViewById(R.id.radMasc);
            radFem = (RadioButton)findViewById(R.id.radFem);
            numId = (EditText)findViewById(R.id.numId);
            chProg = (CheckBox)findViewById(R.id.chProg);
            chRed = (CheckBox)findViewById(R.id.chRed);
            chHard = (CheckBox)findViewById(R.id.chHard);
            cxCurs = (Spinner)findViewById(R.id.cxCurs);
    
            adap = ArrayAdapter.createFromResource(this, R.array.superior, R.layout.custom_spinner_item);
    
            cxCurs.getBackground().setColorFilter(Color.parseColor("#000000"), PorterDuff.Mode.SRC_ATOP);
            cxCurs.setAdapter(adap);
    
            btnClick.setOnClickListener(new View.OnClickListener() { // Invocado quando o evento é executado
                @Override
                public void onClick(View v) {
                    AlertDialog.Builder diag = new AlertDialog.Builder(MainActivity.this);
    
                    if(radMasc.isChecked()) {
                        sexo = "Masculino";
                    }
                    else if(radFem.isChecked()) {
                        sexo = "Feminino";
                    }
    
                    idade = Integer.parseInt(numId.getText().toString().trim());
    
                    if(chProg.isChecked()) {
                        conhe += "\n";
                        conhe += chProg.getText().toString().trim();
                    }
    
                    // Outro condicional:
    
                    if(chRed.isChecked()) {
                        conhe += "\n";
                        conhe += chRed.getText().toString().trim();
                    }
    
                    // Outro condicional:
    
                    if(chHard.isChecked()) {
                        conhe += "\n";
                        conhe += chHard.getText().toString().trim();
                    }
    
                    item = cxCurs.getSelectedItem().toString();
    
                    diag.setMessage(txtNome.getText().toString().trim() + "\nIdade: " + idade + "\n" + sexo + "\nConhecimentos:\n" + conhe + "\nEnsino superior: " + item);
                    diag.setNeutralButton("Ok", null); // Cria o botão
                    diag.show(); // Exibe o botão
    
                    conhe = ""; // Isso limpa a variável
                }
            });
        }
    }
    
    

    Criando Calculadora - Parte 1

    Crie um novo projeto e coloque o layout como linear, e coloque dois campos de número nele, com as IDs numVal1 e numVal2, coloque também um botão com a ID btnCalc

    Coloque também um campo de texto e para ele não ficar editável, adicione a propriedade editable como false e remova as opções de texto em inputType, com a ID txtRes. Coloque o gravity como center_horizontal.

    Criando Calculadora - Parte 2

    Agora criamos as variáveis assim:

    
    package com.example.calculadora;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.*;
    
    public class MainActivity extends AppCompatActivity {
        private EditText numVal1;
        private EditText numVal2;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            numVal1 = (EditText)findViewById(R.id.numVal1);
            numVal2 = (EditText)findViewById(R.id.numVal2);
        }
    }
    
    

    Criando Calculadora - Parte 3

    Declare também o botão e o campo de resultado no programa, deixando a classe dessa forma:

    
    public class MainActivity extends AppCompatActivity {
        private EditText numVal1;
        private EditText numVal2;
        private Button btnCalc;
        private EditText txtRes;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            numVal1 = (EditText)findViewById(R.id.numVal1);
            numVal2 = (EditText)findViewById(R.id.numVal2);
            btnCalc = (Button)findViewById(R.id.btnCalc);
            txtRes = (EditText)findViewById(R.id.txtRes);
        }
    }
    
    

    Criando Calculadora - Parte 4

    Vá no botão e adicione o evento soma em onClick.

    No Java, colocamos esse código:

    
    public void soma(View v) {
        int n1, n2, res;
        
        n1 = Integer.parseInt(numVal1.getText().toString().trim());
        n2 = Integer.parseInt(numVal2.getText().toString().trim());
        
        res = n1 + n2;
        
        txtRes.setText(String.format("O resultado é %d.", res));
    }
    
    

    Jogo da Velha - Adicionando os Objetos Visuais

    Veja se o layout está como linear, e coloque a orientação dele para vertical. Dentro de cada layout, coloque três layouts horizontais e nestes coloque três botões em cada.

    Em cada botão, coloque as tags (é tag, não ID) de quad1 até quad9.

    No Java, alteramos assim:

    
    package com.example.jogodavelha;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    
    public class MainActivity extends AppCompatActivity {
        private View vi;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            this.setVi(getLayoutInflater().inflate(R.layout.activity_main, null)); // Isso infla o XML
            setContentView(this.getVi()); // Não alterar o outro setContentView, adicionar este.
            getSupportActionBar().hide();
        }
    
        public View getVi() {
            return this.vi;
        }
    
        public void setVi(View vi) {
            this.vi = vi;
        }
    }
    
    

    PS: O método criado é para retermos a instância, que será necessário várias vezes no nosso programa.

    Jogo da Velha - Recuperando a Instância

    No Java, coloque esse código:

    
    public Button getQuad(int tag) {
        // Isso retorna o botão capturado pela tag, coloque na classe uma constante string de nome QUAD com o conteúdo "quad"
        return (Button)this.getVi().findViewWithTag(QUAD + tag);
    }
    
    

    Essa função será para recuperar a tag dos botões.

    Adicione em todos os botões o onclick clickQuad. Usaremos um só método pra todos eles, cujo código é esse:

    
    public void clickQuad(View v) {
        Toast.makeText(this.getVi().getContext(), v.getTag().toString(), Toast.LENGTH_LONG).show();
    }
    
    

    A função acima mostrará uma notificação ao tocar cada quadrado.

    Defina agora essas constantes e variáveis:

    
    private static final String BOLA = "O";
    private static final String XIS = "X";
    private String lastPlay = "X"; // Não é constante
    
    

    Defina os getters e setters da variável lastPlay:

    
    public String getLastPlay() {
        return this.lastPlay;
    }
    
    public void setLastPlay(String lastPlay) {
        this.lastPlay = lastPlay;
    }
    
    

    E altere o método clickQuad assim:

    
    public void clickQuad(View v) {
        if(this.getLastPlay().equals(XIS)) {
            ((Button)v).setText(BOLA);
    
            this.setLastPlay(BOLA);
        }
        else {
            ((Button)v).setText(XIS);
    
            this.setLastPlay(XIS);
        }
    
        Toast.makeText(this.getVi().getContext(), v.getTag().toString(), Toast.LENGTH_LONG).show();
    }
    
    

    Jogo da Velha - Adicionando o Controle de Iniciar

    Adicione um décimo botão para iniciarmos a partida, coloque o texto Play e o onclick a função novoJogo. E no Java coloque esse código:

    
    public void novoJogo(View v) {
        // Isso limpa todos os botões:
    
        for(int i = 1; i <= 9; i++) {
            if(this.getQuad(i) != null) {
                this.getQuad(i).setText("");
            }
        }
    }
    
    

    Para manter os botões desabilitados antes de iniciar a partida, criamos esse método:

    
    public void ativarQuad(boolean b) {
        for(int i = 1; i <= 9; i++) {
            if(this.getQuad(i) != null) {
                this.getQuad(i).setEnabled(b);
            }
        }
    }
    
    

    Vá em todos os botões do jogo e coloque a opção enabled como false em todos, e coloque a chamada da função acima no novoJogo:

    
    public void novoJogo(View v) {
        this.ativarQuad(true);
    
        for(int i = 1; i <= 9; i++) {
            if(this.getQuad(i) != null) {
                this.getQuad(i).setText("");
            }
        }
    }
    
    

    Jogo da Velha - Definindo os Botões já Jogados

    Basta alterar a função clickQuad assim:

    
    public void clickQuad(View v) {
        if(((Button)v).getText().equals("")) {
            if(this.getLastPlay().equals(XIS)) {
                ((Button)v).setText(BOLA);
    
                this.setLastPlay(BOLA);
            }
            else {
                ((Button)v).setText(XIS);
    
                this.setLastPlay(XIS);
            }
        }
        else {
            Toast.makeText(this.getVi().getContext(), "Escolha outro Botão", Toast.LENGTH_LONG).show();
        }
    }
    
    

    Jogo da Velha - Definindo o Array que Irá Conter Jogadas

    Coloque essa matriz na classe do projeto:

    
    private int estadoFinal[][] = {{1, 2, 3},
                                    {4, 5, 6},
                                    {7, 8, 9},
                                    {1, 4, 7},
                                    {2, 5, 8},
                                    {3, 6, 9},
                                    {1, 5, 9},
                                    {3, 5, 7}};
    
    

    A matriz acima tem as condições de término de jogo.

    Crie essa função no Java:

    
    public void finalizado() {
        for(int x = 0; x <= 7; x++) { // Arrays são contados a partir do zero
            // Recupera os valores do botão:
            String s1 = this.getQuad(estadoFinal[x][0]).getText().toString();
            String s2 = this.getQuad(estadoFinal[x][1]).getText().toString();
            String s3 = this.getQuad(estadoFinal[x][2]).getText().toString();
    
            if(!s1.equals("") && !s2.equals("") && !s3.equals("")) {
                if(s1.equals(s2) && s2.equals(s3)) {
                    Toast.makeText(this.getVi().getContext(), "O Jogo Acabou!", Toast.LENGTH_LONG).show();
                }
            }
        }
    }
    
    

    Adicione a chamada dessa função na função clickQuadrado, no final, depois de todo o restante do código.