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.
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.
Ş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