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