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
}
});
}
}
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.
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);
}
}
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);
}
}
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));
}
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.
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();
}
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("");
}
}
}
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();
}
}
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.