Densidades independentes de pixels

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;
        }
    }