2012-11-28 3 views
6

Wiem, że było wiele pytań ActionBar, ale nie wydają się one rozwiązywać mojego problemu. Jestem w stanie wypluć ActionBar z mojego emulatora, ale kiedy uruchomię swój program na moim urządzeniu (tryb portretu Nexus 7), ActionBar nie zostanie podzielony. Wszystkie ikony są na wierzchu, nawet moje karty tworzą listę rozwijaną. Próbowałem wymusić ten problem, ustawiając nazwy pozycji menu wyjątkowo długo i mam je ustawione na: android: showAsAction = "always | withText". Dla pewności wziąłem przykładowy kod, uruchomiłem go na emulatorze i zobaczyłem, że działa, a następnie umieszczam na moim urządzeniu bezskutecznie. Tu jest mój manifest:Android ActionBar nie zostanie podzielony na urządzenie

<uses-sdk 
    android:minSdkVersion="14" 
    android:targetSdkVersion="15" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/MyTheme"> 
    <activity 
     android:name=".MainActivity" 
     android:uiOptions="splitActionBarWhenNarrow" 
     android:label="@string/title_activity_main"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

mam prana w internecie, ale nie może znaleźć rozwiązanie. Każda pomoc jest doceniana.

+0

Mam ten sam problem. Czytałem gdzieś, że "splitActionBar" dotyczy tylko telefonów, a nie tabletów, ale mam nadzieję, że to mit ... – Ridcully

Odpowiedz

7

Zgodnie z this SO item, pasek akcji jest dzielony tylko wtedy, gdy dostępna szerokość jest mniejsza niż 480dp. Według this article Google'a Dianne Hackborn, szerokość portretu Nexusa 7 wynosi 600dp. To dlatego nie ma podziału.

Zgadzam się z Państwem, że podział powinien zależeć od związku między dostępnym miejscem i przedmiotami, a nie tylko z dostępnej przestrzeni.

+0

Ridcully, dzięki za to. Jestem zaskoczony, że tak jest. –

7

Wiem, że to pytanie jest dość stary, ale znalazłem sposób zmusić actionbar do Buttom na Nexus 7 (i ewentualnych innych urządzeń) i pomyślałem, że podzielę moje rozwiązanie:

Place ten kod w Twojej aktywności:

/** 
* {@inheritDoc} 
*/ 
@Override 
public Resources getResources() { 
    return new ResourceFix(super.getResources()); 
} 

private class ResourceFix extends Resources { 
    private int targetId = 0; 

    ResourceFix(Resources resources) { 
     super(resources.getAssets(), resources.getDisplayMetrics(), resources.getConfiguration()); 
     targetId = Resources.getSystem().getIdentifier("split_action_bar_is_narrow", "bool", "android"); 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    @Override 
    public boolean getBoolean(int id) throws Resources.NotFoundException { 
     return targetId == id || super.getBoolean(id); 
    } 
} 

To spowoduje wymuszenie wartości wewnętrznej "split_action_bar_is_narrow". Może nie jest to najlepszy sposób, ale wydaje się, że to jedyny sposób, jaki znalazłem.

+1

Fajny hack. Mam nadzieję, że uzyska pewną widoczność. Jest to częste pytanie. Niesamowite. – dinigo

+0

. Dobra robota! –