Bu dersimizde Android Java ile basit bir quiz test uygulaması oluşturacağız. Örneğimizde kullanıcıya test soruları getirerek cevaplamasını isteyeceğiz. Verilen cevaplar sonucunda soruların tamamı bittiğinde kullanıcıya doğru cevap sayısını göstereceğiz. Başarılı olmak için kullanıcının en az %60 başarı sağlaması gerekmektedir.
Uygulamamızı oluşturduktan sonraki ekran çıktısı aşağıdaki videodaki gibi olacaktır.
Örneğimizde koleksiyon kullanımı, sınıf kullanımı, metot kullanımı, alertDialog kullanımı gibi bir çok konu hakkında bilgi sahibi olacaksınız.
Öncelikle tasarım kısmı ile başlayalaım. Tasarımımız aşağıdaki gibi olacaktır.

Tasarımımıza ait activity_main.xml kodlarımız aşağıdaki gibi olacaktır.
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 94 | <?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/teal_200" android:padding="10dp" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/toplam_soru" android:text="Toplam Soru Sayısı: " android:layout_centerHorizontal="true" android:textSize="20dp" android:layout_margin="10dp"/> <TextView android:id="@+id/soru" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_above="@id/secenekler" android:text="Soru buraya gelecek." android:textAlignment="center" android:textSize="20dp" android:textStyle="bold" android:textColor="@color/white" android:layout_margin="20dp"/> <LinearLayout android:id="@+id/secenekler" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" android:orientation="vertical"> <Button android:id="@+id/cevap_A" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Cevap A" android:textColor="@color/black" android:background="@color/white"/> <Button android:id="@+id/cevap_B" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="Cevap B" android:textColor="@color/black" android:background="@color/white"/> <Button android:id="@+id/cevap_C" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="Cevap C" android:textColor="@color/black" android:background="@color/white"/> <Button android:id="@+id/cevap_D" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="Cevap D" android:textColor="@color/black" android:background="@color/white"/> </LinearLayout> <Button android:id="@+id/gonder" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/secenekler" android:layout_marginTop="20dp" android:background="@color/blue" android:text="Gönder" android:textSize="24dp" /> </RelativeLayout> |
Tasarım kısmını tamaladıktan sonra sorularımızın, seçeneklerin ve doğru cevapların bulunduğu SoruCevap sınıfımızı oluşturacağız.

SoruCevap sınıfımıza ait örnek içerik aşağıdaki gibi olacaktır.
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 | package com.example.quiz_1; public class SoruCevap { public static String soru[]={ "Ahırdaki ineklerin ayaklarının toplamı 84’tür. Bu ahırda kaç inek vardır?", "Kümesteki tavukların ayakları toplamı 96’dır. Bu kümeste kaç tavuk vardır?", "Meryem Hanım yaptığı 68 kurabiyeyi altışarlı paketledi. Kalan kurabiyeyi de oğluna verdi. Buna göre oğlu kaç kurabiye yemiştir?", "Bekir 96 sayfalık hikâye kitabını eşit sayfalar okuyarak 6 günde bitiriyor. Buna göre Bekir bir günde kaç sayfa okumuştur?", "5 tanesine 30 TL ödediğimiz kalemin düzinesine kaç TL öderiz?", "8 dondurma için 24 TL ödedik. 5 tane alsaydık kaç TL ödememiz gerekir?" }; public static String secenek[][]={ {"20","21","22","23"}, {"45","46","47","48"}, {"1","2","3","4"}, {"6","12","16","22"}, {"45","72","60","50"}, {"15","25","35","45"} }; public static String dogruCevap[]={ "21", "48", "2", "16", "72", "15" }; } |
Bu kod parçası, “com.example.quiz_1” paketi içinde “SoruCevap” isimli bir sınıf tanımlar. Sınıf içinde, soru, seçenek ve doğru cevap için statik diziler tanımlanmıştır. Soru dizisi, soruları içermektedir. Seçenek dizisi, her sorunun seçeneklerini içermektedir. Doğru cevap dizisi ise, her sorunun doğru cevabını içermektedir.
Bir sonraki adımda mainActivity.java dosyamıza ait kodları oluşturacağız. Kodlarımız aşağıdaki gibi olacaktır.
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 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | package com.example.quiz_1; import android.app.AlertDialog; import android.graphics.Color; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements View.OnClickListener { TextView txtToplamSoru; TextView txtSoru; Button btnCevapA,btnCevapB,btnCevapC,btnCevapD; Button btnGonder; int puan=0; int toplamSoru=SoruCevap.soru.length; int sorulacak=0; String secilenCevap=""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); txtToplamSoru=findViewById(R.id.toplam_soru); txtSoru=findViewById(R.id.soru); btnCevapA=findViewById(R.id.cevap_A); btnCevapB=findViewById(R.id.cevap_B); btnCevapC=findViewById(R.id.cevap_C); btnCevapD=findViewById(R.id.cevap_D); btnGonder=findViewById(R.id.gonder); btnCevapA.setOnClickListener(this); btnCevapB.setOnClickListener(this); btnCevapC.setOnClickListener(this); btnCevapD.setOnClickListener(this); btnGonder.setOnClickListener(this); txtToplamSoru.setText("Toplam Soru: "+toplamSoru); SoruGetir(); } private void SoruGetir() { if(sorulacak==toplamSoru){ TestBitir(); return; } txtSoru.setText(SoruCevap.soru[sorulacak]); btnCevapA.setText(SoruCevap.secenek[sorulacak][0]); btnCevapB.setText(SoruCevap.secenek[sorulacak][1]); btnCevapC.setText(SoruCevap.secenek[sorulacak][2]); btnCevapD.setText(SoruCevap.secenek[sorulacak][3]); } private void TestBitir() { String durum=""; if(puan>toplamSoru*0.6){ durum="Tebrikler"; } else{ durum="Başarısız oldunuz."; } new AlertDialog.Builder(this) .setTitle(durum) .setMessage(toplamSoru+ " sorudan "+puan+" adet doğru cevap verdiniz.") .setPositiveButton("Tekrar",((dialog, which) -> Tekrarla())) .setCancelable(false) .show(); } private void Tekrarla() { puan=0; sorulacak=0; SoruGetir(); } @Override public void onClick(View v) { btnCevapA.setBackgroundColor(Color.WHITE); btnCevapB.setBackgroundColor(Color.WHITE); btnCevapC.setBackgroundColor(Color.WHITE); btnCevapD.setBackgroundColor(Color.WHITE); Button btnTiklanan=(Button) v; if(btnTiklanan.getId()==R.id.gonder){ if(secilenCevap.equals(SoruCevap.dogruCevap[sorulacak])){ puan++; } else{ Toast.makeText(this,"Yanlış Cevap :(",Toast.LENGTH_SHORT).show(); } sorulacak++; SoruGetir(); }else{ //Seceneklerden biri tıklanmış demektir. secilenCevap=btnTiklanan.getText().toString(); btnTiklanan.setBackgroundColor(Color.GREEN); } } } |
Bu kod parçası, Android uygulaması için bir quiz oyununun temel fonksiyonlarını içermektedir. “com.example.quiz_1” paketi içinde “MainActivity” isimli bir sınıf tanımlar. Bu sınıf “AppCompatActivity” ve “View.OnClickListener” arabirimlerini uygular.
“onCreate” metodu, uygulama başladığında çalışır ve ekrandaki görsel elemanların referanslarını alır ve tıklama olaylarını tanımlar. Ayrıca, SoruCevap sınıfından sorular ve cevaplar çekilir ve ekrana yerleştirilir. Kullanıcının seçtiği cevap doğruysa puan arttırılır. Test bitirildiğinde kullanıcının skoru ekrana yazdırılır ve tekrar oynamak isteyip istemediği sorulur.
“SoruGetir” metodu, ekrana soruları ve seçenekleri yerleştirir. “TestBitir” metodu, testin bitiminde kullanıcıya skoru ve tekrar oynamak isteyip istemediği sorulur. “Tekrarla” metodu, puanı ve sorulacak soruyu sıfırlama işlemi gerçekleştirir.
“onClick” metodu, kullanıcının tıkladığı görsel elemanların hangi tıklama olaylarına ait olduğunu kontrol eder ve o tıklama olayına göre işlem yapar. Kullanıcının seçtiği cevap doğru ise puan arttırılır veya test bitirildiğinde kullanıcıya skoru ve tekrar oynamak isteyip istemediği sorulur.
Kod içinde ayrıca, kullanıcı arayüzünün oluşturulması, ekrana yazdırma işlemleri, renklendirme işlemleri ve diğer fonksiyonlar yer almaktadir.

1-Soruları karıştırarak sormak için ne yapmalıyız?
2-Soruların Arka Planı kırmızı çıkıyor onu nasıl değiştirebilirim?
3-her doğru cevap için ekranda “daoğru:1,2..” vb. nasıl yazdırabilirim
bu soruları random yapmak için hangi kodu kullanmalıyız?