HamburgueriaZ: App Android com Java
Construa um aplicativo funcional para montagem de pedidos personalizados, utilizando Java, Intents e estilização com temas no Android Studio
Resumo do Objetivo
O objetivo desta atividade é construir um aplicativo Android funcional para uma hamburgueria, permitindo que os clientes montem seus pedidos de forma personalizada. Você praticará desde a criação da interface visual (UI) até a implementação da lógica de negócios, utilizando a linguagem Java para processar as escolhas do usuário.
Além do desenvolvimento interno, a atividade foca na interação entre aplicativos. Você aprenderá a padronizar estilos visuais através de temas e a utilizar Intents para exportar os dados do pedido (nome, adicionais, quantidade e preço) para um aplicativo de e-mail externo, simulando um processo real de finalização de pedido.
Checklist de Requisitos
Configuração do Projeto
- Nome: "HamburgueriaZ"
- Linguagem: Java
- Minimum SDK: API 23
Interface Visual (XML)
- Imagem de logo/banner no topo
- Campo para nome do cliente
- Checkboxes (Bacon, Queijo, Onion Rings)
- Seletor de quantidade (+ / -)
- Resumo do Pedido e Preço Total
- Botão "Fazer Pedido"
Regras de Negócio
- Preço base: R$ 20,00
- Bacon: + R$ 2,00
- Queijo: + R$ 2,00
- Onion Rings: + R$ 3,00
- Bloqueio de valores negativos
Estilização
- Estilo global "EstiloTexto"
-
Arquivo:
res/values/themes.xml
Funcionalidade de Saída
-
Intent com
ACTION_SENDTO - Assunto com nome do cliente
- Corpo com resumo formatado
Formato de Entrega
- Exportar projeto como .zip
- File > Export > Export to Zip File
Passo a Passo e Dicas Técnicas
Configuração do Projeto
Inicie um novo projeto com o template "Empty Activity".
Desenvolvimento do Layout (XML)
Monte a interface no activity_main.xml.
ImageView para a logo,
EditText para o nome,
CheckBox para os adicionais e
Button para as interações.
<ImageView
android:id="@+id/imgLogo"
android:layout_width="wrap_content"
android:layout_height="100dp"
android:src="@drawable/logo_hamburgueria" />
<EditText
android:id="@+id/etNomeCliente"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Digite seu nome" />
<CheckBox
android:id="@+id/cbBacon"
android:text="Bacon (+ R$ 2,00)" />
<CheckBox
android:id="@+id/cbQueijo"
android:text="Queijo (+ R$ 2,00)" />
<CheckBox
android:id="@+id/cbOnionRings"
android:text="Onion Rings (+ R$ 3,00)" />
Padronização Visual
Abra o arquivo res/values/themes.xml e crie a
tag <style name="EstiloTexto">.
wrap_content,
center_vertical, letras maiúsculas, tamanho
15sp e paddings de 16dp.
<style name="EstiloTexto">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_gravity">center_vertical</item>
<item name="android:textAllCaps">true</item>
<item name="android:textSize">15sp</item>
<item name="android:padding">16dp</item>
</style>
Lógica da MainActivity (Java)
No arquivo MainActivity.java, declare as
variáveis e vincule-as aos componentes do XML.
ViewBinding (se preferir) ou
findViewById para manipular os
componentes.
public class MainActivity extends AppCompatActivity {
private EditText etNomeCliente;
private CheckBox cbBacon, cbQueijo, cbOnionRings;
private TextView tvQuantidade, tvResumo, tvTotal;
private Button btnMenos, btnMais, btnFazerPedido;
private int quantidade = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Vincular componentes
etNomeCliente = findViewById(R.id.etNomeCliente);
cbBacon = findViewById(R.id.cbBacon);
cbQueijo = findViewById(R.id.cbQueijo);
cbOnionRings = findViewById(R.id.cbOnionRings);
tvQuantidade = findViewById(R.id.tvQuantidade);
tvResumo = findViewById(R.id.tvResumo);
tvTotal = findViewById(R.id.tvTotal);
btnMenos = findViewById(R.id.btnMenos);
btnMais = findViewById(R.id.btnMais);
btnFazerPedido = findViewById(R.id.btnFazerPedido);
}
}
Implementação dos Botões (+/-)
Crie as funções somar e subtrair para controlar a quantidade.
int para a
quantidade e atualize a TextView correspondente com
setText(). Bloqueie valores negativos.
private void atualizarQuantidade() {
tvQuantidade.setText(String.valueOf(quantidade));
calcularPedido();
}
btnMais.setOnClickListener(v -> {
quantidade++;
atualizarQuantidade();
});
btnMenos.setOnClickListener(v -> {
if (quantidade > 1) {
quantidade--;
atualizarQuantidade();
}
});
Cálculo do Pedido
Implemente a lógica para calcular o preço total baseado nos adicionais e quantidade.
private void calcularPedido() {
double precoBase = 20.00;
double adicionais = 0;
if (cbBacon.isChecked()) adicionais += 2.00;
if (cbQueijo.isChecked()) adicionais += 2.00;
if (cbOnionRings.isChecked()) adicionais += 3.00;
double total = (precoBase + adicionais) * quantidade;
String resumo = String.format("Hambúrguer x%d\nAdicionais: %s\nTotal: R$ %.2f",
quantidade,
obterAdicionaisSelecionados(),
total);
tvResumo.setText(resumo);
tvTotal.setText(String.format("R$ %.2f", total));
}
Intent de E-mail
Implemente a função para enviar o pedido via Intent para o e-mail.
Intent com a ação
ACTION_SENDTO. Configure o "subject" com o
nome do cliente e o corpo com o resumo formatado.
private void enviarPedido() {
String nome = etNomeCliente.getText().toString().trim();
if (nome.isEmpty()) {
Toast.makeText(this, "Digite seu nome", Toast.LENGTH_SHORT).show();
return;
}
String assunto = "Pedido de " + nome;
String corpo = tvResumo.getText().toString();
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:"));
intent.putExtra(Intent.EXTRA_SUBJECT, assunto);
intent.putExtra(Intent.EXTRA_TEXT, corpo);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
} else {
Toast.makeText(this, "Nenhum app de e-mail encontrado", Toast.LENGTH_SHORT).show();
}
}
btnFazerPedido.setOnClickListener(v -> enviarPedido());
Instruções de Entrega
Como Exportar seu Projeto
Formato do Arquivo
Você deve exportar o projeto inteiro para um arquivo .zip
Como Exportar
No Android Studio, vá em File > Export > Export to Zip File...
O que enviar
O arquivo compactado gerado por esse processo deve ser salvo e enviado através da sua plataforma de estudos.