JavaveAndroidHakkında

Android Yazılım geliştirme konusunda sürekli bilgi akışı sağlayan, soru-cevaplar ile öğrenme gerçekleştirmeyi amaçlayan bir eğitim süreci planlıyoruz.

Contextual action mode etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Contextual action mode etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

13 Şubat 2015 Cuma

Android - Menu Kavramı ListView veya GridView'de Yığın Contextual Actions Aktif Etmek - 6

00:44

ListView veya GirdView'de Yığın Contextual Actions Aktif Etmek


    Eğer ListView veya GridView içinde item setiniz var ise ve kullanıcının yığın işlemleri (batch actions) gerçekleştirmesini istiyorsanız şunları yapmalısınız;

  • AbsListView.MultiChoiceModeListener() metodunu arayüze uygulamalı ve bunu setMultiChoiceModeListener() metodu ile view gruba ayarlamalısınız. Listener's dönüş metodunda, contextual action bar için, action itemlere yapılan tıklamalara verilecek cevap işlemleri belirleyebilir ve diğer ActionMode.Callback arayüzünden miras alınan(inherited)dönüş metotlarını işleme alabilirsiniz.
  • setChoiceMode() metodunu CHOICE_MODE_MULTIPLE_MODAL parametresi ile çağırın.

Örnek Kod:



ListView listView = getListView();
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {

    @Override
    public void onItemCheckedStateChanged(ActionMode mode, int position,
                                          long id, boolean checked) {
        // Here you can do something when items are selected/de-selected,
        // such as update the title in the CAB
    }

    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        // Respond to clicks on the actions in the CAB
        switch (item.getItemId()) {
            case R.id.menu_delete:
                deleteSelectedItems();
                mode.finish(); // Action picked, so close the CAB
                return true;
            default:
                return false;
        }
    }

    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        // Inflate the menu for the CAB
        MenuInflater inflater = mode.getMenuInflater();
        inflater.inflate(R.menu.context, menu);
        return true;
    }

    @Override
    public void onDestroyActionMode(ActionMode mode) {
        // Here you can make any necessary updates to the activity when
        // the CAB is removed. By default, selected items are deselected/unchecked.
    }

    @Override
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        // Here you can perform updates to the CAB due to
        // an invalidate() request
        return false;
    }
});

    Hepsi bu kadar. Şimdi kullanıcı ne zaman uzun tıklama ile listeden bir item seçer ise, sistem onCreateActionMode() metodun çağıracak ve tanımlanmış olan işlemler ile birlikte contextual aciton bar görüntülenecektir. Contextual action bar görünür durumda iken kullanıcı diğer itemleri de seçebilecektir.

   Contextual işlemler(actions) sık kullanılan action itemlerini sağladığı bazı durumlarda, kullanıcının itemleri seçmesi için checkbox eklemek veya benzer UI elemanları eklemek isteyebilirsiniz. Çünkü, sık kullanılan bu itemler uzun tıklama sonucu çoğu zaman görünmeyebilir. Kullanıcı checkbox'ı seçtiği zaman, setItemChecked() metodu ile işaretlenmiş durumlarını sıralı list itemlere göre ayarlayarak contextual action modu çağırabilirsiniz.

Soru ve Görüşleriniz için: AndroidVeJava

9 Şubat 2015 Pazartesi

Android - Menu Kavramı Kişisel View'ler için Contextual Action Modu Aktif Etmek - 5

23:49

Kişisel View'ler İçin Contextual Action Mode

   
Orijinal Döküman

Sadece kullanıcının seçtiği özel view'ler için contextual action mod çağırmak için aşağıdaki işlemleri yapmalısınız;

  • ActionMode.Callback metodunu uygularsınız. Bu dönüş metodunda contextual action bar için, actions itemlere tıklandığında verilecek cevap işlemlerini belirleyebilir ve action mod için diğer lifecycle eventleri işleme alabilirsiniz.
  • Action bar'ı görüntülemek isterseniz startActionMode() metodunu çağırmalısınız.(örneğin kullanıcı uzun süreli tıklama olayını gerçekleştirirse)

Örneğin:

1. ActionMode.Callback metodunu arayüze uyguluyoruz.


private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {

    // Called when the action mode is created; startActionMode() was called
    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        // Inflate a menu resource providing context menu items
        MenuInflater inflater = mode.getMenuInflater();
        inflater.inflate(R.menu.context_menu, menu);
        return true;
    }

    // Called each time the action mode is shown. Always called after onCreateActionMode, but
    // may be called multiple times if the mode is invalidated.
    @Override
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        return false; // Return false if nothing is done
    }

    // Called when the user selects a contextual menu item
    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_share:
                shareCurrentItem();
                mode.finish(); // Action picked, so close the CAB
                return true;
            default:
                return false;
        }
    }

    // Called when the user exits the action mode
    @Override
    public void onDestroyActionMode(ActionMode mode) {
        mActionMode = null;
    }
};

    Bu eylem geri dönüş metotların her biri olay ile ilişkili ActionMode nesnesine parametre geçirmesi dışında neredeyse OptionsMenu geri dönüş metotları ile benzerdirler. ActionMode API kullanarak CAB'da, setTitle() ve setSubtitle() metotları yardımıyla başlık ve alt başlıkları gibi çeşitli değişiklikleri gerçekleştirebilirsiniz.( ne kadar item seçildiğini göstermek için kullanışlı bir araçtır)


2. startActionMode() metodunu çağırarak contextual action modu uygun olduğu anda, örneğin View'e uzun süreli tıklanma gerçekleşmesi gibi durumlarda aktif edebilirsiniz.


someView.setOnLongClickListener(new View.OnLongClickListener() {
// Called when the user long-clicks on someView
public boolean onLongClick(View view) {
        if (mActionMode != null) {
        return false;
        }

        // Start the CAB using the ActionMode.Callback defined above
        mActionMode = getActivity().startActionMode(mActionModeCallback);
        view.setSelected(true);
        return true;
        }
        });



    startActionMode() metodunu çağırdığınızda, sistem oluşturulmuş olan ActionMode'a döner. Bu dönüşü üye değişkene aktarırken, diğer olaylara (eventlere) cevap verildiğinde contextual action bar'da değişiklik yapabilirsiniz. Yukarıdaki ActionMode örneğinde, AcitonMode örneği hali hazırda oluşturulmuş ise üyenin null değere sahip olup olmadığını kontrol ederek yeniden oluşturulmadığından emin olmak için kullanılmıştır.

8 Şubat 2015 Pazar

Android - Menu Kavramı Context Menu Oluşturmak - 4

22:56

Context Menü (İçeriğe has menü ) Oluşturmak

Orijinal Döküman

    Menü kavramına giriş yaptığımız yazımızda kısaca değindiğimiz Context Menu kavramını bu bölümde daha detaylı olarak ele alacağız. Ben de sizler gibi bu konuyu en iyi öğrenebileceğim kaynak olan Developer.android.com adresini gün içinde defalarca ziyaret ederek hem kendim, hem de sizlerin bu kaynağın Türkçeleştirilmiş hâline erişerek bu işi öğrenmemizi amaçladığımı da tekrardan buradan aktarmak isterim.

     Contextual Menü, UI içindeki Context Frame veya belirli itemleri etkileyecek menü işlemleri sağlar. Herhangi bir View için Contextual Menü tanımlaması yapabilirsiniz ama, bu özellik sıklıkla kullanıcının her bir item için doğrudan işlem yapabileceği ListView ve GridView ya da diğer view koleksiyonları için kullanılır. 


    Contextual işlemleri sağlamak için 2 yöntem vardır. Bunlar;

  • Floating Context Menü: Menü, kullanıcının uzun süreli dokunmaları sonucu diyaloglar ile benzer şekilde floating list menü şeklinde görünür. Kullanıcılar aynı anda sadece bir item için contextual işlem gerçekleştirebilir.
  • Contextual Action Mode: Bu mod, ekranın üst kısmında seçili itemlerin etkileneceği işlem listesini görüntüleyen contextual action bar bir ActionMode uygulamasıdır. Bu mod aktif olduğunda (uygulamanız izin veriyorsa) aynı anda birden fazla seçili olan menü itemi için işlem yapılmasını sağlar.
NOT: Contextual Action Mod Android 3.0 ve daha yeni sürümler için sağlanır ve contextual actions gösterimi için tercih edilen bir tekniktir. Android 3.0'dan daha eski sürümler için bir uygulama geliştiriyorsanız, floating contextual menü özelliğini tercih etmeniz gerekir.


Floating Contextual Menü Oluşturmak

    Floating Context Menü oluşturmak için, 

  1. registerForContextMenu() metodu aracılığıyla ilişkilendirilmiş Context Menü View'ini Register edip ardından bunun View'e geçirmelisiniz. Aktivitiniz ListView veya GridView seçeneklerinden birini kullanıyorsanız ve her itemin aynı context menüyü sağlamasını istiyorsanız, Context Menü için tüm itemleri register edip ListView veya GridView'leri  registerForContextMenu() 'ye parametre olarak geçmelisiniz.
  2. onCreateContextMenu() metodunu Aktivitinize veya Fragment'inize uygulayın. Register edilen view'ler uzun-tıklama olayını aldıklarında, sistem onCreateContextMenu() metodu sistem tarafından çağrılır. Bu metot her zaman menu resource'nin inflate edildiği ve menü itemlerinin tanımlandığı yerdir.

Örnek Kod:

 @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
                                    ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.context_menu, menu);
    }
    

    MenuInflater size, menu resource'de tanımlı olan context menüyü ekranda gösterme imkânı sağlar. Geri dönüş metodu parametreleri Context Menü'de yer alan ve kullanıcını seçtiği View'leri içerir. ContextMenuInfo nesnesi, seçili menü itemleri hakkında ek bilgiler sağlar. Eğer aktivitiniz'de yer alan viewlerın her biri farklı context menü sağlıyorsa, hangi context menü'nün gösterileceğine (inflate) karar verebilmek için bu parametreleri kullanmalısınız.

    3. onContextItemSelected() metodunu uygulayın ( implemente edin). Kullanıcı menü itemini seçtiğinde, belirlemiş olduğunuz uygun işlemi gerçekleştirmek için sistem bu metodu çağıracaktır.


Örnek Kod:

   @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
        switch (item.getItemId()) {
            case R.id.edit:
                editNote(info.id);
                return true;
            case R.id.delete:
                deleteNote(info.id);
                return true;
            default:
                return super.onContextItemSelected(item);
        }
    }

     getItemId() metodu, XML menü resource'de "android:id" niteliği ile belirlemiş olduğunuz ve seçilmiş olan menü itemi için benzersiz olan ID'yi sorgular. Menü itemi başarı ile ele aldığınızda, dönüş değeri true olur. Menü itemi ele alamadığımızda ise menü itemleri superclass implementetion'a geçirmelisiniz. Aktivitiniz fragment içeriyorsa, bu geri dönüşü ilk olarak aktiviti alır. Ele alınmadığı durumda superclass çağırdığımızda, herhangi bir anda true ya da false değeri dönene kadar sistem olayları her fragment için tek tek geçirir.

     android.app.fragment ve Aktiviti için varsayılan dönüş değeri false'dir, bu nedenle Menü itemi başarılı bir şekilde ele alamadığınızda her zaman superclass metodunu çağırmalısınız.


Contextual Action Mode Aktif Etmek

    Contextual Action Mode, contextual işlemler uygulayan kullanıcı işlemlerine odaklandığı ActionMode'un sistem uygulamasıdır. Kullanıcı, item seçerek bu modu aktif ettiğinde, contextual action bar ekranın üst kısmında görünür ve seçili item için kullanıcının gerçekleştirebileceği işlemleri sunar. Eğer geliştirici olarak izin sağlarsanız bu mod aktif olduğunda, kullanıcı birden fazla item seçmek, bırakmak ve aktiviti ile bunları taşımak (yine sizin müsade ettiğiniz kadarıyla) gibi işlemleri yapabilir. Action mode pasif olduğunda ve contextual action bar, kullanıcı seçmiş olduğu itmeleri bıraktığında veya BACK butona tıkladığında veya bar'ın sol tarafında yer alan Done işlemini seçtiğinde yukarıda kaybolur. 

     NOT: Contextual Action Bar, action bar ile ilişkilendirilmiş olmak zorunda değildir. Bu iki birim, contextual action bar, action barın üzerine gelse de birbirinden bağımsız çalışmaktadır.


     Eğer Android 3.0 ve daha yeni sürümler için geliştirme yapıyorsanız, floating contextual menü yerine her zaman contextual işlemler için contextual action mod'u kullanmalısınız. 

     Contextual Actions sağlayan view'ler için, contextual action mod'u aşağıdaki durumlardan biri veya her ikisi için çağırmalısınız.
  • Kullanıcı View'e uzun süre tıklama işlemini gerçekleştirirse.
  • Kullanıcı View içerisinde check box'a veya benzer bir UI bileşenin işaretlerse.

    Uygulamanızın contextual action mod'u nasıl çağıracağı ve her bir işlem için nasıl davranacağı sizin tasarımınıza bağlıdır. Temel olarak iki tasarım vardır:

  • Kişisel, isteğe bağlı viewlerin contextual işlemleri için,
  • ListView veya GridView içinde yer alan item gruplarında contextual işlemler yığını için.           (kullanıcının birden fazla item seçmesine izin verip, tamamı için tek bir işlem yapmasını sağlamak için)

    Bir sonraki Yazımızda ise her bir senaryo için gerekli düzenlemeleri tanımlamaktadır.

Görüşmek üzere..

Soru Ve Görüşlerinizi için: JavaVeAndroid




Contextual action mode etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Contextual action mode etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

13 Şubat 2015 Cuma

Android - Menu Kavramı ListView veya GridView'de Yığın Contextual Actions Aktif Etmek - 6

ListView veya GirdView'de Yığın Contextual Actions Aktif Etmek


    Eğer ListView veya GridView içinde item setiniz var ise ve kullanıcının yığın işlemleri (batch actions) gerçekleştirmesini istiyorsanız şunları yapmalısınız;

  • AbsListView.MultiChoiceModeListener() metodunu arayüze uygulamalı ve bunu setMultiChoiceModeListener() metodu ile view gruba ayarlamalısınız. Listener's dönüş metodunda, contextual action bar için, action itemlere yapılan tıklamalara verilecek cevap işlemleri belirleyebilir ve diğer ActionMode.Callback arayüzünden miras alınan(inherited)dönüş metotlarını işleme alabilirsiniz.
  • setChoiceMode() metodunu CHOICE_MODE_MULTIPLE_MODAL parametresi ile çağırın.

Örnek Kod:



ListView listView = getListView();
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {

    @Override
    public void onItemCheckedStateChanged(ActionMode mode, int position,
                                          long id, boolean checked) {
        // Here you can do something when items are selected/de-selected,
        // such as update the title in the CAB
    }

    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        // Respond to clicks on the actions in the CAB
        switch (item.getItemId()) {
            case R.id.menu_delete:
                deleteSelectedItems();
                mode.finish(); // Action picked, so close the CAB
                return true;
            default:
                return false;
        }
    }

    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        // Inflate the menu for the CAB
        MenuInflater inflater = mode.getMenuInflater();
        inflater.inflate(R.menu.context, menu);
        return true;
    }

    @Override
    public void onDestroyActionMode(ActionMode mode) {
        // Here you can make any necessary updates to the activity when
        // the CAB is removed. By default, selected items are deselected/unchecked.
    }

    @Override
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        // Here you can perform updates to the CAB due to
        // an invalidate() request
        return false;
    }
});

    Hepsi bu kadar. Şimdi kullanıcı ne zaman uzun tıklama ile listeden bir item seçer ise, sistem onCreateActionMode() metodun çağıracak ve tanımlanmış olan işlemler ile birlikte contextual aciton bar görüntülenecektir. Contextual action bar görünür durumda iken kullanıcı diğer itemleri de seçebilecektir.

   Contextual işlemler(actions) sık kullanılan action itemlerini sağladığı bazı durumlarda, kullanıcının itemleri seçmesi için checkbox eklemek veya benzer UI elemanları eklemek isteyebilirsiniz. Çünkü, sık kullanılan bu itemler uzun tıklama sonucu çoğu zaman görünmeyebilir. Kullanıcı checkbox'ı seçtiği zaman, setItemChecked() metodu ile işaretlenmiş durumlarını sıralı list itemlere göre ayarlayarak contextual action modu çağırabilirsiniz.

Soru ve Görüşleriniz için: AndroidVeJava

9 Şubat 2015 Pazartesi

Android - Menu Kavramı Kişisel View'ler için Contextual Action Modu Aktif Etmek - 5

Kişisel View'ler İçin Contextual Action Mode

   
Orijinal Döküman

Sadece kullanıcının seçtiği özel view'ler için contextual action mod çağırmak için aşağıdaki işlemleri yapmalısınız;

  • ActionMode.Callback metodunu uygularsınız. Bu dönüş metodunda contextual action bar için, actions itemlere tıklandığında verilecek cevap işlemlerini belirleyebilir ve action mod için diğer lifecycle eventleri işleme alabilirsiniz.
  • Action bar'ı görüntülemek isterseniz startActionMode() metodunu çağırmalısınız.(örneğin kullanıcı uzun süreli tıklama olayını gerçekleştirirse)

Örneğin:

1. ActionMode.Callback metodunu arayüze uyguluyoruz.


private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {

    // Called when the action mode is created; startActionMode() was called
    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        // Inflate a menu resource providing context menu items
        MenuInflater inflater = mode.getMenuInflater();
        inflater.inflate(R.menu.context_menu, menu);
        return true;
    }

    // Called each time the action mode is shown. Always called after onCreateActionMode, but
    // may be called multiple times if the mode is invalidated.
    @Override
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        return false; // Return false if nothing is done
    }

    // Called when the user selects a contextual menu item
    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_share:
                shareCurrentItem();
                mode.finish(); // Action picked, so close the CAB
                return true;
            default:
                return false;
        }
    }

    // Called when the user exits the action mode
    @Override
    public void onDestroyActionMode(ActionMode mode) {
        mActionMode = null;
    }
};

    Bu eylem geri dönüş metotların her biri olay ile ilişkili ActionMode nesnesine parametre geçirmesi dışında neredeyse OptionsMenu geri dönüş metotları ile benzerdirler. ActionMode API kullanarak CAB'da, setTitle() ve setSubtitle() metotları yardımıyla başlık ve alt başlıkları gibi çeşitli değişiklikleri gerçekleştirebilirsiniz.( ne kadar item seçildiğini göstermek için kullanışlı bir araçtır)


2. startActionMode() metodunu çağırarak contextual action modu uygun olduğu anda, örneğin View'e uzun süreli tıklanma gerçekleşmesi gibi durumlarda aktif edebilirsiniz.


someView.setOnLongClickListener(new View.OnLongClickListener() {
// Called when the user long-clicks on someView
public boolean onLongClick(View view) {
        if (mActionMode != null) {
        return false;
        }

        // Start the CAB using the ActionMode.Callback defined above
        mActionMode = getActivity().startActionMode(mActionModeCallback);
        view.setSelected(true);
        return true;
        }
        });



    startActionMode() metodunu çağırdığınızda, sistem oluşturulmuş olan ActionMode'a döner. Bu dönüşü üye değişkene aktarırken, diğer olaylara (eventlere) cevap verildiğinde contextual action bar'da değişiklik yapabilirsiniz. Yukarıdaki ActionMode örneğinde, AcitonMode örneği hali hazırda oluşturulmuş ise üyenin null değere sahip olup olmadığını kontrol ederek yeniden oluşturulmadığından emin olmak için kullanılmıştır.

8 Şubat 2015 Pazar

Android - Menu Kavramı Context Menu Oluşturmak - 4

Context Menü (İçeriğe has menü ) Oluşturmak

Orijinal Döküman

    Menü kavramına giriş yaptığımız yazımızda kısaca değindiğimiz Context Menu kavramını bu bölümde daha detaylı olarak ele alacağız. Ben de sizler gibi bu konuyu en iyi öğrenebileceğim kaynak olan Developer.android.com adresini gün içinde defalarca ziyaret ederek hem kendim, hem de sizlerin bu kaynağın Türkçeleştirilmiş hâline erişerek bu işi öğrenmemizi amaçladığımı da tekrardan buradan aktarmak isterim.

     Contextual Menü, UI içindeki Context Frame veya belirli itemleri etkileyecek menü işlemleri sağlar. Herhangi bir View için Contextual Menü tanımlaması yapabilirsiniz ama, bu özellik sıklıkla kullanıcının her bir item için doğrudan işlem yapabileceği ListView ve GridView ya da diğer view koleksiyonları için kullanılır. 


    Contextual işlemleri sağlamak için 2 yöntem vardır. Bunlar;

  • Floating Context Menü: Menü, kullanıcının uzun süreli dokunmaları sonucu diyaloglar ile benzer şekilde floating list menü şeklinde görünür. Kullanıcılar aynı anda sadece bir item için contextual işlem gerçekleştirebilir.
  • Contextual Action Mode: Bu mod, ekranın üst kısmında seçili itemlerin etkileneceği işlem listesini görüntüleyen contextual action bar bir ActionMode uygulamasıdır. Bu mod aktif olduğunda (uygulamanız izin veriyorsa) aynı anda birden fazla seçili olan menü itemi için işlem yapılmasını sağlar.
NOT: Contextual Action Mod Android 3.0 ve daha yeni sürümler için sağlanır ve contextual actions gösterimi için tercih edilen bir tekniktir. Android 3.0'dan daha eski sürümler için bir uygulama geliştiriyorsanız, floating contextual menü özelliğini tercih etmeniz gerekir.


Floating Contextual Menü Oluşturmak

    Floating Context Menü oluşturmak için, 

  1. registerForContextMenu() metodu aracılığıyla ilişkilendirilmiş Context Menü View'ini Register edip ardından bunun View'e geçirmelisiniz. Aktivitiniz ListView veya GridView seçeneklerinden birini kullanıyorsanız ve her itemin aynı context menüyü sağlamasını istiyorsanız, Context Menü için tüm itemleri register edip ListView veya GridView'leri  registerForContextMenu() 'ye parametre olarak geçmelisiniz.
  2. onCreateContextMenu() metodunu Aktivitinize veya Fragment'inize uygulayın. Register edilen view'ler uzun-tıklama olayını aldıklarında, sistem onCreateContextMenu() metodu sistem tarafından çağrılır. Bu metot her zaman menu resource'nin inflate edildiği ve menü itemlerinin tanımlandığı yerdir.

Örnek Kod:

 @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
                                    ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.context_menu, menu);
    }
    

    MenuInflater size, menu resource'de tanımlı olan context menüyü ekranda gösterme imkânı sağlar. Geri dönüş metodu parametreleri Context Menü'de yer alan ve kullanıcını seçtiği View'leri içerir. ContextMenuInfo nesnesi, seçili menü itemleri hakkında ek bilgiler sağlar. Eğer aktivitiniz'de yer alan viewlerın her biri farklı context menü sağlıyorsa, hangi context menü'nün gösterileceğine (inflate) karar verebilmek için bu parametreleri kullanmalısınız.

    3. onContextItemSelected() metodunu uygulayın ( implemente edin). Kullanıcı menü itemini seçtiğinde, belirlemiş olduğunuz uygun işlemi gerçekleştirmek için sistem bu metodu çağıracaktır.


Örnek Kod:

   @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
        switch (item.getItemId()) {
            case R.id.edit:
                editNote(info.id);
                return true;
            case R.id.delete:
                deleteNote(info.id);
                return true;
            default:
                return super.onContextItemSelected(item);
        }
    }

     getItemId() metodu, XML menü resource'de "android:id" niteliği ile belirlemiş olduğunuz ve seçilmiş olan menü itemi için benzersiz olan ID'yi sorgular. Menü itemi başarı ile ele aldığınızda, dönüş değeri true olur. Menü itemi ele alamadığımızda ise menü itemleri superclass implementetion'a geçirmelisiniz. Aktivitiniz fragment içeriyorsa, bu geri dönüşü ilk olarak aktiviti alır. Ele alınmadığı durumda superclass çağırdığımızda, herhangi bir anda true ya da false değeri dönene kadar sistem olayları her fragment için tek tek geçirir.

     android.app.fragment ve Aktiviti için varsayılan dönüş değeri false'dir, bu nedenle Menü itemi başarılı bir şekilde ele alamadığınızda her zaman superclass metodunu çağırmalısınız.


Contextual Action Mode Aktif Etmek

    Contextual Action Mode, contextual işlemler uygulayan kullanıcı işlemlerine odaklandığı ActionMode'un sistem uygulamasıdır. Kullanıcı, item seçerek bu modu aktif ettiğinde, contextual action bar ekranın üst kısmında görünür ve seçili item için kullanıcının gerçekleştirebileceği işlemleri sunar. Eğer geliştirici olarak izin sağlarsanız bu mod aktif olduğunda, kullanıcı birden fazla item seçmek, bırakmak ve aktiviti ile bunları taşımak (yine sizin müsade ettiğiniz kadarıyla) gibi işlemleri yapabilir. Action mode pasif olduğunda ve contextual action bar, kullanıcı seçmiş olduğu itmeleri bıraktığında veya BACK butona tıkladığında veya bar'ın sol tarafında yer alan Done işlemini seçtiğinde yukarıda kaybolur. 

     NOT: Contextual Action Bar, action bar ile ilişkilendirilmiş olmak zorunda değildir. Bu iki birim, contextual action bar, action barın üzerine gelse de birbirinden bağımsız çalışmaktadır.


     Eğer Android 3.0 ve daha yeni sürümler için geliştirme yapıyorsanız, floating contextual menü yerine her zaman contextual işlemler için contextual action mod'u kullanmalısınız. 

     Contextual Actions sağlayan view'ler için, contextual action mod'u aşağıdaki durumlardan biri veya her ikisi için çağırmalısınız.
  • Kullanıcı View'e uzun süre tıklama işlemini gerçekleştirirse.
  • Kullanıcı View içerisinde check box'a veya benzer bir UI bileşenin işaretlerse.

    Uygulamanızın contextual action mod'u nasıl çağıracağı ve her bir işlem için nasıl davranacağı sizin tasarımınıza bağlıdır. Temel olarak iki tasarım vardır:

  • Kişisel, isteğe bağlı viewlerin contextual işlemleri için,
  • ListView veya GridView içinde yer alan item gruplarında contextual işlemler yığını için.           (kullanıcının birden fazla item seçmesine izin verip, tamamı için tek bir işlem yapmasını sağlamak için)

    Bir sonraki Yazımızda ise her bir senaryo için gerekli düzenlemeleri tanımlamaktadır.

Görüşmek üzere..

Soru Ve Görüşlerinizi için: JavaVeAndroid




Contextual action mode etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Contextual action mode etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

13 Şubat 2015 Cuma

Android - Menu Kavramı ListView veya GridView'de Yığın Contextual Actions Aktif Etmek - 6

ListView veya GirdView'de Yığın Contextual Actions Aktif Etmek


    Eğer ListView veya GridView içinde item setiniz var ise ve kullanıcının yığın işlemleri (batch actions) gerçekleştirmesini istiyorsanız şunları yapmalısınız;

  • AbsListView.MultiChoiceModeListener() metodunu arayüze uygulamalı ve bunu setMultiChoiceModeListener() metodu ile view gruba ayarlamalısınız. Listener's dönüş metodunda, contextual action bar için, action itemlere yapılan tıklamalara verilecek cevap işlemleri belirleyebilir ve diğer ActionMode.Callback arayüzünden miras alınan(inherited)dönüş metotlarını işleme alabilirsiniz.
  • setChoiceMode() metodunu CHOICE_MODE_MULTIPLE_MODAL parametresi ile çağırın.

Örnek Kod:



ListView listView = getListView();
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {

    @Override
    public void onItemCheckedStateChanged(ActionMode mode, int position,
                                          long id, boolean checked) {
        // Here you can do something when items are selected/de-selected,
        // such as update the title in the CAB
    }

    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        // Respond to clicks on the actions in the CAB
        switch (item.getItemId()) {
            case R.id.menu_delete:
                deleteSelectedItems();
                mode.finish(); // Action picked, so close the CAB
                return true;
            default:
                return false;
        }
    }

    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        // Inflate the menu for the CAB
        MenuInflater inflater = mode.getMenuInflater();
        inflater.inflate(R.menu.context, menu);
        return true;
    }

    @Override
    public void onDestroyActionMode(ActionMode mode) {
        // Here you can make any necessary updates to the activity when
        // the CAB is removed. By default, selected items are deselected/unchecked.
    }

    @Override
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        // Here you can perform updates to the CAB due to
        // an invalidate() request
        return false;
    }
});

    Hepsi bu kadar. Şimdi kullanıcı ne zaman uzun tıklama ile listeden bir item seçer ise, sistem onCreateActionMode() metodun çağıracak ve tanımlanmış olan işlemler ile birlikte contextual aciton bar görüntülenecektir. Contextual action bar görünür durumda iken kullanıcı diğer itemleri de seçebilecektir.

   Contextual işlemler(actions) sık kullanılan action itemlerini sağladığı bazı durumlarda, kullanıcının itemleri seçmesi için checkbox eklemek veya benzer UI elemanları eklemek isteyebilirsiniz. Çünkü, sık kullanılan bu itemler uzun tıklama sonucu çoğu zaman görünmeyebilir. Kullanıcı checkbox'ı seçtiği zaman, setItemChecked() metodu ile işaretlenmiş durumlarını sıralı list itemlere göre ayarlayarak contextual action modu çağırabilirsiniz.

Soru ve Görüşleriniz için: AndroidVeJava

9 Şubat 2015 Pazartesi

Android - Menu Kavramı Kişisel View'ler için Contextual Action Modu Aktif Etmek - 5

Kişisel View'ler İçin Contextual Action Mode

   
Orijinal Döküman

Sadece kullanıcının seçtiği özel view'ler için contextual action mod çağırmak için aşağıdaki işlemleri yapmalısınız;

  • ActionMode.Callback metodunu uygularsınız. Bu dönüş metodunda contextual action bar için, actions itemlere tıklandığında verilecek cevap işlemlerini belirleyebilir ve action mod için diğer lifecycle eventleri işleme alabilirsiniz.
  • Action bar'ı görüntülemek isterseniz startActionMode() metodunu çağırmalısınız.(örneğin kullanıcı uzun süreli tıklama olayını gerçekleştirirse)

Örneğin:

1. ActionMode.Callback metodunu arayüze uyguluyoruz.


private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {

    // Called when the action mode is created; startActionMode() was called
    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        // Inflate a menu resource providing context menu items
        MenuInflater inflater = mode.getMenuInflater();
        inflater.inflate(R.menu.context_menu, menu);
        return true;
    }

    // Called each time the action mode is shown. Always called after onCreateActionMode, but
    // may be called multiple times if the mode is invalidated.
    @Override
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        return false; // Return false if nothing is done
    }

    // Called when the user selects a contextual menu item
    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_share:
                shareCurrentItem();
                mode.finish(); // Action picked, so close the CAB
                return true;
            default:
                return false;
        }
    }

    // Called when the user exits the action mode
    @Override
    public void onDestroyActionMode(ActionMode mode) {
        mActionMode = null;
    }
};

    Bu eylem geri dönüş metotların her biri olay ile ilişkili ActionMode nesnesine parametre geçirmesi dışında neredeyse OptionsMenu geri dönüş metotları ile benzerdirler. ActionMode API kullanarak CAB'da, setTitle() ve setSubtitle() metotları yardımıyla başlık ve alt başlıkları gibi çeşitli değişiklikleri gerçekleştirebilirsiniz.( ne kadar item seçildiğini göstermek için kullanışlı bir araçtır)


2. startActionMode() metodunu çağırarak contextual action modu uygun olduğu anda, örneğin View'e uzun süreli tıklanma gerçekleşmesi gibi durumlarda aktif edebilirsiniz.


someView.setOnLongClickListener(new View.OnLongClickListener() {
// Called when the user long-clicks on someView
public boolean onLongClick(View view) {
        if (mActionMode != null) {
        return false;
        }

        // Start the CAB using the ActionMode.Callback defined above
        mActionMode = getActivity().startActionMode(mActionModeCallback);
        view.setSelected(true);
        return true;
        }
        });



    startActionMode() metodunu çağırdığınızda, sistem oluşturulmuş olan ActionMode'a döner. Bu dönüşü üye değişkene aktarırken, diğer olaylara (eventlere) cevap verildiğinde contextual action bar'da değişiklik yapabilirsiniz. Yukarıdaki ActionMode örneğinde, AcitonMode örneği hali hazırda oluşturulmuş ise üyenin null değere sahip olup olmadığını kontrol ederek yeniden oluşturulmadığından emin olmak için kullanılmıştır.

8 Şubat 2015 Pazar

Android - Menu Kavramı Context Menu Oluşturmak - 4

Context Menü (İçeriğe has menü ) Oluşturmak

Orijinal Döküman

    Menü kavramına giriş yaptığımız yazımızda kısaca değindiğimiz Context Menu kavramını bu bölümde daha detaylı olarak ele alacağız. Ben de sizler gibi bu konuyu en iyi öğrenebileceğim kaynak olan Developer.android.com adresini gün içinde defalarca ziyaret ederek hem kendim, hem de sizlerin bu kaynağın Türkçeleştirilmiş hâline erişerek bu işi öğrenmemizi amaçladığımı da tekrardan buradan aktarmak isterim.

     Contextual Menü, UI içindeki Context Frame veya belirli itemleri etkileyecek menü işlemleri sağlar. Herhangi bir View için Contextual Menü tanımlaması yapabilirsiniz ama, bu özellik sıklıkla kullanıcının her bir item için doğrudan işlem yapabileceği ListView ve GridView ya da diğer view koleksiyonları için kullanılır. 


    Contextual işlemleri sağlamak için 2 yöntem vardır. Bunlar;

  • Floating Context Menü: Menü, kullanıcının uzun süreli dokunmaları sonucu diyaloglar ile benzer şekilde floating list menü şeklinde görünür. Kullanıcılar aynı anda sadece bir item için contextual işlem gerçekleştirebilir.
  • Contextual Action Mode: Bu mod, ekranın üst kısmında seçili itemlerin etkileneceği işlem listesini görüntüleyen contextual action bar bir ActionMode uygulamasıdır. Bu mod aktif olduğunda (uygulamanız izin veriyorsa) aynı anda birden fazla seçili olan menü itemi için işlem yapılmasını sağlar.
NOT: Contextual Action Mod Android 3.0 ve daha yeni sürümler için sağlanır ve contextual actions gösterimi için tercih edilen bir tekniktir. Android 3.0'dan daha eski sürümler için bir uygulama geliştiriyorsanız, floating contextual menü özelliğini tercih etmeniz gerekir.


Floating Contextual Menü Oluşturmak

    Floating Context Menü oluşturmak için, 

  1. registerForContextMenu() metodu aracılığıyla ilişkilendirilmiş Context Menü View'ini Register edip ardından bunun View'e geçirmelisiniz. Aktivitiniz ListView veya GridView seçeneklerinden birini kullanıyorsanız ve her itemin aynı context menüyü sağlamasını istiyorsanız, Context Menü için tüm itemleri register edip ListView veya GridView'leri  registerForContextMenu() 'ye parametre olarak geçmelisiniz.
  2. onCreateContextMenu() metodunu Aktivitinize veya Fragment'inize uygulayın. Register edilen view'ler uzun-tıklama olayını aldıklarında, sistem onCreateContextMenu() metodu sistem tarafından çağrılır. Bu metot her zaman menu resource'nin inflate edildiği ve menü itemlerinin tanımlandığı yerdir.

Örnek Kod:

 @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
                                    ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.context_menu, menu);
    }
    

    MenuInflater size, menu resource'de tanımlı olan context menüyü ekranda gösterme imkânı sağlar. Geri dönüş metodu parametreleri Context Menü'de yer alan ve kullanıcını seçtiği View'leri içerir. ContextMenuInfo nesnesi, seçili menü itemleri hakkında ek bilgiler sağlar. Eğer aktivitiniz'de yer alan viewlerın her biri farklı context menü sağlıyorsa, hangi context menü'nün gösterileceğine (inflate) karar verebilmek için bu parametreleri kullanmalısınız.

    3. onContextItemSelected() metodunu uygulayın ( implemente edin). Kullanıcı menü itemini seçtiğinde, belirlemiş olduğunuz uygun işlemi gerçekleştirmek için sistem bu metodu çağıracaktır.


Örnek Kod:

   @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
        switch (item.getItemId()) {
            case R.id.edit:
                editNote(info.id);
                return true;
            case R.id.delete:
                deleteNote(info.id);
                return true;
            default:
                return super.onContextItemSelected(item);
        }
    }

     getItemId() metodu, XML menü resource'de "android:id" niteliği ile belirlemiş olduğunuz ve seçilmiş olan menü itemi için benzersiz olan ID'yi sorgular. Menü itemi başarı ile ele aldığınızda, dönüş değeri true olur. Menü itemi ele alamadığımızda ise menü itemleri superclass implementetion'a geçirmelisiniz. Aktivitiniz fragment içeriyorsa, bu geri dönüşü ilk olarak aktiviti alır. Ele alınmadığı durumda superclass çağırdığımızda, herhangi bir anda true ya da false değeri dönene kadar sistem olayları her fragment için tek tek geçirir.

     android.app.fragment ve Aktiviti için varsayılan dönüş değeri false'dir, bu nedenle Menü itemi başarılı bir şekilde ele alamadığınızda her zaman superclass metodunu çağırmalısınız.


Contextual Action Mode Aktif Etmek

    Contextual Action Mode, contextual işlemler uygulayan kullanıcı işlemlerine odaklandığı ActionMode'un sistem uygulamasıdır. Kullanıcı, item seçerek bu modu aktif ettiğinde, contextual action bar ekranın üst kısmında görünür ve seçili item için kullanıcının gerçekleştirebileceği işlemleri sunar. Eğer geliştirici olarak izin sağlarsanız bu mod aktif olduğunda, kullanıcı birden fazla item seçmek, bırakmak ve aktiviti ile bunları taşımak (yine sizin müsade ettiğiniz kadarıyla) gibi işlemleri yapabilir. Action mode pasif olduğunda ve contextual action bar, kullanıcı seçmiş olduğu itmeleri bıraktığında veya BACK butona tıkladığında veya bar'ın sol tarafında yer alan Done işlemini seçtiğinde yukarıda kaybolur. 

     NOT: Contextual Action Bar, action bar ile ilişkilendirilmiş olmak zorunda değildir. Bu iki birim, contextual action bar, action barın üzerine gelse de birbirinden bağımsız çalışmaktadır.


     Eğer Android 3.0 ve daha yeni sürümler için geliştirme yapıyorsanız, floating contextual menü yerine her zaman contextual işlemler için contextual action mod'u kullanmalısınız. 

     Contextual Actions sağlayan view'ler için, contextual action mod'u aşağıdaki durumlardan biri veya her ikisi için çağırmalısınız.
  • Kullanıcı View'e uzun süre tıklama işlemini gerçekleştirirse.
  • Kullanıcı View içerisinde check box'a veya benzer bir UI bileşenin işaretlerse.

    Uygulamanızın contextual action mod'u nasıl çağıracağı ve her bir işlem için nasıl davranacağı sizin tasarımınıza bağlıdır. Temel olarak iki tasarım vardır:

  • Kişisel, isteğe bağlı viewlerin contextual işlemleri için,
  • ListView veya GridView içinde yer alan item gruplarında contextual işlemler yığını için.           (kullanıcının birden fazla item seçmesine izin verip, tamamı için tek bir işlem yapmasını sağlamak için)

    Bir sonraki Yazımızda ise her bir senaryo için gerekli düzenlemeleri tanımlamaktadır.

Görüşmek üzere..

Soru Ve Görüşlerinizi için: JavaVeAndroid