2014-10-21 16 views
64

android.view.ActionMode numaralı telefonu, android.support.v7.widget.Toolbar numaralı geleneksel sürümle birlikte, geleneksel android.app.ActionBar eklemeye çalışıyorum. Birlikte görüntülemek mümkün duyuyorum:Araç Çubuğunda ActionMode'u Göster

toolbar.startActionMode(callback); 

sorun ActionModeActionBar üzerinde görüntülenir değil Toolbar üzerinde olmasıdır. Bunu değiştirmenin bir yolu var mı?

Benim tema aşağıdaki tespitleri yapmak tryied ama hiçbir şeyi değiştirmez görünmüyor:

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

Bence ActionMode, ActionBar'ın bir parçasıdır ve konumunu değiştiremezsiniz – SpyZip

+0

Bu çok kötü. Cevap için teşekkürler –

+1

Araç çubuğunu actionbar olarak ayarladınız mı? –

cevap

27

Temanızın bu deneyin:

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

Sorumlulukta belirtildiği gibi, bunu başarıyla denedim. Ama teşekkür ederim! –

+0

Üzgünüm, bunu daha önce denediğini farketmedim. İşe yaramadığından emin misin? Benim için çalışıyor. –

+0

Aynı problem vardı ve bu onu düzeltir. Teşekkürler! –

49

etkinlik üzerinde başlamayın ama araç çubuğunda. size aktivitede: ve

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
toolbar.startActionMode(mActionModeCallback) 

Eğer Andre tarafından belirtildiği gibi tema

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

kullanmak zorunda.

+1

Bu benim için çalıştı, çünkü özel bir zorunluluk da vardı. ActionMode.Callback işlevini uygulamak yerine, MultiChoiceModeListener işlevini uygulamak istedim. ActionMode desteğini kullanmayla ilgili problem, "MultiChoiceModeListener" ürününün destek sürümü olarak görünmüyor olmasıdır. – jwir3

54

Eğer Toolbar kullandığınıza göre, ben de size AppCompatActivity kullanıyor ve ithal ediyoruz sağlamak Hepsinden setSupportActionBar(toolbar);

İlk kullanarak aramaları özel Toolbar ile ActionBar inşa yerini almıştır varsayalım doğru ad alanı.

import android.support.v7.view.ActionMode; 

ve NOT

import android.view.ActionMode; 

sonra kullanmak

_actionMode = startSupportActionMode(this); 

ve NOT

_actionMode = startActionMode(this); 
+19

Bu artı 'windowActionModeOverlay' ayarı benim için çalıştı. – Jimeux

+4

Şu anda “AppCompatActivity” kullanıyorum ve “windowActionModeOverlay” özelliğini eklemek benim için yeterliydi. Ben, 'android.support.v7.view.ActionMode' import kullanmayı denedim ama 'MultiChoiceModeListener' ile çalışmadı, bu yüzden yerine' android.view.ActionMode' kullanarak bitti. MultiChoiceModeListener'ün bir destek sürümü olup olmadığını biliyor musunuz? Teşekkürler – Axel

+0

MultiChoiceModeListener'ın bir destek sürümü var mı? – galaxigirl

1

Bu benim yaptığım bir çözümdür. benim onCreateActionMode yöntemde ActionMode.Callback yılında

, bu ekleyin:

StandaloneActionMode standaloneActionMode = (StandaloneActionMode) actionMode; 
Field mContextView; 
try { 
    mContextView = StandaloneActionMode.class.getDeclaredField("mContextView"); 
    mContextView.setAccessible(true); 
    View contextView = (View) mContextView.get(standaloneActionMode); 
    MarginLayoutParams params = (MarginLayoutParams) contextView.getLayoutParams(); 
    params.topMargin = mToolbar.getTop(); 
    } catch (NoSuchFieldException e) { 
      e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
      e.printStackTrace(); 
    } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
    } 

Bana uyar.

0

Yukarıdaki tüm yöntemleri denedim, ancak yine de çalışmıyor. Ben aksiyon modunu ve destek kütüphane startSupportActionMode yöntemi kullandım İşte

private class ActionModeCallback implements ActionMode.Callback { 
    @Override 
    public boolean onCreateActionMode(ActionMode actionMode, Menu menu) { 
     actionMode.getMenuInflater().inflate(R.menu.note_find_action, menu); 
     return true; 
    } 

    @Override 
    public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) { 
     ((AppCompatActivity) getActivity()).getSupportActionBar().hide(); 
     return false; 
    } 

    @Override 
    public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) { 
     return false; 
    } 

    @Override 
    public void onDestroyActionMode(ActionMode actionMode) { 
     ((AppCompatActivity) getActivity()).getSupportActionBar().show(); 
    } 
} 

: Ve sonra, aşağıda yöntemi denedik. Aynı zamanda verilen etkinlik temasını değiştirmeye çalıştım. Elbette işe yaramıyor. Yani, gerçekten daha iyi bir seçeneğiniz yoksa, bunu deneyebilirsiniz.

Yakın bir zamanda, uygulamanızın birden çok temasını etkinleştirmek için Renkli çerçeveyi kullandığımı fark ettim. Bu, temayı kod içinde değiştirecek. Bu çerçevede stili değiştirmeye çalıştığımda işe yarıyor.

Umut çalışıyor.