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);
}
}