2013-08-26 11 views
18

Używam ActionBarCompat w mojej aplikacji, chcę pokazać jeden lub dwa elementy na pasku akcjiPozycje w ActionBarCompat są zawsze pokazał przepełnienie

I follwed instrukcji programistów Google, ale kiedy go przetestować , pozycje są pokazane w opcji "Przelew" (w Nexusie 4) i jeśli dotknę przycisku menu, jeśli istnieje (np. Galaxy S3)

Co robię źle?

ROZWIĄZANIE FOUND

Można go znaleźć w odpowiedzi.

+2

Lepiej opublikować rozwiązanie jako rzeczywistą odpowiedź. –

+0

@MarkCarter Po "kilku" czasie .. Widzę twoją prośbę i edytuję swój post, aby przygotować pytanie do odpowiedzi. Dzięki (trochę późno) za sugestię. – Shudy

Odpowiedz

0

znalazłem rozwiązanie, więc pisał jako odpowiedź:

Rozwiązaniem znalezionym

W xml menu, trzeba postawić nowy obszar nazw, aby actionbarcompat pracy. Jest więc kilka opcji, które wymagają tej nazwy przestrzeni zamiast "androida". Więc rozwiązania jest to, że:

Old Logowanie menu:

<item 
     android:id="@+id/action_register" 
     android:showAsAction="always" 
     android:title="@string/login_menu_register"/> 

Nowy Logowanie Menu (roztwór) (Spójrz, jak jest caled "showAsAction")

<item 
     android:id="@+id/action_register" 
     shudy:showAsAction="always" 
     android:title="@string/login_menu_register"/> 

Login.xml (MENU)

<item 
    android:id="@+id/action_register" 
    android:showAsAction="always" 
    android:title="@string/login_menu_register"/> 
<item 
    android:id="@+id/action_register2" 
    android:showAsAction="always" 
    android:title="miau"/> 

LoginActivity.java

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     SLog.d(CLASS_NAME + " onCreate()"); 
     setContentView(R.layout.activity_login); 
     actionBar = getSupportActionBar(); 
     actionBar.setDisplayHomeAsUpEnabled(true); 
     actionBar.setHomeButtonEnabled(true); 
     findViews(); 
     buttons(); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.login, menu); 
     return true; 
    } 

Oczywista

<application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/Theme.AppCompat.Light.DarkActionBar" > 
     <activity 
      android:name="com.shudy.myworld.LoginActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

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

enter image description hereenter image description here

0

Myślę, że musisz podać ikonę tych działań, aby mogły pojawić się na pasku akcji.

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:shudy="http://schemas.android.com/apk/res-auto" > 

<item 
    android:id="@+id/action_register" 
    android:showAsAction="always" 
    android:icon="@drawable/some_icon" 
    android:title="@string/login_menu_register" /> 
<item 
    android:id="@+id/action_register2" 
    android:showAsAction="always" 
    android:icon="@drawable/some_icon2" 
    android:title="miau" /> 

</menu> 
+0

Doens't Praca: S, ale znalazłem rozwiązanie;) Będę edytować moją odpowiedź na zrobić dla każdego. – Shudy

0
<item 
    android:id="@+id/ok" 
    android:icon="@drawable/ic_ok" 
    android:orderInCategory="0" 
    android:showAsAction="ifRoom" 
    android:title="OK"/> 
3

miałem ten sam problem i znaleźć dwa rozwiązania:

W menu (Login.xml xml), wykorzystać swoją nazwę aplikacji dla tagu showAsAction:

zamiast:

<item 
    android:id="@+id/action_register" 
    android:showAsAction="always" 
    android:icon="@drawable/some_icon" 
    android:title="@string/login_menu_register" /> 

zastosowanie:

<item 
    android:id="@+id/action_register" 
    yourappname:showAsAction="always" 
    android:icon="@drawable/some_icon" 
    android:title="@string/login_menu_register" /> 

Przypuszczam, że nazwa twojego podania jest zacieniona.

drugie rozwiązanie dla mnie, od klasy aktywności, w onCreateOptionsMenu()

public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(
    getMenuInflater().inflate(R.menu.main, menu); 
    MenuItem registerMenuItem = menu.findItem(R.id.action_register); 
    registerMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); // change this in backcompat 
    return true; 
} 

jeśli używasz backCompatibility zmień ostatnią linię:

MenuItemCompat.setShowAsAction(registerMenuItem,MenuItemCompat.SHOW_AS_ACTION_ALWAYS); 
+0

Programowe wywoływanie 'setShowAsAction' było magicznym sosem, którego potrzebowałem. Zastanawiam się, dlaczego XML nie działa. – Synesso

+0

w niektórych moich xml przy użyciu app compat, prefiks Android jest potrzebny, a czasami nie, w zależności od wersji Androida. O ile dobrze pamiętam, Android: tło nie działa w Androidzie <12 i musisz używać tylko tła. Wydaje mi się, że to samo dzieje się tutaj. –

0

Mamy dwa sposoby substancji rozpuszczonej ten problem.

  1. Potrzebujesz dodać biblioteki "ActionBarSherlock". Jest to użycie ActionbarSherlock.

LUB 2. Potrzebujesz dodać biblioteki "android-Support-v7". Jeśli wybór ten sposób, oznacza to menu.xml trzeba tak:

<?xml version="1.0" encoding="UTF-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:v7="http://schemas.android.com/apk/res-auto" > 
<item 
    android:id="..." 
    android:icon="..." 
    android:showAsAction="always" 
    android:title="..." 
    v7:showAsAction="always"/> 
</menu> 
0

Odnosi się to również do Android Toolbar w nowych koncepcji Materiał projektowanie w AppCompat-V21 i poziom API 21 i powyżej.

Powiązane problemy