2013-07-30 4 views
17

Я пытаюсь добавить меню параметров в панели действий к моему существующему приложению, но все еще не работает ... Внутри, если я создаю новый проект с приложением «hello world» по умолчанию, я могу видеть кнопку в действии бар. Метод onCreateOptionMenu(), кажется, никогда не попадает в отладку с точкой останова. Что случилось?Android action не видно

Я работаю с API 14 в обоих приложениях, и это мой код 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; 
} 
} 

мое меню код 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

Я думаю, проблема связана с отображением пункта менюAsAction = "never". Попытка изменить его на showAsAction = «always | ifRoom» –

ответ

12

Вы пытались установить тему приложение к теме, которая поддерживает ActionBar, как Theme.Holo.Light?

Кроме того, в вашем Activity вы можете попробовать getActionBar().show();.

+1

да, я использую Holo.Theme, который включает ActionBar и уже пробовал getActionBar(). Show(); метод onCreateOption никогда не называется – Wildchild7

+0

Можете ли вы разместить свой «AndroidManifest.xml»? – crocboy

+0

Что находится в 'AppTheme'? Я не знаю, почему ваш ActionBar не отображается. – crocboy

2

ваша основная деятельность должна быть такой:

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; 
    } 



} 

и ваш main.xml так:

<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> 

это хорошее и простое руководство для создания панели действий: http://www.vogella.com/tutorials/AndroidActionBar/article.html

+0

Спасибо, но почему простое приложение hello world работает только с методом onCreate и onCreateOptionMenu? – Wildchild7

+1

попробуйте изменить минимальный API до 11 – AndroidCB

+0

без изменений с API 11 – Wildchild7

20

В моем случае, что исправляло проблему, был ответ this question; для удаления

android:theme="@style/AppTheme" 

из тега в манифесте.

+0

Спасибо, это сработало для меня –

+0

Спасибо, это сработало для меня тоже :) –

0

Вы должны вызвать метод setHasOptionsMenu (true); в OnCreate метод

+0

Это требуется только фрагментами. http://developer.android.com/reference/android/app/Fragment.html#setHasOptionsMenu(boolean) – faizal

12

Principale расширяет ActionBarActivity должны заботиться о проблеме

1

Убедитесь, что вы не используете:

requestWindowFeature(Window.FEATURE_NO_TITLE); 

в файле XML-макета.

+0

- это тот же эффект, что и " true"? @JanZiesse? – gumuruh

0

В моем меню Действия бара дело не был виден при использовании общественного класс MainActivity расширяет активность { } но был виден при использовании общественного класс MainActivity расширяет ActionBarActivity { }

5

Вы продлили активность. Попробуйте расширение ActionBarActivity в Java коде

+0

Ты спас мой день. :) –

+7

В качестве обновления ActionBarActivity устарела, вместо этого используйте AppCompatActivity. – Merkidemis

0

Я использую Samsung молодых 2, как андроид эмулятор и у меня такая же проблема, я reslov это путем удаления android:theme ="" из Manifest.xml и изменения темы к другой панели действий поддержки темы

2

на создание вашей деятельности.

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

Спасибо за ваш ответ, это спасло мое время. Добавьте -actionBar.setDisplayShowTitleEnabled (false); - в этом ответе. – Thirumalvalavan

1

У меня была такая же проблема, и я подтверждаю, что если вы удалите android:theme="@style/AppTheme" из AndroidManifest.xml, это решит вашу проблему.

-2

Вы должны продлить AppCompatActivity.

2

Проведено 3 часа и, в конечном итоге, зафиксировано! Забудьте удалить андроид: theme = "@ style/AppTheme" из вашего манифеста. Это приводит к ошибке во время выполнения. Вот как я исправил проблему. Ваша деятельность должна расширять AppCompatActivity вместо Activity.

0
getSupportActionBar().show(); 

Просто вставьте этот код в Java OnCreate функции.

Смежные вопросы