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