Android geliştirme sırasında kullanıcıdan alınan verilerle çeşitli hesaplamalar yapmayı öğrenmek, uygulama geliştirme becerilerini artırır. Bu yazıda, kullanıcıdan vize ve final notlarını alarak ortalama hesaplayan bir Android uygulaması geliştireceğiz.
Ortalama hesaplarken vize notunun %40’ı ve Final notunun %60′ ının toplamını hesaplatacağız.
Uygulama, ortalama ve final notu kriterlerini kontrol ederek kullanıcının “Geçti” veya “Kaldı” durumlarını belirtecek. Ayrıca, durumu görsel olarak vurgulamak için metin rengini değiştireceğiz.
Tasarım:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <EditText android:id="@+id/editTextNumber_vize" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:layout_marginBottom="10dp" android:ems="10" android:inputType="number" android:hint="Vize Notunuzu Girin" android:textSize="18sp" /> <EditText android:id="@+id/editTextNumber_final" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:textSize="18sp" android:layout_marginBottom="10dp" android:hint="Final Notunuzu Girin" android:inputType="number" /> <Button android:id="@+id/button_hesapla" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="40dp" android:height="60dp" android:lineSpacingExtra="24sp" android:text="HESAPLA" android:textSize="18sp" /> <TextView android:id="@+id/textView_ortalama" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:text="Ortalama:" android:textAlignment="center" android:textSize="28sp" /> <TextView android:id="@+id/textView_durum" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:text="Durum:" android:textAlignment="center" android:textSize="28sp" /> </LinearLayout> |
Kod
Aşağıdaki kod, Android Studio üzerinde çalıştırılmak üzere hazırlanmıştır. Java programlama dili ve Android SDK kullanılarak oluşturulmuştur.
Java Kodu: MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | package com.example.vizefinal; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import androidx.activity.EdgeToEdge; import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; public class MainActivity extends AppCompatActivity { EditText editTextVize, editTextFinal; Button buttonHesapla; TextView textViewOrtalama, textViewDurum; int redColor, blackColor; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); EdgeToEdge.enable(this); setContentView(R.layout.activity_main); // Pencere dolgusunu ayarla (Edge-to-Edge tasarım için) ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); return insets; }); // Görsel bileşenlerin tanımlanması editTextVize = findViewById(R.id.editTextNumber_vize); editTextFinal = findViewById(R.id.editTextNumber_final); buttonHesapla = findViewById(R.id.button_hesapla); textViewOrtalama = findViewById(R.id.textView_ortalama); textViewDurum = findViewById(R.id.textView_durum); // Renkleri bir kez tanımla redColor = getResources().getColor(R.color.red, null); blackColor = getResources().getColor(R.color.black, null); // Hesaplama işlemi butona tıklandığında gerçekleşecek buttonHesapla.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { // Kullanıcıdan vize ve final notlarını al float vize = Float.parseFloat(editTextVize.getText().toString()); float finalNotu = Float.parseFloat(editTextFinal.getText().toString()); // Girdilerin geçerli aralıkta olup olmadığını kontrol et if (vize < 0 || vize > 100 || finalNotu < 0 || finalNotu > 100) { textViewOrtalama.setText("Notlar 0-100 arasında olmalıdır!"); textViewDurum.setText(""); return; } // Ortalama hesapla float ortalama = (vize * 0.4f) + (finalNotu * 0.6f); // Durum hesaplama ve gösterme hesaplaDurum(ortalama, finalNotu); } catch (NumberFormatException e) { // Hatalı veya eksik giriş durumunda textViewOrtalama.setText("Geçerli bir not giriniz!"); textViewDurum.setText(""); } } }); } /** * Ortalama ve durum bilgilerini hesaplayıp ekrana yazdıran yardımcı metot. */ private void hesaplaDurum(float ortalama, float finalNotu) { textViewOrtalama.setText("Ortalama: " + ortalama); if (ortalama < 50 || finalNotu < 50) { textViewDurum.setText("Kaldınız"); textViewDurum.setTextColor(redColor); // Renk: Kırmızı } else { textViewDurum.setText("Geçtiniz"); textViewDurum.setTextColor(blackColor); // Renk: Siyah } } } |
Uygulamayı çalıştırdıktan sonra kullanıcıdan vize ve final notları istenir. Girilen değerlere göre:
- Ortalama hesaplanır.
- “Geçtiniz” veya “Kaldınız” metinleri ekranda gösterilir.
- “Kaldınız” durumu kırmızı renkle vurgulanırken, “Geçtiniz” durumu siyah renkle gösterilir.
Örnek Çalışma Ekranı
- Vize Notu: 40
- Final Notu: 50