Pop-Up Menü Oluşturmak
Pop-Up menüler, View'ler ile ilişkilendirilmiş tipik menülerdir. Anchor View'ın altında yer olduğunda veya diğer View'lerin üzerinde görünür. Aşağıdaki durumlarda kullanışlı bir seçenektir. Bunlar;
- İşlemler için, belirli içerik ile alakalı overflow-stil menü tanımlarken ( Gmail'de email başlığı gibi şekil 1)
Şekil 1 Gmail app'den Pop-Up Menü Örneği
NOT: Bu yapı, genellikle seçili itemlerin etkilendiği Context Menü ile aynı değildir. Seçili itemleri etkileyen işlemler tayin etmek için, contextual action mode veya floating context menü kullanınız.
- İkinci kısım komut cümleleri tanımladığınızda( "Add" şeklinde etiketlenmiş ve farklı bir "Add" işlemi için tanımlanmış Pop-Up Menü türetmek gibi )
- Spinner' e benzer, seçimleri kalıcı olarak tutmayan drop-down(aşağı açılır menü) tanımlarken,
NOT: Pop-Up Menü, diğer bir çok özellik gibi Android 3.0 (API Level 11) ile birlikte geliştirilmiştir.
Eğer Pop-Up menünüzü XML içinde tanımlıyorsanız, yapmanız gerekenler aşağıdaki gibidir.
- PopupMenu yü, mevcut uygulamanın Pop-Up menüyle ilişkilendirilecek Context ve View'lerini parametre alacak şekilde kendi yapıcı metodu yardımıyla hazırlayın,
- MenuInflater kullanarak, PopupMenu.getMenu() ile döndürülecek olan Menü nesnesindeki menü kaynağınızı inflate edin. API Level 14'ten itibaren, PopupMenu.inflate() kullanılabilir.
- PopupMenu.show() metodunu çağırın.
Örneğin; android:onClick niteliğiyle oluşturulmuş Pop-Up Menü gösterimi
XML kodu,
- layout/activity_menu.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" tools:context=".MainActivity">
<TextView android:text="@string/hello_world" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_overflow_holo_dark"
android:contentDescription="@string/descr_overflow_button"
android:onClick="showPopup" />
</RelativeLayout>
- menu/actions.xml
<?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">
<item android:id="@+id/new_game"
android:title="new_game"
app:showAsAction="ifRoom"/>
<item android:id="@+id/help"
android:title="help" />
</menu>
- Java kodu
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void showPopup(View v) {
PopupMenu popup = new PopupMenu(this, v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.actions, popup.getMenu());
popup.show();
}
...
API Level 14 ve daha yeni sürümlerde, PopupMenu.inflate() metodu yardımıyla, 2 satırı kombine edebilirsiniz.
Menü, kullanıcını menü alanı dışına tıklamasıyla veya bir item seçmesi ile görevini tamamlar. Bu görevi bitirme (dismissed) olayını, PopupMenu.onDismissListener() metodu ile takip edebilirsiniz.
Pop-Up Menü'de Tıklama Olaylarını Ele Almak
Kullanıcı Menü itemlerinden birini seçtiğinde işlem gerçekleştirmek için, PopupMenu.onMenuItemListener arayüzünü uygulamalı ve bunu PopupMenu'ye setOnMenuItemclickListener() metodunu çağırarak register etmelisiniz. Kullanıcı herhangi bir item seçtiğinde, uygulamanızın arayüzünden sistem onMenuItemClick() geri dönüş metodunu çağırır.
Örnek:
---Yukarıda bahsettiğimiz dizinlerde tanımlanan kaynak dosyalarından sadece java dosyasına eklediğimiz . Pop-Up Menü oluşturduğumuz kodun yerine bu kodu ekliyoruz.
public void showPopup(View v) {
PopupMenu popup = new PopupMenu(this, v);
// This activity implements OnMenuItemClickListener
// popup.setOnMenuItemClickListener();
popup.inflate(R.menu.actions);
popup.show();
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
TextView view1 = (TextView) findViewById(R.id.hello);
view1.setText("changed by Pop_Up menu");
return true;
}
});
}
Örnek Kod'un projesi için Buradan..
Soru ve Görüşleriniz için ise AndroidVeJava