Android Programlama derslerimizin 13. bölümünde sizlerle birlikte basit bir içerik menüsü oluşturmayı öğreneceğiz.
Android uygulamasında ekrandaki bir nesneye uzun basılmasında içerik menüsü karşımıza gelebilir. Menüde genelde listeler de kullanılıyor. Aynı türden nesneler topluluğu olduğu zaman (mesela mektuplar) bir nesneyle bir şey yapmak istiyorsanız, bu nesne için içerik menüsü çağırabilirsiniz. İçerik menüyü daha iyi anlamak için bir örnek oluşturalım. Örnekte TextView için içerik menüsü oluşturalım.
Proje Örneği: Yeni bir proje oluşturalım:
- Project name: P0013_ContextMenu
- Build Target: Android 4.2
- Application name: ContextMenu
- Package name: tr.androidApp.contextmenu
- Create Activity: MainActivity
Main.xml dosyasını açalım ve iki tane TextView oluşturalım.
<?xml version=”1.0″ encoding=”utf-8″?> <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android” android:orientation=”vertical” android:layout_width=”fill_parent” android:layout_height=”fill_parent”> <TextView android:layout_height=”wrap_content” android:textSize=”26sp” android:layout_width=”wrap_content” android:id=”@+id/tvColor” android:layout_marginBottom=”50dp” android:layout_marginTop=”50dp” android:text=”Text color”> </TextView> <TextView android:layout_width=”fill_parent” android:layout_height=”wrap_content” android:textSize=”22sp” android:id=”@+id/tvSize” android:text=”Text size”> </TextView> </LinearLayout>
Birinci TextView için içerik menüsü metninin rengi değişecek. İkinci TextView için metnin boyutu değişecek. İçerik menüsü, bir basit menü oluşturmaya benziyor ama küçük farklılıklarla. İçerik menüsü açıldığında onCreateContextMenu metodu çağırılır. Giriş değişkenler: – ContextMenu buraya menü seçenekleri ekleneceğiz – View– içerik menü çağırdığı nesneyi temsil ediyor – ContextMenu.ContextMenuInfo – ek bilgi içeriyor. Bu aşamada bu özelliği kullanmayacağız. onContextItemSelected metodu onOptionsItemSelected metoduna benziyor. Giriş değişkeni MenuItem – seçtiğiniz menü seçeneği içeriyor. Üçüncü metod registerForContextMenu. Bu metod giriş değişkeni olarak View nesneyi kullanıyor. Bu metod View nesne için içerik menüyü yaratacak. Şimdi kodu yazmak için MainActivity.java’yı açalım. TextView’ü oluşturalım ve bu nesne için içerik menü oluşturmayı belirleyelim.
TextView tvColor, tvSize; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tvColor = (TextView) findViewById(R.id.tvColor); tvSize = (TextView) findViewById(R.id.tvSize); // tvColor ve tvSize icerik menu ulusturuyoruz registerForContextMenu(tvColor); registerForContextMenu(tvSize); }
Şimdi içerik menüsünü nasıl oluşturacağını belirleyeceğiz. Menü seçenekleri oluşturmak için ID’leri kullanacağız.
final int MENU_COLOR_RED = 1; final int MENU_COLOR_GREEN = 2; final int MENU_COLOR_BLUE = 3; final int MENU_SIZE_22 = 4; final int MENU_SIZE_26 = 5; final int MENU_SIZE_30 = 6;
İçerik menüsü seçenekleri oluşturuyoruz.
@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.tvColor: menu.add(0, MENU_COLOR_RED, 0, "Red"); menu.add(0, MENU_COLOR_GREEN, 0, "Green"); menu.add(0, MENU_COLOR_BLUE, 0, "Blue"); break; case R.id.tvSize: menu.add(0, MENU_SIZE_22, 0, "22"); menu.add(0, MENU_SIZE_26, 0, "26"); menu.add(0, MENU_SIZE_30, 0, "30"); break; } }
ID’yi kullanarak hangi View nesne için içerik menü oluşturacağını belirleyeceğiz. Ve ona göre içerik menüyü oluşturacağız. Eğer içerik menü tvColor nesne için çağrılıyorsa o zaman içerik menü seçenekleri renklerin seçeneği içerecek. tvSize nesne için içerik menü seçenekleri metnin boyutları seçeneğini içerecek. Örneklerimizde ID’ler sabittir ( MENU_COLOR_, MENU_SIZE_). Gruplanması ve sıralanmasını kullanmıyoruz o yüzden parametreler sıfıra eşittir. Projeyi kaydettikten sonra çalıştıralım. TextView’ye uzun basıldığında karşımıza içerik menü çıkmalı.
İçerik menü seçeneklerine basıldığında bir şey olmuyor. Çünkü onContextItemSelected metodunda işleticiyi belirtmedik. İşleticiyi ekleyelim:
@Override public boolean onContextItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { // tvColor icin secenekler case MENU_COLOR_RED: tvColor.setTextColor(Color.RED); tvColor.setText("Text color = red"); break; case MENU_COLOR_GREEN: tvColor.setTextColor(Color.GREEN); tvColor.setText("Text color = green"); break; case MENU_COLOR_BLUE: tvColor.setTextColor(Color.BLUE); tvColor.setText("Text color = blue"); break; // tvSize icin secenekler case MENU_SIZE_22: tvSize.setTextSize(22); tvSize.setText("Text size = 22"); break; case MENU_SIZE_26: tvSize.setTextSize(26); tvSize.setText("Text size = 26"); break; case MENU_SIZE_30: tvSize.setTextSize(30); tvSize.setText("Text size = 30"); break; } return super.onContextItemSelected(item); }
ID yardımıyla hangi seçeneğe basıldığını öğreniyoruz. Sonra tvColor için rengini ve tvSize boyutunu değiştiriyoruz. Kaydettikten sonra uygulamayı kontrol edelim. Seçeneklere basıldığı zaman rengi ve boyutu değişmeli.
Tam kodu:
public class MainActivity extends Activity { final int MENU_COLOR_RED = 1; final int MENU_COLOR_GREEN = 2; final int MENU_COLOR_BLUE = 3; final int MENU_SIZE_22 = 4; final int MENU_SIZE_26 = 5; final int MENU_SIZE_30 = 6; TextView tvColor, tvSize; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tvColor = (TextView) findViewById(R.id.tvColor); tvSize = (TextView) findViewById(R.id.tvSize); // tvColor ve tvSize icin icerik menu olusuyoruzregisterForContextMenu(tvColor); registerForContextMenu(tvSize); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.tvColor: menu.add(0, MENU_COLOR_RED, 0, "Red"); menu.add(0, MENU_COLOR_GREEN, 0, "Green"); menu.add(0, MENU_COLOR_BLUE, 0, "Blue"); break; case R.id.tvSize: menu.add(0, MENU_SIZE_22, 0, "22"); menu.add(0, MENU_SIZE_26, 0, "26"); menu.add(0, MENU_SIZE_30, 0, "30"); break; } } @Override public boolean onContextItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { // tvColor icin secenekler case MENU_COLOR_RED: tvColor.setTextColor(Color.RED); tvColor.setText("Text color = red"); break; case MENU_COLOR_GREEN: tvColor.setTextColor(Color.GREEN); tvColor.setText("Text color = green"); break; case MENU_COLOR_BLUE: tvColor.setTextColor(Color.BLUE); tvColor.setText("Text color = blue"); break; // tvSize icin secenekler case MENU_SIZE_22: tvSize.setTextSize(22); tvSize.setText("Text size = 22"); break; case MENU_SIZE_26: tvSize.setTextSize(26); tvSize.setText("Text size = 26"); break; case MENU_SIZE_30: tvSize.setTextSize(30); tvSize.setText("Text size = 30"); break; } return super.onContextItemSelected(item); } }
Bu derste içerik menüsü ve menü seçenekleri oluşturmayı öğrendik. Sonraki derste ekranı, layout’unu kullanarak değil, programlayarak oluşturmayı öğreneceğiz.