Android Action Bar Kullanımı

Merhaba arkadaşlar bu dersimizde Android de Action Bar kullanımını anlatacağım. Action Bar uygulamamızın en üst yada en altında yer alan içinde action itemlerin(Search,add,share vs.. ),activity başlığının,aktivity iconunun yer aldığı bir View’dır.IOS taki NavigationController ın Android deki hali diyebiliriz.

Android 3.0 (Honeycomb) sürümünden sonra kullanılması dahada yaygın bir hal almıştır. Android 3.0 altında kullanmak isteyenler Android Support Library i projelerine dahil etmeleri gerekmektedir. Normalde java classımızı Activity e extends ederiz biliyorsunuz .Android 3.0 altında Action Bar kullanmak isteyenler Activity e extends etmeyip ActionBarActivity e extends ederek devam edeceklerdir.

actionBarEkran

Arkadaşlar ben her zamanki gibi küçük bir uygulama ile konumuzu pekiştirmek istedim. Bu dersin devamı da olacak. Devamında ise ActionBar la birlikte Swipe Tab kullanımını anlatacağım.Kod üzerinde gerekli açıklamaları yapmaya çalıştım. Önerim ise uygulamayı indirip incelemenizdir. Konuyu çok daha iyi anlayacaksınz.Ayrıca içinde google n hazırladığı action bar iconlar da bulunmaktadır.

Öncelikle projeyi oluştururken theme seçiminde Holo Light with Dark Action Bar ile başlayalım ve minimum SDK yı API 11 seçelim.

android_create

Şimdi kodlara geçelim dediğim gibi kod üzerinde gerekli açıklamaları yapmaya çalıştım.

[wpdm_file id=12]

Anasayfa.java

import java.lang.reflect.Field;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.ViewConfiguration;

public class Anasayfa extends Activity{
	// action bar
		private ActionBar actionBar;
		private Menu optionsMenu;
		
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.anasayfa);
		
		actionBar = getActionBar();

		// Action Bar Başlığı saklar
		actionBar.setDisplayShowTitleEnabled(false);

		getOverflowMenu(); // bu Metodun neden kullanıldığını metod içinde anlattım.
		
		// Action Bar İkonu değiştirir
		// actionBar.setIcon(R.drawable.xxx);
		
		//Action Bar Kapatır
		//actionBar.hide();
		
		//Action Bar Background değiştirir
		//actionBar.setBackgroundDrawable(Drawable d);

		//MenuItem item = optionsMenu.findItem(R.id.action_location_found);  //Menüdeki itemlerden birini şeçtik
	    //item.setVisible(false);  //itemi gizlemek için
		//item.setVisible(true);   //gizli itemi açmak için
		
		
	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {//Menüyü oluşturuyoruz
	     this.optionsMenu = menu;

		MenuInflater inflater = getMenuInflater();// inflater herhangi bir view ın java objesine dönüştürülüp düzenlenmesinde yardımcı olur.Burda menü düzenlenmesi için kullanacağız
		inflater.inflate(R.menu.anasayfa_actions, menu);//Xml olarak oluşturduğumuz menü yü alıyoruz

	    return super.onCreateOptionsMenu(menu);
	}
	
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {// Action Bar itemden herhangi biri tıklandığında
	     
		switch (item.getItemId()) {
		
		case R.id.action_settings: //settings iconu tıklandığında
			
			settings();
			
			break;
			
		
		case R.id.action_share: //share iconu
			
			share();
			
			break;
			
		case R.id.action_location_found: //Emülatörde hata veriyor.Gerçek Cihazlarda çalışır.
			
			location();
			
			break;
		case R.id.action_refresh://refresh iconu
			
			refresh();
			
			return true;
		case R.id.action_help://help iconu
			
			help();
			
			break;
			
		default:
			return super.onOptionsItemSelected(item);
		}
		return true;
	}
	
	
	
	public void share(){
		Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); 
	    sharingIntent.setType("text/plain");
	    String shareMesaj = "mobilhanem.com tarafından gönderildi";
	    sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Mesaj Konu");
	    sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareMesaj);
	    startActivity(Intent.createChooser(sharingIntent, "Paylaşmak İçin Seçiniz"));
		
	}
	
	public void settings(){
		Intent myIntent = new Intent(getApplicationContext(), Ayarlar.class);
		startActivity(myIntent);
		
	}

	public void location(){//Google map açıcak q=Ankara ile konumumuzdan ankaraya nasıl gideceğimizi göstericek
		Intent intent = new Intent(android.content.Intent.ACTION_VIEW,Uri.parse("google.navigation:q=Ankara"));
		startActivity(intent);
		
	}
	
	public void help(){
		AlertDialog alertDialog = new AlertDialog.Builder(Anasayfa.this).create();
        alertDialog.setTitle("Mesaj");
        alertDialog.setMessage("Yardıma mı ihtiyaç var?");
        alertDialog.setCancelable(false);
        alertDialog.setButton(RESULT_OK,"Tamam", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        alertDialog.show();
	}
	
	public void refresh(){
		
		setRefreshActionButtonState(true);//progress bar refresh iconla değişecek ve çalışacak .
		
		final Handler handler = new Handler();
		handler.postDelayed(new Runnable() {
		  @Override
		  public void run() {
				setRefreshActionButtonState(false);//3 sn sonra duracak ve refresh iconu geri gelecek. Siz bu arada başka işlemler sunucu bağlantısı vs.. yapabilirsiniz
				
		  }
		}, 3000);
		
	}
	
	public void setRefreshActionButtonState(final boolean refreshing) {
		
		//bu method refresh iteme tıklandığında progress bar gözükmesi için
	    if (optionsMenu != null) {
	        final MenuItem refreshItem = optionsMenu
	            .findItem(R.id.action_refresh);
	        if (refreshItem != null) {
	            if (refreshing) {
	                refreshItem.setActionView(R.layout.actionbar_refresh_progress);
	            } else {
	                refreshItem.setActionView(null);
	            }
	        }
	    }
	}
	
	private void getOverflowMenu() { 
		
		//Arkadaşlar bu method overflow menu için
		//Bazı cihazlarda action bar a sığmayan actionlar açılır menu de deilde cihazın menu buttonuna basınca klasik android options menu gibi açılıyor
		//Bu methodu onCreate içinde çağırarak actionBar a sığmayan action ları overFlow menude gösteriyoruz.
	    try {
	       ViewConfiguration config = ViewConfiguration.get(this);
	       Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
	       if(menuKeyField != null) {
	           menuKeyField.setAccessible(true);
	           menuKeyField.setBoolean(config, false);
	       }
	   } catch (Exception e) {
	       e.printStackTrace();
	   }
	 }
	
	
}

anasayfa_actions.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- Burada actionBar da Gözükmesini istediğimiz itemleri ekliyoruz
*    Her activity için farklı oluşturabiliriz 
*	 veya burda oluşturduğumuz menüyü her activity de kullanabiliriz
*    programsal olarak activity içinden icon ekleyebilir çıkarabiliriz
*
*
*    android:showAsAction="always" ->her durumda action bar da göstermek için
*    android:showAsAction="never"  ->action bar da değil yandaki overflow menüde göstermek için
*    android:showAsAction="ifroom"  ->action bar da yer varsa gösterir yoksa overflow menüde gösterir
 -->
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    
    <item android:id="@+id/action_share"
          android:icon="@drawable/ic_action_share"
          android:title="Paylaş" 
          android:showAsAction="always" />
    
    <item android:id="@+id/action_settings"
          android:icon="@drawable/ic_action_settings"
          android:title="Paylaş" 
          android:showAsAction="always" />
    
   
    <!-- Refresh -->
    <item android:id="@+id/action_refresh"
          android:icon="@drawable/ic_action_refresh"
          android:title="Yenile" 
          android:showAsAction="always" />
    
    
     <!-- Location Found -->
    <item android:id="@+id/action_location_found"
          android:icon="@drawable/ic_action_location_found"
          android:title="Yer"
          android:showAsAction="always" />
    
    <!-- Help -->
    <item android:id="@+id/action_help"
          android:icon="@drawable/ic_action_help"
          android:title="Yardım" 
          android:showAsAction="ifRoom"/>
</menu>

Evet arkadaşlar bu dersimde anlatmak istediklerim bu kadar.Konu içinde anlamadığınız yer yada eklemek istediğiniz kısım olursa çekinmeden yorum bırakabilirsiniz.Birdahaki dersimde Swipe Tab kullanımını anlatacağım ve bu dersin devamı niteliğinde olacak.

Birdahaki dersimizde görüşmek dileğiyle kendinize iyi bakın.

Tüm Android Ders, Proje ve Kaynak Kodlar için tıklayınız.

[wpdm_file id=12] 13

Taha Kırca

iOS & Android & Apple Watch Developer, Mobilhanem.com yazarı, Karadeniz Uşağu, Ordu Sevdalısı

5 Yorum

  • Support Library i projemize dahil etme anlatımı

    Öncelikle SDK Manager çalıştırılıp Support Library dosyalarını indiriyorum.
    Daha sonra projelerimin olduğu yere sağ tıklayarak File->Import diyerek açılan listeden Existing Android Code Into Workspace’i seçiyorum ne Next diyerek ilerliyorum.
    SDK’nın kurulu olduğu dizinden ->extras->android->support->v7->appcompat dizinini seçip Finish diyerek bitiriyorum.
    Bu işlemi yaptıktan sonra projeler arasında support-v7-appcompat adında yeni bir projenin oluştuğunu görüyorum.
    Oluşan bu projenin libs dizinindeki her bir jar dosyasına sağ tıklayarak Build Path->Add to Build Path diyorum.
    Daha sonra bu projeye sağ tıklayıp Build Path->Configure Build Path diyorum.Order and Support tabının altından libs dizini altındaki jar dosyalarının aktif ediyorum ve Android Dependencies’i pasif yapıyorum.Böylece bu projemi bundan sonra başka projelerde referans göstererek kullanabileceğim.Bir kere yap istediğin kadar kullan

    Ekleyeceğimiz projeye sağ tıklayıp Properties->Android kısmındaki Library tabının altından Add diyorum.Böylece bana library olarak ekleyeceğim proje listesini açıyor ve az önce oluşturduğum android-support-v7-appcompat projesini ekliyorum.
    Böylece artık bu projemde bu library’i kullanabileceğim

  • Kaynak kod rar dosyası hatalı.
    actionbar_refresh_progress Dosyasının kaynak kodunu koyabilir misin?

  • Güzel anlatım hocam teşekkürler kodları entegre edeceğim umarım kendi projeme 🙂

  • actionbar daki yazıyı geçiş yaptığımız activity nin adına göre nasıl değiştirbiliriz

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?