Android Action Bar Tab Swipe Kullanımı

Merhaba arkadaşlar bu dersimizde androidde Action Bar ile birlikte Tab Swipe nasıl kullanılır onu anlatacağım. bu dersim bir önceki Action Bar dersimizin devamı niteliğindedir. Bu derse başlamadan bir önceki dersimi incelemenizi tavsiye ederim.

Öncelilkle şunu belirteyim action bar kullanmak için android 3.0 üzeri sürümde geliştiriyor olmalıyız. 3.0 altında action bar kullanmak için androidin support paketini kullanmamız gerekmektedir.Bunu bir önceki dersimde anlatmıştım.

Arkadaşlar Tabların ne işe yaradığı zaten hepimizin malumu. Kullanıcıyı fazla uğraştırmadan daha fazla içerik göstermeye bir nevi menü görevi görmeye yaramaktadır ve şuan çoğu uygulamada kullanılmaktadır.Bende ufak bir uygulama ile anlatmaya çalıştım.

tabswipe

Uygulama kaynak kodu üzerinde gerekli açıklamaları yapmaya çalıştım. Kaynak kodu indirip incelediğiniz takdirde daha iyi anlayabileceğinizi düşünüyorum.

[wpdm_file id=13]

anasayfa.java



import java.lang.reflect.Field;

import com.mobilhanem.actionbarkullanimi.R;

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.AlertDialog;
import android.app.FragmentTransaction;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.ViewConfiguration;
import android.widget.Toast;

public class Anasayfa extends FragmentActivity implements ActionBar.TabListener{
	// action bar
		private ActionBar actionBar;
		private Menu optionsMenu;
		private ViewPager viewPager;
	    private TabsPager adapter;
	    // Tab başlıkları
	    private String[] tabs = { "Beyaz", "Kırmızı", "Mavi" };
		
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.anasayfa);
		
		//ACTİON BAR İŞLEMLERİ
		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
		
		
		
		//TAB ve SWIPE İŞLEMLERİ
		
        viewPager = (ViewPager) findViewById(R.id.pager); //xml de tanımladığımız pager alıyoruz
        adapter = new TabsPager(getSupportFragmentManager());//TabsPager objesi oluşturuyoruz 
 
        viewPager.setAdapter(adapter); //pager ımızı oluşturduğumuz objeye bağlıyoruz.
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);//ActionBarı tablı kullanmak için   
 
 
        for(int i = 0 ;i<tabs.length;i++){ //Tabları ekliyorum
        	actionBar.addTab(actionBar.newTab().setText(tabs[i]).setTabListener(this)); //Action Barlara tabları ekledik
        }
        

        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { //tablar arasındaki geçişleri dinleyen listener
 
            @Override
            public void onPageSelected(int position) {
                // sayfa değiştiğnde çalışır
                actionBar.setSelectedNavigationItem(position);
                
                //actionBar.setSelectedNavigationItem(2);//son tab ı seçili hale getirir.
                //1. tab 0 index i ile seçilir
            }
 
            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
            }
 
            @Override
            public void onPageScrollStateChanged(int arg0) {
            }
        });
        
    }
 
	
	
	////TabListener İmplements Methodlar
	@Override
	public void onTabSelected(Tab tab, FragmentTransaction ft) {  //Tab seçildiği zaman çalısır
		// TODO Auto-generated method stub
		Toast.makeText(getApplicationContext(), ""+tab.getPosition()+".Tab seçildi", Toast.LENGTH_LONG).show();
		
		//tab.getPosition()  //Hangi tabın seçildiğini anlamak için mesala 1. tab seçildiyse 0 değeri döner 2. tabda 1 ,3.tabda 2 değeri döner
		//tab.setText("deneme"); //seçilen tabın string değerini-adını değiştirmeye yarar
		//tab.setIcon(R.drawable.xx)  tab da icon kullanmak için

	}

	@Override
	public void onTabUnselected(Tab tab, FragmentTransaction ft) {  //Tab seçimi kaldırıldığı zaman 
		// TODO Auto-generated method stub
		
	}

	@Override
	public void onTabReselected(Tab tab, FragmentTransaction ft) {//Seçili tab tekrar seçildiğinde
		// TODO Auto-generated method stub

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

TabPager.java


import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class TabsPager extends FragmentPagerAdapter{
	 
    public TabsPager(FragmentManager fm) {
        super(fm);
    }

	@Override
	public Fragment getItem(int arg0) {
		// TODO Auto-generated method stub
		 switch (arg0) {
	        case 0:
	            // Beyaz fragment activity
	            return new Beyaz();
	        case 1:
	            // Kırmızı fragment activity
	            return new Kirmizi();
	        case 2:
	            // Mavi fragment activity
	            return new Mavi();
	        }
	 
	        return null;
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return 3; //Tab sayımız
	}
 
    
}

Arkadaşlar bu dersi hazırlarken androidhive.info sitesinden faydalandım.Referans olarak yazmak istedim.

Bu dersimde anlatmak istediklerim bu kadar. Kaynak kodu indirip direk projelerinizde kullanabilirsiniz. Sonuçta hazır bir yapı ufak tefek değişiklik ile kendinize uyarlayabilirsiniz.

Anlamadığınız ve ya eklemek istediğiniz bir yer olursa çekinmeden sorabilirsiniz. Bir dahaki dersimizde android custom button yapımı ve ya android xml parse etmeyi anlatabilirim. Sizinde istediğiniz bir ders olursa burdan yorum bırakabilirsiniz.

Ayrıca arkadaşlar en yakın zamanda iOS SWIFT derslerine başlayacağız ve bu şekilde kaynak kodları paylaşarak devam edeceğiz.

[wpdm_file id=13] 2

Taha Kırca

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

13 Yorum

  • mrb hocam tab sekmeleri çalışıyor sayfalara geçtiğini de yazıyor ama sayfalara geçmiyor her sayfaya ayrı isim verdim değişecek mi diye ilk baştaki tab daki sayfayı gösteriyor diyer tab lara bastığımda da geçti yazısı geliyor doğru bir şekilde ama sayfaya gitmiyor neden olabilir

      • senin projenin aynısını yazdım yeniden öğrenmek amaçlı aynı sorun kopyala yapıştır yaptım yine aynı sorun 🙂 sorunun nedeni nedir çok uğraştım olmadı

    • kendi soruma yanıt vereyim
      public void onTabSelected(Tab tab, FragmentTransaction ft) { //Tab seçildiği zaman çalısır
      // TODO Auto-generated method stub
      viewPager.setCurrentItem(tab.getPosition());

      Toast.makeText(getApplicationContext(), “”+tab.getPosition()+”.Tab seçildi”, Toast.LENGTH_LONG).show();

      //tab.getPosition() //Hangi tabın seçildiğini anlamak için mesala 1. tab seçildiyse 0 değeri döner 2. tabda 1 ,3.tabda 2 değeri döner
      //tab.setText(“deneme”); //seçilen tabın string değerini-adını değiştirmeye yarar
      //tab.setIcon(R.drawable.xx) tab da icon kullanmak için

      }
      bu kodda mausla yada parmağınızla ekranı sağa sola kaydırdığınızda sayfalar değişirken tab isimleri üstüne tıklandığında değişmemekteydi viewPager.setCurrentItem(tab.getPosition()); bu kodu eklediğinizde hem kaydırarak sayfa geçişi yapabilir hemde tab üstüne tıklayarak sayfa geçişi yapabilirsiniz kolay gelsin anlatımınız için tşk ederim hocam elinize sağlık

  • slm kolay gelsin hocam Beyaz.java Kirmizi.java ve Mavi.java dosyalarına nasıl activity uygulaması ekleyeceğiz yani reklam olsun forum elemanları olsun bunları activity de yaptığımız gibi nasıl yapacaz nasıl çağıracağız nasıl anlatılır bilmiyorum ama o tab java sayfalarını nasıl kullanacağız

  • Merhaba;
    Ben BlankActivity ile projemi açarak basit bir uygulama yaptım. Şimdi bu projeye tab swipe ile arkaplanlar eklemek istiyorum. Yeni proje oluşturmadan BlankActivity’i SwipeView ile değiştirebilir miyim?

  • Merhabalar,
    Tab swipe’ın normal fragment activity den farkı nedir ve life cylce mantığı nedir? Bu programda tablar arası geçişler ve onların yaşam döngüsü hakkında biraz yorumda bulunabilir misin?

    Syg,

    • İkinci bir sorum da;
      Anasayfa.java’nın en üst kısmında şu kod var;
      public class Anasayfa extends FragmentActivity implements ActionBar.TabListener{

      ActionBar.TabListener nedir burada? Implements işlemi ne işe yarıyor burada?

Haftalık Bülten

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