Bu yazımızda Android de menuyü ele alacağız.

 

Öncelikler Sol taraftaki

Preject panelinden res klasörüne sağ tıklayıp New > Android Resource Directory Aşağıdaki görüntüde olduğu gibi Directory name kısmına aynı göründüğü gibi menu yazın

 

Ardından menu klasörünün üstüne sağ tıklayıp new > Menu Resource File

şimdi menuyü tasarlayalım.

<?xml version="1.0" encoding="utf-8"?>
<menu 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"
    tools:context=".MainActivity">
    <item
        android:id="@+id/mn_Ara"
        android:icon="@android:drawable/ic_menu_call"
        android:title="Ara"
        app:showAsAction="always" />
    <item
        android:id="@+id/mnAc"
        android:title="Aç">
        <menu>
            <item
                android:id="@+id/mnHesapMakinasi"
                android:title="Hesap Makinası" />
            <item
                android:id="@+id/mnGaleri"
                android:title="Galeri" />
        </menu>
    </item>
    <item
        android:id="@+id/mnBosMEnu"
        android:icon="@android:drawable/sym_call_incoming"
        android:title="Boş Menu"
        app:showAsAction="never" />
    <item
        android:id="@+id/mnKapat"
        android:icon="@android:drawable/ic_menu_delete"
        android:title="Çıkış"
        app:showAsAction="withText" />
</menu>

Menüyü tasarladık şimdi ise bunu yukarıda da context ile belirttiğimiz gibi MainActivity’e koyalım.

MainActivity de gelmeden önce binding işlemi yapmamız gerekiyor bunun için
Android Data Binding ile Kullanıcı Arayüzü Kodlamayı Kolaylaştırın

buradaki ilemleri yapmanız gerekiyor. Yine MainAcrivity gelmeden önce temamızın Action bar açık olmasına dikkat edelim eğer temamızda action bar kapalıysa project panelinden values altında themes kısmına gelip  NoActionBar kısmını kaldırıyorum.temamda   başlık  kısmı  görünecek  eğer  karanlık  mod  için  ayrı  tema  kullanıyorsanız  ordan  da kaldırmanız gerekecektir.

kaldırdığınızda hala görünmüyorsa aşağıdaki resimde görünen işlemi uygulayabilirsiniz.

şimdi MainAcrivity’e geçebiliriz.

menuyu kullanabilmemiz için 2 tane method override etmemiz gerekiyor.  bunun için  MainActivity class’ının içinde sağ tuş > ,Generate.. > Override Methods diyerek  yada Ctrl+O kısayolunu kullarak onCreateOptionsMenu ve onOptionsItemSelected metodlarını ekliyoruz. yada elimizlede yazabiliriz işte o metodlar.

  @Override
    public boolean onCreateOptionsMenu(Menu menu) {       
        return super.onCreateOptionsMenu(menu);
    }
 @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        return super.onOptionsItemSelected(item);
    }

onCreateOptionsMenu aşağıdaki tek tatırlık kodu yazyoruz.

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_adi, menu); //Burada oluşturduğumuz xml dosyasını menu'ye eşitliyoruz
        return super.onCreateOptionsMenu(menu);
    }

onOptionsItemSelected bu metad ile tıkladığımız menuyu yakalıyoruz.

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {

        if (item.getItemId() == R.id.mn_Ara) { //Buradaki item.getItemId() tıklanan menunun idsini alıyor R.id.mn_Ara idsine eşit olup olmadığını kontrol ediyor buradaki idler java tarafından oluşturuluyor.

            Intent intent = new Intent(Intent.ACTION_DIAL); // Burada Arama Ekranı için bir inten tanımlıyoruz
            intent.setData(Uri.parse("tel:+905555555555")); // burada ise o intente bilgi gönderiyoruz. putextra gibi düşünebiliriz ancak burda uri olarak gönderiyoruz.
            startActivity(intent);// burada da intenti başlatıyoruz

        } else if (item.getItemId() == R.id.mnHesapMakinasi) {
            Intent intent = new Intent(); // Burada Arama Ekranı için bir inten tanımlıyoruz
            intent.setAction(Intent.ACTION_MAIN); //bu kod ile ana eylemi belirtiyoruz
            intent.addCategory(Intent.CATEGORY_APP_CALCULATOR); //Kategoriyi belirliyoruz.
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // Hesapmakinasını yeni görev olarak açıyor
            startActivity(intent);// burada ise intenti başlatıyor
        } else if (item.getItemId() == R.id.mnBosMEnu) {
            Toast.makeText(this, "Toast Mesaj Çıkarmak için yaptım", Toast.LENGTH_SHORT).show();
        } else if (item.getItemId() == R.id.mnKapat) {
            finish(); /// uygulamayı kapadım

        }
        return super.onOptionsItemSelected(item);
    }

böylelikle menumüzü hazırladık ve ekranda ekranda gösterdik

MainActivity tam kodlar


import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

import com.turbosan.egitim.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {

    private ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        View view = binding.getRoot();
        setContentView(view);
        binding.helloWord.setText("Merhaba Dünya");

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_adi, menu); //Burada oluşturduğumuz xml dosyasını menu'ye eşitliyoruz
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {

        if (item.getItemId() == R.id.mn_Ara) { //Buradaki item.getItemId() tıklanan menunun idsini alıyor R.id.mn_Ara idsine eşit olup olmadığını kontrol ediyor buradaki idler java tarafından oluşturuluyor.

            Intent intent = new Intent(Intent.ACTION_DIAL); // Burada Arama Ekranı için bir inten tanımlıyoruz
            intent.setData(Uri.parse("tel:+905555555555")); // burada ise o intente bilgi gönderiyoruz. putextra gibi düşünebiliriz ancak burda uri olarak gönderiyoruz.
            startActivity(intent);// burada da intenti başlatıyoruz

        } else if (item.getItemId() == R.id.mnHesapMakinasi) {
            Intent intent = new Intent(); // Burada Arama Ekranı için bir inten tanımlıyoruz
            intent.setAction(Intent.ACTION_MAIN); //bu kod ile ana eylemi belirtiyoruz
            intent.addCategory(Intent.CATEGORY_APP_CALCULATOR); //Kategoriyi belirliyoruz.
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // Hesapmakinasını yeni görev olarak açıyor
            startActivity(intent);// burada ise intenti başlatıyor
        } else if (item.getItemId() == R.id.mnBosMEnu) {
            Toast.makeText(this, "Toast Mesaj Çıkarmak için yaptım", Toast.LENGTH_SHORT).show();
        } else if (item.getItemId() == R.id.mnKapat) {
            finish(); /// uygulamayı kapadım

        }
        return super.onOptionsItemSelected(item);
    }
}