Android'de Java İle Basit Hesap Makinesi Yapalım
-
Bu dersimizde temel olarak dört işlemi kapsayan, sayısal değer ve boş girdi kontrollerini yapan basit bir hesap makinesi yapalım.
İlk olarak bir tane boş activity açalım.
Proje OluşturmaProjemizin ayarlamalarını yapalım.
Proje AyarlarıProjemiz oluştu. Oluşan bu boş projenin dosyalarına bakalım.
Boş Proje YapısıOluşturacağımız projenin EditText, TextView gibi elemanlarının biraz daha güzel görünmesi için drawable klasörüne bir tane shape_kenarlik.xml ekleyip renk, kenarlık gibi değerlerini içerisinde belirtelim.
Drawable Klasörüne Tasarım Nesnesi EkleyelimAçılan pencerede şu bilgilerle bir adet shape_kenarlik.xml dosyası oluşturalım.
shape_kenarlik.xmlshape_kenarlik.xml Betikleri
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="#f2f2f2" /> <stroke android:width="1dip" android:color="#FF6200EE"/> </shape>
shape_kenarlik.xml Görünüm
Ufak tefek hazırlıkları tamamladık. Sıra geldi ekrandaki öğeleri tasarlamaya. Ekran öğelerimiz şu şekilde olacak
activity_main.xml Betikleri<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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" tools:context=".MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:padding="10dp" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:weightSum="5"> <com.google.android.material.textfield.TextInputLayout android:layout_width="0dp" android:layout_height="wrap_content" android:hint="Sayı 1" android:layout_weight="1" android:layout_marginRight="2dp"> <com.google.android.material.textfield.TextInputEditText android:id="@+id/etSayi1" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:inputType="numberDecimal" android:background="@drawable/shape_kenarlik" android:gravity="center"/> </com.google.android.material.textfield.TextInputLayout> <com.google.android.material.textfield.TextInputLayout android:layout_width="0dp" android:layout_height="wrap_content" android:hint="İşlem" android:layout_weight="1" android:layout_marginRight="2dp"> <com.google.android.material.textfield.TextInputEditText android:id="@+id/etIslem" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="1" android:inputType="text" android:background="@drawable/shape_kenarlik" android:gravity="center"/> </com.google.android.material.textfield.TextInputLayout> <com.google.android.material.textfield.TextInputLayout android:layout_width="0dp" android:layout_height="wrap_content" android:hint="Sayı 2" android:layout_weight="1" android:layout_marginRight="2dp"> <com.google.android.material.textfield.TextInputEditText android:id="@+id/etSayi2" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:inputType="numberDecimal" android:background="@drawable/shape_kenarlik" android:gravity="center"/> </com.google.android.material.textfield.TextInputLayout> <com.google.android.material.textfield.TextInputLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_marginRight="2dp"> <com.google.android.material.textfield.TextInputEditText android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="1" android:inputType="text" android:background="@drawable/shape_kenarlik" android:gravity="center" android:text="=" android:enabled="false"/> </com.google.android.material.textfield.TextInputLayout> <com.google.android.material.textfield.TextInputLayout android:layout_width="0dp" android:layout_height="wrap_content" android:hint="Sonuç" android:layout_weight="1"> <com.google.android.material.textfield.TextInputEditText android:id="@+id/etSonuc" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:inputType="text" android:background="@drawable/shape_kenarlik" android:gravity="center" android:enabled="false"/> </com.google.android.material.textfield.TextInputLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp"> <Button android:id="@+id/btnSonuc" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="Hesapla"/> </LinearLayout> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout>
Tasarım ÖnizlemeTasarım çalışması bitti. Hesaplamalar için yapılması gereken kodlamaya geçelim. Kodlama kısmındaki işleyiş;
- EditText, Button gibi tasarım nesnelerini global olarak tanımlayacağız.
- findViewById metodu sayesinde tasarım nesnelerini xml içerisinde bulacağız.
- Button setOnClickListener olayı sayesinde btnHesapla adlı butona tıklandığını anlayıp işlemlerimizi başlatacağız.
- getText() metodu ile EditText nesnelerine girilen değerleri alıp bir değişkene aktaracağız.
- Regular Expressions (Düzenli İfadeler) sayesinde girilen bir değerin istediğimiz düzende olup olmadığını kontrol edeceğiz. Örnek olarak girilen bir değerin double olup olmadığını kontrol edeceğiz.
- if koşulu ile gereken şartların sağlanıp sağlanmadığını kontrol edeceğiz. Örnek olarak bir sayının sıfıra bölümünün tanımsız olduğunu bildireceğiz.
- Toast Mesaj sayesinde kullanıcıya uyarı verdireceğiz.
- TextUtils.isEmpty() ile bir değerin var olup olmadığını kontrol edeceğiz.
- switch case yapısı ile çarpma, bölme, çıkarma ve toplama işlemlerinin yapılmasını sağlayacağız.
- setText() metodu ile çıkan sonucu ilgili EditText'e yazdıracağız.
Kısaca işleyiş yapısını sizlere aktarmış olduk. Şimdi uygulama açıldığında çalışan activity olan (MainActivity.java) içerisinde kodlarımızı hazırlayalım.
MainActivity.java
package com.deneme.hesapmakinesi; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends AppCompatActivity { EditText etSayi1, etIslem, etSayi2, etSonuc; Button btnSonuc; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); etSayi1 = (EditText) findViewById(R.id.etSayi1); etIslem = (EditText) findViewById(R.id.etIslem); etSayi2 = (EditText) findViewById(R.id.etSayi2); etSonuc = (EditText) findViewById(R.id.etSonuc); btnSonuc = (Button) findViewById(R.id.btnSonuc); btnSonuc.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String strSayi1 = etSayi1.getText().toString(); String strSayi2 = etSayi2.getText().toString(); String strIslem = etIslem.getText().toString(); etSonuc.setText(""); boolean blnSayi1 = fnDoubleKontrol(strSayi1); boolean blnSayi2 = fnDoubleKontrol(strSayi2); boolean blnIslem = fnIslemKontrol(strIslem); String strUyari = ""; if (!blnSayi1) strUyari = "- Lütfen sayı 1 giriniz.\n"; if (!blnSayi2) strUyari += "- Lütfen sayı 2 giriniz.\n"; if (!blnIslem) strUyari += "- Lütfen '+', '-', '*' veya '/' işlemi giriniz.\n"; else { if (strIslem.equals("/")) { if (strSayi2.contains("0")) strUyari += "- Bir sayının sıfıra bölümü tanımsızdır"; } } if (!TextUtils.isEmpty(strUyari)) Toast.makeText(getApplicationContext(), strUyari, Toast.LENGTH_LONG).show(); else { String strSonuc = ""; switch(strIslem) { case "+": strSonuc = String.valueOf(Double.parseDouble(strSayi1) + Double.parseDouble(strSayi2)); break; case "-": strSonuc = String.valueOf(Double.parseDouble(strSayi1) - Double.parseDouble(strSayi2)); break; case "/": strSonuc = String.valueOf(Double.parseDouble(strSayi1) / Double.parseDouble(strSayi2)); break; case "*": strSonuc = String.valueOf(Double.parseDouble(strSayi1) * Double.parseDouble(strSayi2)); break; default: break; } etSonuc.setText(strSonuc); } } }); } public boolean fnDoubleKontrol(String strDeger) { boolean blnSonuc = false; if (!TextUtils.isEmpty(strDeger)) blnSonuc = strDeger.matches("[0-9]{1,13}(\\.[0-9]*)?"); return blnSonuc; } public boolean fnIslemKontrol(String strDeger) { boolean blnSonuc = false; if (!TextUtils.isEmpty(strDeger)) { if (strDeger.equals("+") || strDeger.equals("-") || strDeger.equals("*") || strDeger.equals("/")) blnSonuc = true; } return blnSonuc; } }
Örnek 1
Örnek 2Bol öğrenmeli günler.
Kaynak: https://www.ontedi.com/android/androidde-java-ile-basit-hesap-makinesi-yapalim
ontedi tarafından 04/Oca/21 17:59 tarihinde düzenlenmiştir -
Ellerine sağlık.
-
zeybekustasi bunu yazdı
Ellerine sağlık.
+1
Bravo diyorum.
-
Ellerine sağlık hocam
-
basitten başlayıp amatörce birşeyler yapıp biraz kendimi geliştirmek istedim. Bi kaç kurs buldum, Youtubeden eğitim videoları indirdim ama derstekinin aynısını yaparken bende bir hata çıkıyor hatayı çözmeye çalışıyorum ya da benzeri şekilde yapmak istiyorum (hatta bir iki konu açmıştım burada sanırım) yapamayınca hata alınca bütün hevesim kaçıyor. (bir ara kotlin kursu da aldım onda da sorun yaşayınca bıraktım) Danışabileceğim bir kaynak olsa devam ederdim belki ama pandemide evdeyken bu fırsatı tepiyorum hissiyatı var şuan. Geçen bir ara python bari öğreneyim dedim basit bir kurs aldım (MEBBİS'ten), BTK akademide sıfırdan ileri seviyeye python kursuna başladım ama daha devam edemedim. Bunları neden yazdım bilmiyorum :) ama buradan sen ya da senin gibi birileri küçük küçük projeleri açıklamalı paylaşsa takılma durumu olursa yardımcı olabilirseniz hem bana hem de benim gibi düşünenelere yardımcı olursunuz.
Paylaşımınız için teşekkürler. Müsait olduğum ilk anda deneyeceğim
ekleme:
geçenlerde bir yerde denk geldi bu site> https://www.kodular.io/bir kaç video kaydettim bilgisayara bunlardan yardım alıp, basitte olsa bir şey yapayım dedim :)
eyuperol tarafından 04/Oca/21 20:08 tarihinde düzenlenmiştir -
@eyuperol hocam logcat (log kayıtlarının ekranı) kısmında oluşan hata ile ilgili sana mesaj verir. O mesaja göre arama yapar netten bulabilirsin. Yada forumlarda konu aç. Yada facebook ta android gruplarında sorunu dile getir mutlaka çözüme ulaşırsın.
-
Üşenmemiş, betiklerine kadar yazmış - görsel koymuş ! yav böyle adamlara bayılıyorum yemin ederim... Ellerine, kollarına sağlık hocam.
-
Eline, koluna, diline, dusuncene, klavyene saglik hocam.
Peki dusuk ozellikli bilgisayarlarda android studio'yu verimli olacak sekilde calistirmanin bir yolu var midir? Benim kulusturde guc bela calistirmayi becerdim ama pek uygulama gelistirmeye uygun bir ortam olmadi.
Aslinda basit sekilde (hobi) uygulama gelistirmek icin app inventor iyi ama online ve gorselliginin kotu olmasi biraz kotu, kodular gorsel olarak bir tik daha iyi ama yine online olmasi can sikici.
Yine hobi niyetli oyun gelistirme icin tarayici uzerinden construct 3'u kullandim, epey keyifliydi. Tarayici kullanarak calissada sisteme girip sayfayi bir defa yukledikten sonra internet olmadan da calisabiliyordu (konu disi olacak ama web'de devam etmek isteyenler wasm'a baksin derim).
Yine de gunun sonunda android icin soyle heh diyebilecegim bir seyle henuz karsilasmadim. Sozun ozu tavsiye edebilecegin epey hafif offline gelistirme ortami var mi? Hatta mumkunse atiyorum kotlin sisteme yuklenir, text editorde hiyerarsiye dikkat ederek yazabilirim. Tabi bu surecin de sac bas yolduracak cinsten olmamasi lazim.
Misal bilgisayar icin olmasada telefon icin (iphone) yapilmis super bir uygulama, pythonista. Sunun android surumu olsa hic dusunmez alirdim.
-
Ellerine sağlık.
Bu tarz mesajlarını görünce 2000li yılların başında webhocam yılları geliyor aklıma :) Klasik ASP li güzel yıllar :)
-
@telekom
Hocam, bendeki bilgisayar i5 2. Nesil, 8gb Ram, SSD var. Kısmen zorlanıyorum. Android studio yanında VS yada PS açınca "yeter kasma beni diyor.". Açıkcası hafif bir ortam bulamadım Android çalışırken.
@_PesimisT_
Ahahah ne günlerdi onlar. ASP ile bir şeyler üretmek gayet güzeldi, scripting bir dildi ama gayet basit aşırı katı kuralları olmayan güzel bir yapıydı. Webhocama da çok takılırdık.
-
eline sağlık