🚀 3.1 LinearLayout
Para a tela de login, utilizaremos inicialmente o LinearLayout, que permite a organização dos elementos de forma linear (vertical ou horizontal). Embora o ConstraintLayout seja o padrão moderno para telas complexas, o LinearLayout continua sendo extremamente útil para agrupamentos simples e componentes de lista.
Construindo a Tela de Login
Criaremos o arquivo de layout login.xml com uma orientação vertical para empilhar os elementos:
<?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:gravity="center"
android:orientation="vertical"
android:padding="24dp">
<ImageView
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_marginBottom="32dp"
android:src="@drawable/logo_quartz" />
<EditText
android:id="@+id/editUsuario"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Usuário"
android:inputType="text" />
<EditText
android:id="@+id/editSenha"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Senha"
android:inputType="textPassword" />
<Button
android:id="@+id/btnEntrar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Entrar" />
</LinearLayout>Lógica de Autenticação (Java 17 & ViewBinding)
No Android Studio 2023.1, evitamos o findViewById. Vamos implementar a BoaViagemActivity utilizando ViewBinding e a sintaxe moderna do Java:
public class BoaViagemActivity extends AppCompatActivity {
private ActivityLoginBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityLoginBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
binding.btnEntrar.setOnClickListener(v -> autenticar());
}
private void autenticar() {
// Uso de 'var' para clareza
var usuario = binding.editUsuario.getText().toString();
var senha = binding.editSenha.getText().toString();
if ("leitor".equals(usuario) && "123".equals(senha)) {
var intent = new Intent(this, DashboardActivity.class);
startActivity(intent);
} else {
exibirErro();
}
}
private void exibirErro() {
Toast.makeText(this, R.string.erro_autenticacao, Toast.LENGTH_SHORT).show();
}
}NOTE
O uso do
ViewBindinggarante que não tentaremos acessar um botão que não existe no layout (null-safety), algo comum no antigofindViewById.
TIP
Para designs profissionais, prefira o ConstraintLayout. Ele permite posicionar elementos em relação uns aos outros, eliminando a necessidade de múltiplos
LinearLayoutsaninhados, o que torna a renderização da interface muito mais rápida.