2013-07-30 36 views
17

Próbuję dodać menu opcji w pasku akcji do mojej istniejącej aplikacji, ale wciąż nie działa ... Intesad, jeśli zrobię nowy projekt z domyślną aplikacją "Witaj świecie" Widzę przycisk w akcji bar. Metoda onCreateOptionMenu() wydaje się nigdy nie przechwycić w debugowaniu z punktem przerwania Co jest nie tak?Pasek narzędzi Android niewidoczny

Pracuję z interfejsem API 14 w obu aplikacjach i jest to mój kod MainActivity.

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 

public class Principale extends Activity { 


/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.ecran_d_acceuil); 


} 
public boolean onCreateOptionMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.principale, menu); 
    return true; 
} 
} 

moje menu kodu xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
<item 
    android:id="@+id/action_settings" 
    android:orderInCategory="100" 
    android:showAsAction="never" 
    android:title="@string/action_settings"/> 
</menu> 

manifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.myapp" 
    android:versionCode="1" 
    android:versionName="1.0" > 

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

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.example.myapp.Principale" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name="com.example.myapp.Home" 
      android:label="@string/title_activity_home" > 
     </activity> 
     <activity 
      android:name="com.example.myapp.ListDir" 
      android:label="@string/title_activity_list_dir" > 
     </activity> 
    </application> 
</manifest> 
+0

Myślę, że problem dotyczy elementu menu showAsAction = "never". Próba zmiany go na showAsAction = "always | ifRoom" –

Odpowiedz

12

Próbowałeś ustawić aplikację tematu do tematu, który obsługuje ActionBar, jak Theme.Holo.Light?

Również w swoim Activity możesz wypróbować getActionBar().show();.

+1

tak, używam Holo.Theme, które zawierają ActionBar i już wypróbowałem getActionBar(). Show(); metoda onCreateOption nigdy nie jest nazywana – Wildchild7

+0

Czy możesz zamieścić swój plik "AndroidManifest.xml"? – crocboy

+0

Co zawiera słowo "AppTheme"? Nie wiem, dlaczego Twój pasek akcji się nie wyświetla. – crocboy

2

swoją główną działalność musi być tak:

import android.os.Bundle; 
import android.app.ActionBar; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    ActionBar actionBar = getActionBar(); 
    actionBar.hide(); 

    actionBar.show(); 
    actionBar.setSubtitle("subtitle"); 
    actionBar.setTitle("title"); 


} 

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

@Override public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.action_refresh: 
     Toast.makeText(this, "Menu Item 1 selected", Toast.LENGTH_SHORT) 
      .show(); 
     break; 

     default: 
      break; 
      } 
    return true; 
    } 



} 

a main.xml tak:

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

    <item 
     android:id="@+id/action_refresh" 
     android:orderInCategory="100" 
     android:showAsAction="always" 
     android:icon="@drawable/ic_action_search" 
     android:title="Refresh"/> 
    <item 
     android:id="@+id/action_settings" 
     android:title="Settings"> 
    </item> 

</menu> 

to dobry i prosty przewodnik do tworzenia pasek akcji: http://www.vogella.com/tutorials/AndroidActionBar/article.html

+0

Dzięki, ale dlaczego prosta aplikacja Hello World działa tylko z metodą onCreate i onCreateOptionMenu? – Wildchild7

+1

spróbuj zmienić minimum API na 11 – AndroidCB

+0

bez zmian z API 11 – Wildchild7

20

W moim przypadku, co naprawiło problem, była odpowiedź: this question; aby usunąć

android:theme="@style/AppTheme" 

ze znaczka w manifeście.

+0

Dzięki, to zadziałało dla mnie –

+0

Dzięki, to działało również dla mnie :) –

0

musisz wywołać metodę setHasOptionsMenu (true); W metodzie OnCreate

+0

To jest wymagane tylko w fragmentach. http://developer.android.com/reference/android/app/Fragment.html#setHasOptionsMenu(boolean) – faizal

12

Principale rozciąga ActionBarActivity powinien dbać o numerze

1

Upewnij się, że nie należy używać:

requestWindowFeature(Window.FEATURE_NO_TITLE); 

w pliku .xml układu.

+0

jest to dający taki sam efekt jak " true"? @JanZiesse? – gumuruh

0

w moim przypadku bar menu Akcja nie była widoczna stosowany public class główną działalność rozciąga Aktywny { } ale widoczny był stosowany public class główną działalność rozciąga ActionBarActivity { }

5

Masz przedłużone działanie. Spróbuj rozszerzenie ActionBarActivity w kodzie java

+0

Uratowałeś mi dzień. :) –

+7

Jako aktualizacja ActionBarActivity jest przestarzała, należy zamiast niej użyć AppCompatActivity. – Merkidemis

0

używam Samsung młodą 2 jako android emulator i mam ten sam problem, to ja reslov usuwając android:theme ="" z manifest.xml i zmieniając temat na inny temat wsparcia pasku akcji

2

o utworzeniu swojej aktywności.

getSupportActionBar().setDisplayShowCustomEnabled(true); 
     getSupportActionBar().setDisplayShowHomeEnabled(false); 
     customNav = LayoutInflater.from(this).inflate(
       R.layout.action_bar_customvieew, null); 
     getSupportActionBar().setCustomView(customNav); 
+0

Dzięki za odpowiedź, zaoszczędziłem mój czas. Dodaj --actionBar.setDisplayShowTitleEnabled (false); - w tej odpowiedzi. – Thirumalvalavan

1

miałem ten sam problem i mogę potwierdzić, że jeśli usuniesz android:theme="@style/AppTheme" z AndroidManifest.xml będzie rozwiązać problem.

-2

Powinieneś przedłużyć AppCompatActivity.

2

Spędził 3 godziny i ostatecznie naprawił to! Zapomnij o usunięciu z pliku manifestu: theme = "@ style/AppTheme". To powoduje błąd czasu wykonywania. W ten sposób naprawiłem problem. Twoja aktywność powinna rozszerzyć AppCompatActivity zamiast Activity.

0
getSupportActionBar().show(); 

Wystarczy wkleić ten kod w Javie onCreate funkcyjnego.

Powiązane problemy