24

Uygulama çubuğu ve gezinme çekmecesi ile bir etkinliğim var. Uygulama çubuğu, appcompat-v7 kitaplık sürümü 21. + 'dan yeni Araç Çubuğu sınıfını kullanarak uygulanır ve gezinti çekmecesi bunun önünde görüntülenir.İçeriğe Dayalı ActionMode Çubuğu, appcompat-v7 Araç Çubuğunu üst üste yerleştirir, ancak gezinme çekmecesini nasıl değil?

Etkinlik, seçilebilecek öğelerle birlikte bir liste görünümü içerir, bu yüzden bir bağlamsal eylem çubuğu (CAB) gösteriyorum. Bu arayarak başlatılır:

ActionBarActivity.startSupportActionMode(android.support.v7.view.ActionMode.Callback callback) 

Varsayılan olarak, CAB yerine onu kaplayan bir Toolbar üstüne eklenir; CAB, gerçek ActionBar'ı varsayılan olarak yalnızca kaplayacak gibi görünüyor. this answer gösterdiği gibi, CAB doğru bu tema özelliği ayarlandığında araç çubuğunu kaplayan:

<item name="windowActionModeOverlay">true</item> 

Ama bu da the Material design specs göre yanlıştır CAB bindirme gezinme çekmecesi yapar. Gezinme çekmecesi açıldığında ve kapatıldığında tekrar gösterildiğinde ana makine tasarımında still recommend CAB gizleniyor ve this could be done sorunu "düzeltmek" ama gerekli olmamalıdır. Materyal tasarım özellikleri, nav çekmecesi açıldığında CAB'ın gizlenmesini ve nav çekmecesinin CAB üzerinde açılmasının gerekmediğini, CAB'yi gizlemenin görsel bir dikkat dağıtıcı olacağını belirtmez.

Gezinme çekmecesini hala Araç Çubuğunun üzerine yerleştirirken CAB'nin önünde görüntülemek için herhangi bir yol var mı?

cevap

1

Bir çözüm bulabilirdim - veya belki de basit bir çözüm.
startActionMode(), yerleşik setChoiceMode() yerine kullanıldığında, bir ListFragment ile bile aynı sorunu yaşadım. ListFragment kodunu inceledim ve etkinlikte değil, ListView'de startActionMode() çağrıldığını buldum, bu yüzden bir görünüm kullanmayı denedim. Şimdi

  • : Ayrıca

    View aView = getActivity().findViewById(R.id.container); 
    ActionMode mActionMode = aView.startActionMode(this); 
    

    : my parçasını içerir Etkinlik kabı

    ActionMode mActionMode = getListView().startActionMode(this); 
    

    veya kullanma: beklendiği gibi Benim kod şimdi görünüşte iki parça ListView kullanarak çalışır geri düğmesi,

  • 'un önündeki işlem modunu ortadan kaldırırken, CAB artık Action Çubuğunu uygun şekilde kaplamaktadır. Benim tarzında gr windowActionModeOverlay bunun sadece bir kısmını kapsayan oldu - en azından benim durumumda
  • CAB simgesi bir arka ok yerine bir kene - değil

Ben dürüst olmak gerekirse olsa bunun ne anlama emin Bunun arkasındaki nedenlerden emin değilim, bu yüzden bu çözümlerin ne kadar güvenli olduğundan emin değilim, ancak zamanın iyi çalıştığını düşünüyorum.
Daha iyi bir anlayışa sahip olmak için lütfen yorum yapmaktan veya düzenlemekten çekinmeyin.

+3

ListView yerine bir RecyclerView kullanıyorum. En azından bu durumda, bu işe yaramadı. CAB hala çekmecenin üzerindedir. –