2012-04-11 24 views
9

ActionBarSherlock tarafından desteklenen bir eylem çubuğuna sahip bir MapView sahibim. Eylem çubuğu hem bölünmüş ("dar" ekranlarda) hem de yer paylaşımlı/yarı saydamdır (android: windowActionBarOverlay true). Google Haritalar uygulaması gibi daha fazla veya daha az.Eylem çubuğu bölünmüş olup olmadığını belirleme

Şimdi, ekranın alt kısmındaki görünümü hala alt işlem çubuğunun üzerinde tutmayı tercih ediyorum. Benim sorunum, alt eylem çubuğunun yüksekliğini bilmem. Açıkçası, çizilip çekilmediğini bilmek için bir yol bile bulamıyorum. getHeight(), üstteki işlem çubuğunun yüksekliğini döndürüyor gibi görünüyor (veya belki de her ikisinin de yüksekliğidir, ancak hala alt eylem çubuğunun mevcut olup olmadığını bilmiyorum.)

Lütfen bana bu bilgilerin doğru olduğunu söyle gözlerimin önünde!

cevap

2

alt çubuk ?android:attr/actionBarSize kullanarak Böylece. düzenli işlem çubuğunun yüksekliğini maç (veya ActionBarSherlock davası ?attr/actionBarSize olarak) yeterli olacaktır kodunda XML veya getResources().getDimensionPixelSize(R.attr.actionBarSize) yüksekliği için olmalıdır.

düzenleme:

Er, sorunuzun ikinci bir okumasında, bölünmüş eylem çubuğunun var olup olmadığını belirlemeye daha odaklanmış görünüyor.

Bu cevaplar ve Adam Powell, işlem çubuğu guru tarafından takip yorumları okumak isteyebilirsiniz:

+0

Evet, aynı zamanda var olup olmadığını bilmem gerek. Her neyse, Android Office Saatlerinde (Romence düşünerek) bana bunun mümkün olmadığını söylendi. En azından kolay ve düz bir şekilde değil. Bu nedenle, şimdi tek bir üst eylem çubuğu ile deneme yapıyoruz ve alt eylem çubuğunu bunun yerine düzenli bir görünümle taklit ediyoruz. Bu, yalnızca bu sorunu değil, aynı zamanda bazı eylemleri de en üstteki eylem çubuğuna "zorlamak" istediğimiz yeri çözmektedir. – pakerfeldt

3

Aynı sorunla karşılaştık. Telefon modunda portre modunda, hareket çubuğu bölünür. Dolayısıyla, menü öğeleri en üstteki işlem çubuğunda ve sekmeler de aşağıdaki ikinci bir eylem çubuğunda (tabbar) bulunur. Sadece, hareket çubuğunun yüksekliğini belirlemek için herhangi bir yol bulamadım: ekranımı oluşturmadan önce ekranda hangi alanın kaldığını görmek için.

Yani bir varsayım yaptı: küçük ve normal screensize cihazlarda

  • İşlem Çubuğu dikey modda ayrılmıştır İşlem Çubuğu da dikey modda
  • bölünmüş durumda (Nexus 7 gibi) büyük screensize cihazlarda
  • xlarge screensize cihazlar (tabletler) İşlem Çubuğu

yüzden farklı screensizes ayırt dikey modda bölünmüş ve bir bool kaynakoluşturulmaz üzerinde

  • Boolean isSplit = getResources().getBoolean(R.bool.is_split_actionbar); 
    

    yöntemi) (onCreateView içinde İşlem Çubuğu yüksekliği elde etmek için:: kodunda

    <!-- res/values/booleans.xml --> 
    <?xml version="1.0" encoding="utf-8"?> 
    <resources> 
        <bool name="is_split_actionbar">false</bool> 
    </resources> 
    
    <!-- res/values-small-port/booleans.xml 
        res/values-normal-port/booleans.xml 
        res/values-large-port/booleans.xml --> 
    <?xml version="1.0" encoding="utf-8"?> 
    <resources> 
        <bool name="is_split_actionbar">true</bool> 
    </resources> 
    
    böyle değere erişmek

    TypedValue typedVal = new TypedValue(); 
    getActivity().getTheme().resolveAttribute(R.attr.actionBarSize, typedVal, true); // use android.R when not using ABS 
    int actionBarHeight = getResources().getDimensionPixelSize(typedVal.resourceId); 
    

    Ve çift yükseklik İşlem Çubuğu eğer ayrılmıştır:

    if(isSplit) 
        actionBarHeight = actionBarHeight * 2; 
    

    Bu ideal bir çözüm değil, benim için bu işe yarıyor.

  • +0

    Çözümün en yakın cevabı. –

    +2

    Bana göre bu varsayım yanlış bir önermeye dayanıyor: Benim eylem çubuğum bir Nexus 4 üzerinde bölündü, ancak bir Nexus 7'de yok. –

    +0

    Nexus 7 API 25 Android Studio emülatörüne de bölünmedi. – isabsent

    5

    Eğer ActionBarSherlock kullanıyorsanız Sırf bazı statik size (ActionBarSherlock itibaren) ResourcesCompat kullanmak gerekir

    return ResourcesCompat.getResources_getBoolean(context, 
              R.bool.abs__split_action_bar_is_narrow); 
    

    yapabilirsiniz yöntemi sınıfı oluşturmak

    abs__split_action_bar_is_narrow boole değeri için bakabilirsiniz öncesi 3.2 metrikleri olan klasörleri okuyamaz (değerler-sw480 gibi)

    +0

    Bu hala API 3.1 + içinde çalışacak mı? yani ActionBarSherlock aslında yerel eylem çubuğunu kullanıyorsa? –

    +0

    @CarlosP Evet, Galaxy Nexus 4.2.2 üzerinde çalışıyordu. –

    +0

    Raporlama için teşekkürler, teşekkürler - umarım diğer kullanıcılara yardımcı olur. –

    İlgili konular