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.
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
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
Benim yazdığım projedemi bu sorunla karsılasıorsun yoksa kendi yazdığın uygulamada mı?
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ı
şuan senin dosyanıda denedim aynı sorun devam ediyor
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
Kendi soruma yanıt vereyim 🙂
onActivityCreated metoduyla oluyormuş 🙂
:):)
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?
TabSwipe ile arka plan eklemekten kastınız nedir orasını anlayamadım.
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?
[…] 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 […]