Densidades independentes de pixels
[](https://www.youtube.com/watch?v=zhszwkcay2A)
Exemplos práticos (App Lanchonete)
-
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> <ImageView android:id="@+id/imageViewBolo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/bolo_de_fuba" android:layout_gravity="center" android:contentDescription="Imagem de bolo" android:layout_marginBottom="16dp"/> <ImageView android:id="@+id/imageViewCafe" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/coffee" android:layout_gravity="center" android:contentDescription="Imagem de café" android:layout_marginBottom="16dp"/> <TextView android:id="@+id/textViewTotal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="R$ 0.00" android:textSize="20sp"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="*** Usando TableRow ***" android:textAppearance="@style/TextAppearance.AppCompat.Large"/> <TableRow android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:src="@drawable/coffee"/> <ImageView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:src="@drawable/bolo_de_fuba"/> </TableRow> <TableRow android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@color/blue" android:gravity="center" android:text="Café" android:textAppearance="@style/TextAppearance.AppCompat.Medium"/> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@color/green" android:gravity="center" android:text="Bolo" android:textAppearance="@style/TextAppearance.AppCompat.Medium"/> </TableRow> </LinearLayout> </LinearLayout>
-
activity_cafe.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> <EditText android:id="@+id/editTextQuantidadeCafe" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Quantidade:" android:inputType="number" android:layout_marginBottom="16dp"/> <Button android:id="@+id/buttonCafe" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Adicionar Café"/> </LinearLayout>
-
activity_bolo.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> <EditText android:id="@+id/editTextQuantidadeBolo" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Quantidade:" android:inputType="number" android:layout_marginBottom="16dp"/> <Button android:id="@+id/buttonBolo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Adicionar Bolo"/> </LinearLayout>
-
CalculoModel.java
public class CalculoModel { private double total; private static final double CAFE_PRECO = 2.50; private static final double BOLO_PRECO = 5.00; public CalculoModel() { this.total = 0.0; } public double getTotal() { return total; } public void setTotal(double total) { this.total = total; } public void addCafe(int quantidade) { total += quantidade * CAFE_PRECO; } public void addBolo(int quantidade) { total += quantidade * BOLO_PRECO; } }
-
MainActivity.java
import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private ImageView imageViewBolo; private ImageView imageViewCafe; private TextView textViewTotal; private CalculoModel model; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageViewBolo = findViewById(R.id.imageViewBolo); imageViewCafe = findViewById(R.id.imageViewCafe); textViewTotal = findViewById(R.id.textViewTotal); model = new CalculoModel(); imageViewBolo.setOnClickListener(this); imageViewCafe.setOnClickListener(this); Intent intent = getIntent(); if (intent != null && intent.hasExtra("total")) { model.setTotal(intent.getDoubleExtra("total", 0.0)); Log.e("Main",""+model.getTotal()); alterarTotal(); } } @Override public void onClick(View view) { int viewId = view.getId(); if (viewId == R.id.imageViewBolo) { Intent intentBolo = new Intent(this, BoloActivity.class); intentBolo.putExtra("total", model.getTotal()); startActivity(intentBolo); } else if (viewId == R.id.imageViewCafe) { Intent intentCafe = new Intent(this, CafeActivity.class); intentCafe.putExtra("total", model.getTotal()); startActivity(intentCafe); } } // alterar a view com o valor obtido do modelo private void alterarTotal() { textViewTotal.setText(String.format("R$ %.2f", model.getTotal())); } }
-
CafeActivity.java
import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import androidx.appcompat.app.AppCompatActivity; public class CafeActivity extends AppCompatActivity implements View.OnClickListener { private EditText editTextQuantidadeCafe; private Button buttonCafe; private CalculoModel model; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_cafe); editTextQuantidadeCafe = findViewById(R.id.editTextQuantidadeCafe); buttonCafe = findViewById(R.id.buttonCafe); model = new CalculoModel(); buttonCafe.setOnClickListener(this); Intent intent = getIntent(); if (intent != null && intent.hasExtra("total")) { model.setTotal(intent.getDoubleExtra("total", 0.0)); Log.e("Main",""+model.getTotal()); } } @Override public void onClick(View view) { if (view.getId() == R.id.buttonCafe) { try { int quantidade = Integer.parseInt(editTextQuantidadeCafe.getText().toString()); model.addCafe(quantidade); Intent intent = new Intent(this, MainActivity.class); intent.putExtra("total", model.getTotal()); startActivity(intent); } catch (NumberFormatException e) { editTextQuantidadeCafe.setError("Por favor, insira um número válido"); } } } }
-
BoloActivity.java
import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import androidx.appcompat.app.AppCompatActivity; public class BoloActivity extends AppCompatActivity implements View.OnClickListener { private EditText editTextQuantidadeBolo; private Button buttonBolo; private CalculoModel model; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_bolo); editTextQuantidadeBolo = findViewById(R.id.editTextQuantidadeBolo); buttonBolo = findViewById(R.id.buttonBolo); model = new CalculoModel(); buttonBolo.setOnClickListener(this); Intent intent = getIntent(); if (intent != null && intent.hasExtra("total")) { model.setTotal(intent.getDoubleExtra("total", 0.0)); Log.e("Main",""+model.getTotal()); } } @Override public void onClick(View view) { if (view.getId() == R.id.buttonBolo) { try { int quantidade = Integer.parseInt(editTextQuantidadeBolo.getText().toString()); model.addBolo(quantidade); Intent intent = new Intent(this, MainActivity.class); intent.putExtra("total", model.getTotal()); startActivity(intent); } catch (NumberFormatException e) { editTextQuantidadeBolo.setError("Por favor, insira um número válido"); } } } }
Exemplos práticos (IMC)
-
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp" android:gravity="center"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Informe seus dados:" android:layout_marginBottom="16dp" /> <EditText android:id="@+id/editTextNome" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Nome" android:inputType="textPersonName" /> <EditText android:id="@+id/editTextIdade" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Idade" android:inputType="number" /> <EditText android:id="@+id/editTextAltura" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Altura (em metros)" android:inputType="numberDecimal" /> <EditText android:id="@+id/editTextPeso" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Peso (em kg)" android:inputType="numberDecimal" /> <Button android:id="@+id/buttonCalcular" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Calcular IMC" android:layout_marginTop="16dp" /> <TextView android:id="@+id/textViewResultado" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" android:textAppearance="@style/TextAppearance.AppCompat.Large" android:layout_marginTop="16dp" /> </LinearLayout>
-
MainActivity.java
import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private EditText editTextNome, editTextIdade, editTextAltura, editTextPeso; private TextView textViewResultado; private Button buttonCalcular; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editTextNome = findViewById(R.id.editTextNome); editTextIdade = findViewById(R.id.editTextIdade); editTextAltura = findViewById(R.id.editTextAltura); editTextPeso = findViewById(R.id.editTextPeso); buttonCalcular = findViewById(R.id.buttonCalcular); textViewResultado = findViewById(R.id.textViewResultado); buttonCalcular.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String nome = editTextNome.getText().toString(); int idade = Integer.parseInt(editTextIdade.getText().toString()); double altura = Double.parseDouble(editTextAltura.getText().toString()); double peso = Double.parseDouble(editTextPeso.getText().toString()); Pessoa pessoa = new Pessoa(nome, idade, altura, peso); double imc = pessoa.calcularIMC(); textViewResultado.setText("Nome: " + pessoa.getNome() + "\nIMC: " + String.format("%.2f", imc)); } }); } }
-
Pessoa.java
public class Pessoa { private String nome; private int idade; private double altura; private double peso; public Pessoa(String nome, int idade, double altura, double peso) { this.nome = nome; this.idade = idade; this.altura = altura; this.peso = peso; } public double calcularIMC() { return peso / (altura * altura); } public String getNome() { return nome; } }
Exemplos práticos (Calculadora)
-
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp" android:gravity="center"> <EditText android:id="@+id/editTextNumero1" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Número 1" android:inputType="number" /> <EditText android:id="@+id/editTextNumero2" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Número 2" android:inputType="number" /> <Button android:id="@+id/buttonSomar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Somar" /> <Button android:id="@+id/buttonSubtrair" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Subtrair" /> <TextView android:id="@+id/textViewResultado" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Resultado: " android:textAppearance="@style/TextAppearance.AppCompat.Large" android:layout_marginTop="20dp" /> </LinearLayout>
-
MainActivity.java
import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private EditText editTextNumero1, editTextNumero2; private Button buttonSomar, buttonSubtrair; private TextView textViewResultado; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editTextNumero1 = findViewById(R.id.editTextNumero1); editTextNumero2 = findViewById(R.id.editTextNumero2); buttonSomar = findViewById(R.id.buttonSomar); buttonSubtrair = findViewById(R.id.buttonSubtrair); textViewResultado = findViewById(R.id.textViewResultado); buttonSomar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String numero1 = editTextNumero1.getText().toString(); String numero2 = editTextNumero2.getText().toString(); int num1 = Integer.parseInt(numero1); int num2 = Integer.parseInt(numero2); int resultado = Calculadora.somar(num1, num2); textViewResultado.setText("Resultado da soma: " + resultado); } }); buttonSubtrair.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String numero1Str = editTextNumero1.getText().toString(); String numero2Str = editTextNumero2.getText().toString(); int num1 = Integer.parseInt(numero1Str); int num2 = Integer.parseInt(numero2Str); int resultado = Calculadora.subtrair(num1, num2); textViewResultado.setText("Resultado da subtração: " + resultado); } }); } }
-
Calculadora.java
public class Calculadora { public static int somar(int num1, int num2) { return num1 + num2; } public static int subtrair(int num1, int num2) { return num1 - num2; } }